var crossBrowser = {};
crossBrowser.docEl = (typeof document.compatMode != 'undefined' && document.compatMode != 'BackCompat') ? 'documentElement' : 'body';
crossBrowser.is_ie = navigator.userAgent.toLowerCase().indexOf('msie') != -1;
crossBrowser.is_ff = navigator.userAgent.toLowerCase().indexOf('firefox') != -1;
crossBrowser.is_opera = navigator.userAgent.toLowerCase().indexOf('opera') != -1;
crossBrowser.is_safari = navigator.userAgent.toLowerCase().indexOf('safari') != -1;
if (window.innerWidth) {
  crossBrowser.getWindowInnerWidth = function() {return window.innerWidth; };
  crossBrowser.getWindowInnerHeight = function() { return window.innerHeight; };
  crossBrowser.getScrollX = function() { return window.pageXOffset; };
  crossBrowser.getScrollY = function() { return window.pageYOffset; };
} else {
  crossBrowser.getWindowInnerWidth = function() { return document[crossBrowser.docEl].clientWidth; };
  crossBrowser.getWindowInnerHeight = function() { return document[crossBrowser.docEl].clientHeight; };
  crossBrowser.getScrollX = function() { return document[crossBrowser.docEl].scrollLeft; };
  crossBrowser.getScrollY = function() { return document[crossBrowser.docEl].scrollTop; };
}
crossBrowser.getPageWidth = function() { return document[crossBrowser.docEl].scrollWidth; };
crossBrowser.getPageHeight = function() { return document[crossBrowser.docEl].scrollHeight; };
crossBrowser.getMousePos = function(e) {
  e = e || window.event;
  var x = e.clientX + crossBrowser.getScrollX();
  var y = e.clientY + crossBrowser.getScrollY();
  if (crossBrowser.is_ie) { // absolute Mausposition für IE6/7 korrigieren 
    var d = document[crossBrowser.docEl]; // d = HTML
    x = (x < d.clientLeft) ? 0 : x - d.clientLeft; 
    y = (y < d.clientTop) ? 0 : y - d.clientTop; 
  }
  return {x:x,y:y};
};
if (window.XMLHttpRequest) {
  crossBrowser.getXMLHttpRequest = function() { return new XMLHttpRequest(); };
} else if (window.ActiveXObject) {
  try {
    test = new ActiveXObject('Msxml2.XMLHTTP');
    crossBrowser.getXMLHttpRequest = function() { return new ActiveXObject('Msxml2.XMLHTTP'); };
  } catch (ex) {
    try {
      test = new ActiveXObject('Microsoft.XMLHTTP');
      crossBrowser.getXMLHttpRequest = function() { return new ActiveXObject('Microsoft.XMLHTTP'); };
    } catch (exx) {
      crossBrowser.getXMLHttpRequest = function() { return null; };
    }
  }
  delete test;
} else {
  crossBrowser.getXMLHttpRequest = function() { return null; };
}
if (window.addEventListener) {
  crossBrowser.addEvent = function(el,eventType,eventFunction) {
    el.addEventListener(eventType,eventFunction,false);
  };
  crossBrowser.removeEvent = function(el,eventType,eventFunction) {
    el.removeEventListener(eventType,eventFunction,false);
  };
} else {
  crossBrowser.addEvent = function(el,eventType,eventFunction) {
    el.attachEvent('on'+eventType,eventFunction);
  };
  crossBrowser.removeEvent = function(el,eventType,eventFunction) {
    el.detachEvent('on'+eventType,eventFunction);
  };
}