
var g_clExtending;
var g_clRetracting;
var g_iStartTime;
var g_iTransitionTime = 700; /* 0.6 Seconds */
var g_clAccordion;
var g_iTimeEquationBased = true;
var g_iNonEquationBasedStep = 5;
var g_bReady = false;
var g_bRecollapsable = false;
var g_bSelectFirst = true;

function accordion_transition()
{
	var clDate = new Date();
	var iTime = clDate.getTime();
	var iDiff = iTime - g_iStartTime;
	var bExtended = false;
	var bRetracted = false;
	var bDone = false;
	var iExtendHeight;
	var iRetractHeight;
	var iScale;
	
	if (iDiff > g_iTransitionTime)
		iDiff = g_iTransitionTime;
	
	iScale = (iDiff / g_iTransitionTime);
	iScale = Math.sin(iScale * (Math.PI  / 2));
	
	if (g_clExtending)
	{
		if (!g_iTimeEquationBased)
		{
			iExtendHeight = parseInt(g_clExtending._clHolder.style.height);
			
			iExtendHeight += g_iNonEquationBasedStep;
			
			if (iExtendHeight >= g_clExtending._clContent.offsetHeight)
			{
				iExtendHeight = g_clExtending._clContent.offsetHeight;
				bExtended = true;
			}
			
			if (!g_clRetracting && bExtended)
				bDone = true;
		}
		else
		{
			//iScale = (iDiff / g_iTransitionTime);
			//iScale = Math.sin(iScale * (Math.PI  / 2));
			
			iExtendHeight = iScale * parseInt(g_clExtending._clContent.offsetHeight);
		}
		
		if (iExtendHeight > 0)
			g_clExtending._clHolder.style.height = iExtendHeight.toString() + "px";
		else
			g_clExtending._clHolder.style.height = "1px";
	}
	else
		bExtended = true;

	if (g_clRetracting)
	{
		if (!g_iTimeEquationBased)
		{
			iRetractHeight = parseInt(g_clRetracting._clHolder.style.height);
			iRetractHeight -= g_iNonEquationBasedStep;
			
			if (iRetractHeight <= 0)
			{
				iRetractHeight = 0;
				bRetracted = true;
			}
		}
		else
		{
			//iScale = (1.0 - (iDiff / g_iTransitionTime));
			//iScale = Math.sin(iScale * (Math.PI  / 2));

			iRetractHeight = Math.round((1.0 - iScale) * parseInt(g_clRetracting._clContent.offsetHeight));
		}
		
		if (iRetractHeight > 0)
			g_clRetracting._clHolder.style.height = iRetractHeight.toString() + "px";
		else
			g_clRetracting._clHolder.style.height = "1px";
			
		if (bExtended && bRetracted)
			bDone = true;
	}


	if (!g_iTimeEquationBased)
	{
		if (bDone)
			accordion_endtransition(g_clAccordion, g_clExtending);
		else
			setTimeout("accordion_transition()", 1);
	}
	else if (iDiff == g_iTransitionTime)
		accordion_endtransition(g_clAccordion, g_clExtending);
	else
		setTimeout("accordion_transition()", 1);
}

function accordion_endtransition(clAccordion, clClickedEntry)
{
	if (clAccordion._clSelected)
		clAccordion._clSelected._clHolder.style.height = "1px";
	
	clAccordion._clSelected = clClickedEntry;
	
	g_bReady = true;
}

function accordion_slideout(sAccordionId, sEntryId)
{
	if (!g_bReady)
		return;
	
	var clAccordion = document.getElementById(sAccordionId);
	var clClickedEntry = document.getElementById(sEntryId);

	g_clAccordion = clAccordion;
	
	if (!g_bRecollapsable && clClickedEntry == clAccordion._clSelected)
		return;
	else if (g_bRecollapsable && clClickedEntry == clAccordion._clSelected)
	{
		g_clExtending = null;
		g_clRetracting = clClickedEntry;
	}
	else
	{
		g_clExtending = clClickedEntry;
		g_clRetracting = clAccordion._clSelected;
	}
		
	g_bReady = false;
	
	clClickedEntry._clHolder.style.height = "1px";
	
	g_iStartTime = (new Date()).getTime();
	accordion_transition();
}

function init()
{
	var clAccordion;		
	var i;
	var nAccordions = 0;

	while (1)
	{
		nAccordions++;
		sAccordionId = "accordion" + nAccordions.toString();
		clAccordion = document.getElementById(sAccordionId);

		if (!clAccordion)
			break;

		i = 0;

		sNewHTML = clAccordion.innerHTML;
		sNewHTML = sNewHTML.replace(/\r/g, "");
		sNewHTML = sNewHTML.replace(/\n/g, "");
		sNewHTML = sNewHTML.replace(/\t/g, "");

		clAccordion.innerHTML = sNewHTML;
		clAccordion._clSelected = null;
		
		for (var clEntry = clAccordion.firstChild; clEntry != null; clEntry = clEntry.nextSibling)
		{
			
			
			i++;

			var clLink = clEntry.firstChild;

			clHolder = document.createElement("div");
			clHolder.className = "accordion_content_scroll";
			
			clEntry.appendChild(clHolder);
			clEntry.className = "accordion_entry";

			clEntry._clContent = clLink.nextSibling;
			
			if (!clEntry._clContent.innerHTML)
				clEntry._clContent = clEntry._clContent.nextSibling;

			clEntry._clContent.className = "accordion_content";

			sNewHTML = clEntry._clContent.innerHTML;
			sNewHTML = sNewHTML.replace(/\r/g, "");
			sNewHTML = sNewHTML.replace(/\n/g, "");
			sNewHTML = sNewHTML.replace(/\t/g, "");

			var clIEFix = document.createElement("div");
			clIEFix.innerHTML = sNewHTML;
			
			if (g_bSelectFirst && i == 1)
			{
				clAccordion._clSelected = clEntry;
				clHolder.style.height =  parseInt(clEntry._clContent.offsetHeight).toString() + "px";
			}
			else
				clHolder.style.height = "1px";
			
			clHolder.appendChild(clIEFix);
			
			clEntry._clHolder = clHolder;

			clLink.className = "accordion_link";
			clLink.href = "javascript:void(0)";
			clLink.onmouseover = new Function("accordion_slideout('" + sAccordionId + "', '" + clEntry.id + "');");
		
		}
	}
	
	g_bReady = true;
}
