var stepDelta = 5;

function startFadeIn(inElementId)
{
	var inElement = document.getElementById(inElementId);
	if (!def(inElement.currentOpacity)) {
		inElement.currentOpacity = 100;
	}
	if (inElement.timer) {
		clearTimeout(inElement.timer);
	}
	fadeIn(inElement);
}

function startFadeOut(outElementId)
{
	var outElement = document.getElementById(outElementId);
	if (!def(outElement.currentOpacity)) {
		outElement.currentOpacity = 100;
	}
	if (outElement.timer) {
		clearTimeout(outElement.timer);
	}
	fadeOut(outElement);
}

function fadeIn(fadeInElement)
{
	var done = true;
	var currentOpacity = fadeInElement.currentOpacity;
	if (currentOpacity < 100) {
		var newOpacity = currentOpacity + stepDelta;
		fadeInElement.currentOpacity = newOpacity;
		setOpacity(fadeInElement, newOpacity / 100);
		fadeInElement.timer = setTimeout(
			function() { fadeIn(fadeInElement); },
			50
		);
	} else {
		fadeInElement.timer = null;
	}
}
function fadeOut(fadeOutElement)
{
	var done = true;
	var currentOpacity = fadeOutElement.currentOpacity;
	if (currentOpacity > 0) {
		var newOpacity = currentOpacity - stepDelta;
		fadeOutElement.currentOpacity = newOpacity;
		setOpacity(fadeOutElement, newOpacity / 100);
		fadeOutElement.timer = setTimeout(
			function() { fadeOut(fadeOutElement); },
			50
		);
	} else {
		fadeOutElement.timer = null;
	}
}
// opacity in [0..1]
function setOpacity(element, opacity)
{
	if (opacity > 0.99) {
		opacity = 0.99;
	}

	if (opacity < 0) {
		opacity = 0;
	}

	if (def(element.style.opacity)) {
		element.style.opacity = opacity;
	} else if (def(element.style.Opacity)) {
		element.style.Opacity = opacity;
	} else if (def(element.style.MozOpacity)) {
		element.style.MozOpacity = opacity;
	} else if (document.all) {
		element.runtimeStyle.filter = 'alpha(opacity='+(opacity*100)+')';
	}
}
function def(e)
{
	return (typeof e != 'undefined');
}
