function AlphaFade (layer) {
	var _layer = layer;
	var _cOp = layer.style.opacity;
	if (_cOp == null)
		_cOp = 0;
	_cOp *= 100;
	
	var _timer = null;
	
	var _tTime = null;
	var _tOp = null;
	var _transOp = null;
	var _transTime = null;
	
	this.fadeTo = function (targetOp, inTime) {
		_tOp = targetOp;
		_tTime = inTime;
		
		_calcFadeParams();
		
		_initTimer();
	}
	
	function _initTimer () {
		var deltaTime;
		
		if (typeof _transTime == "array") {
			if (_transTime.length > 0)
				deltaTime = _transTime.shift();
		} else
			deltaTime = _transTime;
		
		if (_timer != null) {
			clearTimeout(_timer);
			_timer = null;
		}
		
		_timer = setTimeout(runWithContext(this, _runMethod), deltaTime);
	}
	
	function _runMethod () {
		var deltaTime = null;
		var deltaOp = null;
		
		if (typeof _transTime == "array") {
			if (_transTime.length > 0)
				deltaTime = _transTime.shift();
		} else
			deltaTime = _transTime;
		
		if (typeof _transOp == "array") {
			if (_transOp.length > 0)
				deltaOp = _transOp.shift();
		} else
			deltaOp = _transOp;
		
		_alterOp(deltaOp);
		
		if (_cOp != _tOp && _transTime != null)
			_timer = setTimeout(runWithContext(this, _runMethod), deltaTime);
		else
			clearTimeout(_timer)
	}
	
	function _alterOp (deltaOp) {
		_cOp += deltaOp;
		
		if (deltaOp > 0 && _cOp > _tOp)
			_cOp = _tOp;
		else if (deltaOp < 0 && _cOp < _tOp)
			_cOp = _tOp;
		
		rCOp = Math.round(_cOp);
		
		_layer.style.opacity = rCOp / 100;
		_layer.style.MozOpacity = rCOp / 100;
		_layer.style.filter = 'alpha(opacity=' + rCOp + ')';
	}
	
	function _calcFadeParams () {
		var deltaOp = _tOp - _cOp;
		
		_transOp = 100 * deltaOp / _tTime;
		_transTime = 100;
	}
}