var maxframes = 25;
var frametime = 40;

function startfade(el_id) {		
	var el = document.getElementById(el_id);
	if (!el) return false;
	
	if (el.nextfade) {
		el.fading = el.nextfade;
	} else if (!el.style.opacity || el.style.opacity == 1) {
		el.fading = -1;
	} else if (el.style.opacity == 0) {
		el.fading = 1;
	} else if (el.style.filter == 'alpha:(opacity: 0)') {
		el.fading = 1;
	} else {
		el.fading = -1;
	}
	
	setTimeout('fade(\'' + el_id + '\')', frametime);
}

function fade(el_id) {		
	var el = document.getElementById(el_id);
	if (!el) {
		return false;
	}
	
	// Fade in or out completely if we've reached the end of the animation
	if (Math.abs(el.fading) >= maxframes) {
		if (el.fading < 0) {
			el.style.opacity = 0;
			el.style.filter = 'alpha(opacity: 0)';
			el.nextfade = 1;
		} else if (el.fading > 0) {
			el.style.opacity = 1;
			el.style.filter = 'alpha(opacity: 100)';
			el.nextfade = -1;
		}
		el.fading = 0;
		return false;
	}
	
	// Partial frade
	completion = Math.abs(el.fading) / maxframes;
	if (el.fading < 0) completion = 1 - completion;
	el.style.opacity = Math.round(completion * 1000) / 1000;
	el.style.filter = 'alpha(opacity: ' + (Math.round(completion * 1000) / 10) + ')';
	
	if (el.fading < 0) {
		--el.fading;
	} else {
		++el.fading;
	}
	setTimeout('fade(\'' + el_id + '\')', frametime);
}