docs: function(e){
          
          // make sure we have a map and check keyboard modifiers
          if (!this.map || !this.checkModifiers(e)) {
              return;
          }
          
          // Ride up the element's DOM hierarchy to determine if it or any of 
          //  its ancestors was: 
          //   * specifically marked as scrollable (CSS overflow property)
          //   * one of our layer divs or a div marked as scrollable
          //     ('olScrollable' CSS class)
          //   * the map div
          //
          var overScrollableDiv = false;
          var allowScroll = false;
          var overMapDiv = false;
          
          var elem = OpenLayers.Event.element(e);
          while((elem != null) && !overMapDiv && !overScrollableDiv) {
  
              if (!overScrollableDiv) {
                  try {
                      var overflow;
                      if (elem.currentStyle) {
                          overflow = elem.currentStyle["overflow"];
                      } else {
                          var style = 
                              document.defaultView.getComputedStyle(elem, null);
                          overflow = style.getPropertyValue("overflow");
                      }
                      overScrollableDiv = ( overflow && 
                          (overflow == "auto") || (overflow == "scroll") );
                  } catch(err) {
                      //sometimes when scrolling in a popup, this causes 
                      // obscure browser error
                  }
              }
  
              if (!allowScroll) {
                  allowScroll = OpenLayers.Element.hasClass(elem, 'olScrollable');
                  if (!allowScroll) {
                      for (var i = 0, len = this.map.layers.length; i < len; i++) {
                          // Are we in the layer div? Note that we have two cases
                          // here: one is to catch EventPane layers, which have a
                          // pane above the layer (layer.pane)
                          var layer = this.map.layers[i];
                          if (elem == layer.div || elem == layer.pane) {
                              allowScroll = true;
                              break;
                          }
                      }
                  }
              }
              overMapDiv = (elem == this.map.div);
  
              elem = elem.parentNode;
          }
          
          // Logic below is the following:
          //
          // If we are over a scrollable div or not over the map div:
          //  * do nothing (let the browser handle scrolling)
          //
          //    otherwise 
          // 
          //    If we are over the layer div or a 'olScrollable' div:
          //     * zoom/in out
          //     then
          //     * kill event (so as not to also scroll the page after zooming)
          //
          //       otherwise
          //
          //       Kill the event (dont scroll the page if we wheel over the 
          //        layerswitcher or the pan/zoom control)
          //
          if (!overScrollableDiv && overMapDiv) {
              if (allowScroll) {
                  var delta = 0;
                  
                  if (e.wheelDelta) {
                      delta = e.wheelDelta;
                      if (delta % 160 === 0) {
                          // opera have steps of 160 instead of 120
                          delta = delta * 0.75;
                      }
                      delta = delta / 120;
                  } else if (e.detail) {
                      // detail in Firefox on OS X is 1/3 of Windows
                      // so force delta 1 / -1
                      delta = - (e.detail / Math.abs(e.detail));
                  }
                  this.delta += delta;
  
                  window.clearTimeout(this._timeoutId);
                  if(this.interval && Math.abs(this.delta) < this.maxDelta) {
                      // store e because window.event might change during delay
                      var evt = OpenLayers.Util.extend({}, e);
                      this._timeoutId = window.setTimeout(
                          OpenLayers.Function.bind(function(){
                              this.wheelZoom(evt);
                          }, this),
                          this.interval
                      );
                  } else {
                      this.wheelZoom(e);
                  }
              }
              OpenLayers.Event.stop(e);
          }
      }