/*______________________________________

  managiAssets #090319
  
  Copyright (C) 2009 Mahiro Komura All rights reserved.
  Script written by Mahiro Komura <mahirok@mizuyari.jp>
  http://mahirokomura.jp/
______________________________________*/

var mizMouseScrollTimer;

function mizMouseScrollInit() { // mizMouseScrollInit #090312
    if (mizuyari.ua.isWinIE) {
        mizuyari.addEvent(document, "mousewheel", wheel);
    } else if (mizuyari.ua.isSafari) {
        mizuyari.addEvent(window, "mousewheel", wheel);
    } else {
        mizuyari.addEvent(window, "DOMMouseScroll", wheel);    
    }
}

function mizMouseScroll(posTo) { // mizMouseScroll #090319
    var frms = 4;
    if (mizMouseScrollTimer) clearTimeout(mizMouseScrollTimer);
    var posBy = Math.floor((posTo - getPageYOffset()) / frms);
    if (Math.abs(posBy) > 0) {
        window.scrollBy(0,posBy);
        mizMouseScrollTimer = setTimeout("mizMouseScroll("+posTo+")",16);
    }
}

function mizMouseScrollApp(adj) { // mizMouseScrollApp #090319
    var posTo = getPageYOffset() + Math.floor(getWindowInnerHeight()/3) * adj;
    if (posTo < 0) {
        posTo = 0;
    } else if (posTo >= getWindowScrollMaxY()) {
        posTo = getWindowScrollMaxY();
    }
    mizMouseScroll(posTo);
}

function handle(delta) { // handle #090311
    if (delta < 0) {
        // trace("down:" + delta);
        mizMouseScrollApp(1);
   } else {
        // trace("up:" + delta);
        mizMouseScrollApp(-1);
   }
}

function wheel(event){ // wheel #090311
   var delta = 0;
   if (!event) /* For IE. */
       event = window.event;
   if (event.wheelDelta) { /* IE/Opera. */
       delta = event.wheelDelta/120;
       if (window.opera) delta = -delta;
   } else if (event.detail) { /** Mozilla case. */
       delta = -event.detail/3;
   }
   if (delta) handle(delta);
   if (event.preventDefault) {
       event.preventDefault();
   }
   event.returnValue = false;
}

mizuyari.addOnLoadEvent(mizMouseScrollInit);