var chTimer;
var chId;
var chTargetHeight;
var chSpeed;
var chOriginalHeights = new Array();

function toggleSlider(obj, closeHeight)
{
	if(closeHeight == null)
	{
		closeHeight = 0;
	}
	
	if(obj.id != '')
	{
		currentHeight = parseInt(obj.style.height);
		
		if(isNaN(currentHeight))
		{
			currentHeight = parseInt(obj.height);
		}

		if(isNaN(currentHeight))
		{
			currentHeight = parseInt(obj.offsetHeight);
		}
		
		if(isNaN(currentHeight))
		{
			alert("Height needs to be set to correctly open and close the element");
			
			return false;
		}
		
		if(obj.getAttribute('closed') != "true")
		{
			changeElementHeight(obj.id, 5, closeHeight);
			chOriginalHeights[obj.id] = currentHeight;

			obj.setAttribute('closed', 'true');
		}
		else
		{
			if(obj.style.display == 'none')
			{
				obj.style.display = 'block';
				chOriginalHeights[obj.id] = obj.offsetHeight;
				obj.style.height = 0;
			}
			
			if(chOriginalHeights[obj.id] == undefined)
			{
				prevHeight = obj.style.height;
				obj.style.height = '';
				chOriginalHeights[obj.id] = obj.offsetHeight;
				obj.style.height = prevHeight;
			}
			
			originalHeight = chOriginalHeights[obj.id];
			
			if(originalHeight == undefined)
			{
				originalHeight = obj.getAttribute('realheight');
			}
			
			changeElementHeight(obj.id, 5, originalHeight);

			obj.setAttribute('closed', 'false');
		}
		
		return true;
	}
	
	alert('You need to set an ID to the element you want to open and close');
	
	return false;
}

function changeElementHeight(id, speed, targetHeight)
{
	chId = id;
	chTargetHeight = parseInt(targetHeight);
	chSpeed = speed;
	
	doChangeElementHeight();
}

function doChangeElementHeight()
{
	chTimer = window.setTimeout("doChangeElementHeight()", chSpeed);
	
	if(chId != undefined)
	{
		obj = document.getElementById(chId);
		
		currentHeight = parseInt(obj.style.height);

		if(isNaN(currentHeight))
		{
			currentHeight = parseInt(obj.height);
		}
		
		if(isNaN(currentHeight))
		{
			currentHeight = parseInt(obj.offsetHeight);
		}
		
		if(isNaN(currentHeight))
		{
			alert("Height needs to be set to correctly open and close the element");
			
			return false;
		}
		
		if(currentHeight > chTargetHeight)
		{
			targetPercent = (currentHeight-chTargetHeight)/currentHeight;

			removePixels = Math.round(10*targetPercent, 0);
			
			if(removePixels < 1)
			{
				removePixels = 1;
			}

			if(currentHeight-removePixels < chTargetHeight)
			{
				obj.style.height = chTargetHeight+"px";
			}
			else
			{
				obj.style.height = (currentHeight-removePixels)+"px";
			}
		}
		else if(currentHeight < chTargetHeight)
		{
			targetPercent = (chTargetHeight-currentHeight)/chTargetHeight;

			addPixels = Math.round(10*targetPercent, 0);
			
			if(addPixels < 1)
			{
				addPixels = 1;
			}
		
			if(currentHeight+addPixels > chTargetHeight)
			{
				obj.style.height = chTargetHeight+"px";
			}
			else
			{
				obj.style.height = (currentHeight+addPixels)+"px";
			}
		}
		else
		{
			window.clearTimeout(chTimer);
		}
		
		return true;
	}
	else
	{
		alert("No id of the element to close or open has been set");
		
		return false;
	}
}
