text: function getAbsoluteTop(el) {
      var top = 0;
      while (el) {
          top += el.offsetTop;
          el = el.offsetParent;
      }
      return top;
  }
  var targetY;
  var timer;
  var targetID;
  var lastY;
  function scrollGracefully(id) {
      if (-1 != id.indexOf("#")) {
          id = id.split("#")[1];
      }
      clearTimeout(timer);
      targetY = -1;
      var anchors = document.anchors;
      for (var i = 0; i < anchors.length; i++) {
          if (anchors[i].name == id) {
              targetY = getAbsoluteTop(anchors[i]);
              break;
          }
      }
      targetID = id;
      if (targetY == -1) {
          // the anchor was not found
          return true;
      } else {
          timer = setTimeout(periodicalScroll, 50);
          return false;
      }
  }
  function periodicalScroll() {
      var currentY = window.scrollTop || document.documentElement.scrollTop || document.body.scrollTop;
      var delta = targetY - currentY;
      if (currentY == lastY) {
          clearTimeout(timer);
          location.hash = targetID;
      } else {
          lastY = currentY;
          scrollBy(0, delta / 3);
          if ((delta > 0 ? delta : -delta) > 3) {
              timer = setTimeout(periodicalScroll, 50);
          } else {
              clearTimeout(timer);
              location.hash = targetID;
              //    scrollTo(0,targetY);
          }
      }
  }
  