window.OpacityInstanceNumber = 0;
window.OpacityInstance = new Array();

function SetOpacity(fObject, fOpacity)
{
	fObject.style.filter = 'alpha(opacity = ' + (fOpacity * 100) + ')';
	fObject.styleMsFilter = '"alpha(opacity = ' + (fOpacity * 100) + ')"'; 
	fObject.style.opacity = fOpacity;
}

function ObjectOpacity(fObject, fStart, fEnd, fAdd, fTime, fMotion)
{
	fObject.OpacityID = window.OpacityInstanceNumber ++;
	fObject.OpacityAction = 0;
	fObject.OpacityCurrent = fStart;
	fObject.OpacityStart = fStart;
	fObject.OpacityEnd = fEnd;
	fObject.OpacityMotion = fMotion;
	fObject.OpacityAdd = fAdd;
	fObject.OpacityTime = fTime * 1000;

	SetOpacity(fObject, fStart);

	window.OpacityInstance[fObject.OpacityID] = fObject;

	fObject.onmouseover = function()
	{
		clearInterval(this.OpacityInterval);
		
		this.OpacityAction = 1;
		this.OpacityInterval = setInterval('OpacityChange(' + this.OpacityID + ');', this.OpacityTime);
	};

	fObject.onmouseout = function()
	{
		clearInterval(this.OpacityInterval);
		
		this.OpacityAction = -1;
		this.OpacityInterval = setInterval('OpacityChange(' + this.OpacityID + ');', this.OpacityTime);
	};
}

function OpacityChange(fInstanceID)
{
	var WorkObject = window.OpacityInstance[fInstanceID];
	var GoalValue = 0;
	
	if (WorkObject.OpacityAction == 1)
	{
		GoalValue = WorkObject.OpacityEnd;
	}
	else
	{
		GoalValue = WorkObject.OpacityStart;
	}

	if ((WorkObject.OpacityStart < WorkObject.OpacityEnd && WorkObject.OpacityAction == 1) || (WorkObject.OpacityStart > WorkObject.OpacityEnd && WorkObject.OpacityAction == -1))
	{
		if (WorkObject.OpacityMotion && WorkObject.OpacityStart > WorkObject.OpacityEnd)
		{
			WorkObject.OpacityCurrent = Math.min(WorkObject.OpacityCurrent + (WorkObject.OpacityAdd / 5), GoalValue);
		}
		else
		{
			WorkObject.OpacityCurrent = Math.min(WorkObject.OpacityCurrent + WorkObject.OpacityAdd, GoalValue);
		}
	}
	else
	{
		if (WorkObject.OpacityMotion && WorkObject.OpacityStart < WorkObject.OpacityEnd)
		{
			WorkObject.OpacityCurrent = Math.max(WorkObject.OpacityCurrent - (WorkObject.OpacityAdd / 5), GoalValue);
		}
		else
		{
			WorkObject.OpacityCurrent = Math.max(WorkObject.OpacityCurrent - WorkObject.OpacityAdd, GoalValue);
		}
	}
	
	SetOpacity(WorkObject, WorkObject.OpacityCurrent);

	if (WorkObject.OpacityCurrent == GoalValue)
	{
		clearInterval(WorkObject.OpacityInterval);
	}
}