var id;
var a;
var delay = 2;

function slide(newID) {
	id = newID;
	e = document.getElementById(id + "1");
	if (e == null)  {
		alert(id + " 1 not found!");
		return;
	}
	setCSS(1);
	a = 0;
	fadeIn(1);
}

function setCSS(count) {
	e = document.getElementById(id + count.toString());
	if (e == null)  return;
	with (e.style) {
		position = "absolute";
		filter = 'progid:DXImageTransform.Microsoft.Alpha(Opacity=0)';
		opacity = "0";
	}
	setCSS(count+1);
}

function fadeIn(count) {
	e = document.getElementById(id + count.toString());
	if (e == null) {
		alert("element not found for fade-in!");
		return;
	}
	var speed = 0.1;
	a += (1-a)*speed;
	if (a < 0.95)
	{
		e.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(Opacity=' + a*100 + ')';
		e.style.opacity = a;
		setTimeout("fadeIn("+count+")", 30);
	} else
	{
		e.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';
		e.style.opacity = 1;
		a = 1;
		setTimeout("fadeOut("+count+")", delay*1000);
	}
}

function fadeOut(count) {
	e = document.getElementById(id + count.toString());
	if (e == null) {
		alert("element not found for fade-out!");
		return;
	}
	var speed = 0.8;
	a *= speed;
	if (a > 0.05)	
	{
		e.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(Opacity=' + a*100 + ')';
		e.style.opacity = a;
		setTimeout("fadeOut("+count+")", 30);
	} else
	{
		e.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(Opacity=0)';
		e.style.opacity = 0;
		a = 0;
		count++;
		e = document.getElementById(id + count.toString());
		if (e == null) count = 1;
		fadeIn(count);
	}
}

function show(id) {
	displayContent = document.getElementById(id);
	if (displayContent == null) alert("content id not found");
	if (displayContent == current)
	{
		clearTimeout(grower);
		clearTimeout(shrinker);
		hide(displayContent);
		current = null;
		return;
	}
	if (current != null) hide(current);
	unhide(displayContent)
	current = displayContent;
}

function hide(element) {
	shrinkingElement = element;
	shrink(shrinkingElement);
}

function unhide(element) {
	element.className = "showing";
	element.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(Opacity=0)';
	element.style.opacity = 0;
	growingElement = element;
	grow(growingElement);
}

function expand(id) {
	sublist = document.getElementById(id);
	if (sublist == null || sublistElement != null) return;
	sublistElement = sublist;
	if (sublist.style.display != "block")
	{
		sublist.style.display = "block";
		sublist.style.height = "auto";
		sublist.style.targetHeight = sublist.offsetHeight + 5;
		sublist.style.height = "1px";
		detail(sublistElement);
	}	else undetail(sublistElement);
}

function detail(element) {
	var speed = 0.15;
	var h = Number(element.style.height.substring(0,element.style.height.indexOf("p")));
	var delta = (element.style.targetHeight - h) * speed;
	h += Math.round(delta);
	element.style.height = h + "px";
	if (Math.abs(delta) > 1)
	{
		setTimeout("detail(sublistElement)", 30);
	} else
	{
		element.style.height = element.style.targetHeight;
		sublistElement = null;
	}
}

function undetail(element) {
	var speed = 0.3;
	var h = Number(element.style.height.substring(0,element.style.height.indexOf("p")));
	var delta = h * speed;
	h -= Math.round(delta);
	element.style.height = h + "px";
	if (Math.abs(delta) > 1)
	{
		setTimeout("undetail(sublistElement)", 30);
	} else
	{
		element.style.display = "none";
		sublistElement = null;
	}
}

function grow(element) {
	var speed = 0.1;
	var a = Number(element.style.opacity);
	a += (1-a)*speed;
	if (a < 0.99)
	{
		element.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(Opacity=' + a*100 + ')';
		element.style.opacity = a;
		grower = setTimeout("grow(growingElement)", 30);
	} else
	{
		element.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';
		element.style.opacity = 1;
		grower = null;
		growingElement = null;
	}
}

function shrink(element) {
	var speed = 0.9;
	var a = Number(element.style.opacity);
	a *= speed;
	if (a > 0.01)	
	{
		element.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(Opacity=' + a*100 + ')';
		element.style.opacity = a;
		shrinker = setTimeout("shrink(shrinkingElement)", 30);
	} else
	{
		element.className = "hidden";
		element.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';
		element.style.opacity = 1;
		shrinker = null;
		shrinkingElement = null;
	}
}