﻿
///Require : BrowserVersion.js

var OpacityHelper = function()
{

}

OpacityHelper.getOpacity = function(element)
{
    if(BrowserVersion.BROWSER_TYPE_FIREFOX)
        return element.style.opacity * 100;
    else if(BrowserVersion.BROWSER_TYPE_IEXPLORER)
        { 
            var alphaIndex =element.style.filter.indexOf("alpha");
            if(alphaIndex<0){return 100;}
            var alphaStr = element.style.filter.substring(
                alphaIndex+5);
            var opacityIndex = alphaStr.indexOf("opacity");
            if(opacityIndex<0)return 100;
            var opacityStr = alphaStr.substring(opacityIndex+7);
            var equalIndex = opacityStr.indexOf("=");
            if(equalIndex<0)return 100;
            equalIndex++;
            var num = "";
            var nextChar = 0;
            var numChar = "";
            do
            {
                if(equalIndex>5)
                {
                    //alert("opacity parsing error : "+num);
                    return 100;
                }
                numChar = opacityStr.substring(equalIndex,equalIndex+1);
                num+= numChar;
                nextChar = parseInt(opacityStr.substring(++equalIndex,equalIndex+1));
            }
            while(nextChar>=0 && nextChar<=9);
            return parseInt(num);
        }
        //element.style.filter = "alpha(opacity="+opacity+")";
    else if(BrowserVersion.BROWSER_TYPE_SAFARI ||
        BrowserVersion.BROWSER_TYPE_CHROME)
        return element.style.khtmlOpacity;
}

OpacityHelper.setOpacity = function(element,opacity)
{
    if(BrowserVersion.BROWSER_TYPE_FIREFOX)
        element.style.opacity = opacity * 0.01;
    else if(BrowserVersion.BROWSER_TYPE_IEXPLORER)
        element.style.filter = "alpha(opacity="+opacity+")";
    else if(BrowserVersion.BROWSER_TYPE_SAFARI || 
        BrowserVersion.BROWSER_TYPE_CHROME)
        element.style.khtmlOpacity=opacity;
}

OpacityHelper.lastTimer = null;

OpacityHelper.gotoOpacity = function(element,opacity,speed,endCallback)
{
    ///<summary>Animate the opacity, on a 16ms 
    /// (60frame/sec) speed basis</summary>
    var currentOpacity = OpacityHelper.getOpacity(element);
    if(OpacityHelper.lastTimer!=null)clearInterval(OpacityHelper.lastTimer);
    var timer = OpacityHelper.lastTimer = setInterval(function()
    {
        currentOpacity = OpacityHelper.getOpacity(element);
        var spd = speed;
        if(opacity<currentOpacity)
        {
            if((currentOpacity-opacity)<speed)
                spd = currentOpacity-opacity;
            OpacityHelper.setOpacity(element,currentOpacity-spd);
        }
        else if(opacity>currentOpacity)
        {
            if((opacity-currentOpacity)<speed)
                spd = opacity-currentOpacity;
            OpacityHelper.setOpacity(element,currentOpacity+spd);
        }
        else if(opacity==currentOpacity)
        {
            clearInterval(timer);
            if(endCallback!=null)endCallback();
        }
    },16);
}