  if(document.addEventListener){//firefox
    window.addEventListener("load", setFirefoxActiveElementEvents, false);
  
    document.addEventListener("DOMMouseScroll", captureMouseWheel, false);
    if (document.layers)
      document.captureEvents(Event.KEYDOWN);
    document.addEventListener("keydown", captureAction, false);
  }else{//IE
    document.onmousewheel = captureMouseWheel;
    document.attachEvent("onkeydown", captureAction);
  }

// capture the action
  function captureAction(){
    var event = window.event || arguments[0];
    if (isFunctionKey(event) || isAltLeftOrRight(event) || isBackspace(event) || 
        isInvalidControlKey(event) 
       ) {
      if(event.stopPropagation){//firefox
        event.preventDefault();
        event.stopPropagation();
      }
      return false;
    }
    return true;
  }
  
//if F2 - F12 is pressed (for IE only)
  function isFunctionKey(e) {
    if ((e.keyCode > 112) && (e.keyCode < 124)) {
      try {
        e.keyCode = 0;
      } catch (ex) {
        // do nothing if setting keycode value results in a javascript error
      }
      return true;
    }
    return false;
  }

  var firefoxActiveElement;
  function setFirefoxActiveElementEvents(){
    var inputs = document.getElementsByTagName("input");
    for(var i=0; i<inputs.length;i++){
      inputs[i].addEventListener("focus", setFirefoxActiveElement, true);
      inputs[i].addEventListener("blur", blurMe, true);
    }
    
    var selects = document.getElementsByTagName("textarea");
    for(var i=0; i<selects.length;i++){
      selects[i].addEventListener("focus", setFirefoxActiveElement, true);
      selects[i].addEventListener("blur", blurMe, true);
    }
  }
  function setFirefoxActiveElement(){
    firefoxActiveElement = this;
  }
  function blurMe(){
    if(firefoxActiveElement==this) {
      firefoxActiveElement = null;
    }
  }
  function getActiveElement(){
    if(document.activeElement) return document.activeElement;
    if(firefoxActiveElement) return firefoxActiveElement;
    return document;
  }
  
  function isBackspace(e) {
    var sActiveElement = getActiveElement().type;
    if (e.keyCode == 8 && (
        (sActiveElement != "text") && (sActiveElement != "file") && 
        (sActiveElement != "textarea") && (sActiveElement != "password"))
       ) {
      return true;
    }    
    return false; 
  }

//if key pressed is alt-left or alt-right  
  function isAltLeftOrRight(e) {
    if (e.altKey && (e.keyCode == 37 || e.keyCode == 39)) {
      return true;
    }
    return false;
  }

//if Ctrl + any key (except for "F","C","V", "X"). 
  function isInvalidControlKey(e) {
    //70:Ctrl-F; 67:Ctrl-C; 86:Ctrl-V; 88:Ctrl-X
    if (e.ctrlKey && (e.keyCode != 70) && (e.keyCode != 67) && (e.keyCode != 86) && (e.keyCode != 88)) {
      e.returnValue = false;
      e.cancelBubble = true;
      try {
        e.keyCode = 0;
      } catch (e) {
        // do nothing if setting keycode value results in a javascript error
      }
      return true;
    }
    return false;
  }

// capture the mousewheel to prevent scrolling through previous pages
  function captureMouseWheel(){
    var event = window.event || arguments[0];
    if(event.shiftKey){
      if(event.stopPropagation){
        event.preventDefault();
        event.stopPropagation();
      }
      return false;
    }
    return true;
  }
  
  function scaptureMouseWheel(){
    return !(event.shiftKey);
  }