﻿/**
 * SWFMacMouseWheel v1.0: Mac Mouse Wheel functionality in flash - http://blog.pixelbreaker.com/
 *
 * SWFMacMouseWheel is (c) 2006 Gabriel Bucknall and is released under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 */
function SWFMacMouseWheel( swf )
{
    this.swf = swf;
    var isMac = navigator.appVersion.toLowerCase().indexOf("mac") != -1 || navigator.appVersion.toLowerCase().indexOf("safari") != -1;
    //Cuke. We added Safari on which scroll is disabled too.
    var isSafari = /Safari/.test(navigator.userAgent);
    if (isMac || isSafari) this.init();
}

SWFMacMouseWheel.prototype = {
    init: function()
    {
        SWFMacMouseWheel.instance = this;
        if (window.addEventListener)
        {
            window.addEventListener('DOMMouseScroll', SWFMacMouseWheel.instance.wheel, false);
        }
        window.onmousewheel = document.onmousewheel = SWFMacMouseWheel.instance.wheel;
    },

    handle: function(delta)
    {
        this.swf.externalMouseEvent(delta);
    },
    wheel: function(event)
    {
        var delta = 0;
        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 (/Safari/.test(navigator.userAgent))
        {
            //Cuke. We match here Safari on other OS than Mac, delta is fine.
        }
        else if (/AppleWebKit/.test(navigator.userAgent))
        {
            delta /= 3;
        }
        /** If delta is nonzero, handle it.
         * Basically, delta is now positive if wheel was scrolled up,
         * and negative, if wheel was scrolled down.
         */
        if (delta)
            SWFMacMouseWheel.instance.handle(delta);
        /** Prevent default actions caused by mouse wheel.
         * That might be ugly, but we handle scrolls somehow
         * anyway, so don't bother here..
         */
        if (event.preventDefault) event.preventDefault();
        event.returnValue = false;
    }
};