function setOpacity(objId, objOpacity)
{
    var obj = document.getElementById(objId);
    var opacityProperty = getOpacityProperty();
    if (!obj || !opacityProperty)
    {
        return;
    }
    if (opacityProperty == "filter")
    {
        objOpacity *= 100;
        var objAlpha = obj.filters['DXImageTransform.Microsoft.alpha'] || obj.filters.alpha;
        if (objAlpha)
        {
            objAlpha.opacity = objOpacity;
        }
        else
        {
            obj.style.filter += 'progid:DXImageTransform.Microsoft.Alpha(opacity=' + objOpacity + ')';
        }
    }
    else
    {
        obj.style[opacityProperty] = objOpacity;
    }
}
function getOpacityProperty()
{
    if (typeof document.body.style.opacity == 'string')
    {
        return 'opacity';
    }
    else if (typeof document.body.style.MozOpacity == 'string')
    {
        return 'MozOpacity';
    }
    else if (typeof document.body.style.KhtmlOpacity == 'string')
    {
        return 'KhtmlOpacity';
    }
    else if (document.body.filters && navigator.appVersion.match(/MSIE ([\d.]+);/)[1]>=5.5)
    {
        return 'filter';
    }
    return false;
}
function fadeObject(objId, fadeRuleName, isBack)
{
	var obj = document.getElementById(objId);
	if (!obj || !getOpacityProperty() || !fadeObject.fadeRules[fadeRuleName])
	{
	   return;
	}
	var fadeRule = fadeObject.fadeRules[fadeRuleName];
	var objOpacity = fadeRule.startOpacity;

	if (fadeObject.fadeProc[objId])
	{
	    clearInterval(fadeObject.fadeProc[objId].tId);
	    objOpacity = fadeObject.fadeProc[objId].objOpacity;
	}
	if ((objOpacity == fadeRule.startOpacity && isBack) || (objOpacity == fadeRule.finishOpacity && !isBack))
	{
	   return;
	}
	fadeObject.fadeProc[objId] = {
	   'objOpacity':objOpacity,
	   'tId':setInterval('fadeObject.run("' + objId + '")',
	   fadeObject.fadeRules[fadeRuleName].fadeDalay),
	   'fadeRuleName':fadeRuleName,
	   'isBack':Boolean(isBack)
	};
}
fadeObject.addFadeRule = function(fadeRuleName, startOpacity, finishOpacity, fadeDalay)
{
    fadeObject.fadeRules[fadeRuleName] = {
        'startOpacity':startOpacity,
        'finishOpacity':finishOpacity,
        'fadeDalay':(fadeDalay || 30),
        'nDSign':(finishOpacity - startOpacity > 0 ? 1 : -1)
    };
};
fadeObject.back = function(objId)
{
    fadeObject(objId, fadeObject.fadeProc[objId].fadeRuleName, true);
};
fadeObject.run = function(objId)
{
	var proc = fadeObject.fadeProc[objId];
	var fadeRule = fadeObject.fadeRules[proc.fadeRuleName];

	proc.objOpacity = Math.round((proc.objOpacity + 0.1 * fadeRule.nDSign * (proc.isBack ? -1 : 1)) * 10) / 10;
	setOpacity(objId, proc.objOpacity);

	if (proc.objOpacity == fadeRule.startOpacity || proc.objOpacity == fadeRule.finishOpacity)
	{
	   clearInterval(fadeObject.fadeProc[objId].tId);
	}
}
fadeObject.fadeProc = {};
fadeObject.fadeRules = {};
