function smoothScroll(pTarget, pDirection, pHeight, pTime, pSpeed, pGoBack) {
  var oHeight = pHeight || 32;
  var oSpeed = pSpeed || 10;
  var oTime = pTime || 250;
  var oDirection = pDirection || 1;
  var oGoBack = pGoBack || false;

  if(window.currentInterval) {
    if(oGoBack) {
      $(window.lastTargetForScroll).scrollTop = window.startPos + (oDirection >= 0 ? -oHeight : oHeight);
    } else {
      $(window.lastTargetForScroll).scrollTop = window.curPos + (oDirection >= 0 ? oHeight : -oHeight);
    }
    window.clearInterval(window.currentInterval);
  }
  
  window.lastTargetForScroll = pTarget;

  window.counter = 0;
  window.curPos = $(pTarget).scrollTop;
  window.startPos = $(pTarget).scrollTop;
  window.currentInterval = window.setInterval("doSmoothScroll(" + oHeight + ", '" + pTarget + "', " + oTime + ", " + oSpeed + ", " + oDirection + ")", oSpeed);
}

function doSmoothScroll(pHeight, pTarget, pTime, pSpeed, pDirection) {
  var oTarget = $(pTarget);

  window.counter++;

  if(pDirection >= 0) {
    oTarget.scrollTop = window.curPos + Math.sqrt(window.counter) * pHeight / Math.sqrt(pTime / pSpeed);
  } else {
    oTarget.scrollTop = window.curPos - Math.sqrt(window.counter) * pHeight / Math.sqrt(pTime / pSpeed);
  }

  if(window.counter >= pTime / pSpeed)  {
    window.clearInterval(window.currentInterval);
    window.currentInterval = null;
  }
}