/** Common JavaScript resource.
 * 
 */

// menu animation variables
var taskSlotAvailable = true;
var taskItem = null;
var taskParameter;

/** Initialisierungen der Webseite.
 * 
 * @return void
 */
function init()
{
	// restore previous menu state..
	segments = correctedSplit(";", document.cookie);

	for(i = 0; i < segments.length; i++)
	{
		segments[i] = segments[i].replace(' ', ''); 		// trim
		
		itemName = correctedSplit("=", segments[i])[0];

		if(itemName != "PHPSESSID")
		{
			if(document.getElementById(itemName) != null)
			{
				if(correctedSplit("=", segments[i])[1] == 0)
				{
					document.getElementById(itemName).style.display = "none";
				}
			}
		}
	}
	
	stretchLayout();

//	cookieCheck();

}

/** Schaltet zwischen aufgeklappt und eingeklappt hin und her
 * 
 * @param menuElement zu bearbeitendes Menüelement
 * @return void
 */
function toggleMenu(menuElement)
{
	if(taskSlotAvailable)
	{	
		setTaskSlot(menuElement);

		if(taskItem.offsetHeight <= 0)
		{
			taskItem.style.height = "0px";
			taskItem.style.display = "block";

			childs = taskItem.getElementsByTagName("div");
			targetHeight = 0;
			for(i = 0; i < childs.length; i++)
				targetHeight += childs[i].offsetHeight;
			taskParameter = targetHeight;

			expandMenu();
			document.cookie = menuElement + "=1;";
		}
		else
		{
			collapseMenu();
			document.cookie = menuElement + "=0;";
		}
	}
}

/** Versteckt Menü
 * 
 * @return void
 */
function collapseMenu()
{
	taskItem.style.display = "none";
	stretchLayout();
}

/** Klappt das Menü auf
 * 
 * @return void
 */
function expandMenu()
{
	
	if(taskItem.offsetHeight + 5 >= taskParameter)
	{
		taskItem.style.height = taskParameter + "px";

		taskItem = null;
		taskSlotAvailable = true;
		stretchLayout();
	}
	else
	{
		taskItem.style.height = (taskItem.offsetHeight + 5) + "px";
		stretchLayout();
		window.setTimeout("expandMenu()", 40);
	}
}

/** Belegt den Aufgabenslot für Animationen
 * 
 * @param slotElementName Knotenelement
 * @return void
 */
function setTaskSlot(slotElementName)
{
	if(taskSlotAvailable)
	{
		taskItem = document.getElementById(slotElementName);
	}
}


// various checks

function cookieCheck()
{
/*
	set_cookie('cookietest', 'none', '', '/', '', '');
	if (get_cookie('cookietest'))
	{
		Delete_Cookie('cookietest', '/', '');
	}
	else
	{
		document.getElementById("output").innerHTML = "<b>Cookies are not enabled</b>";
		document.getElementById("output").style.visibility = "visible";
		cookie_set = false;
	}
*/
}

// workarounds for inconsistent javascript methods

/** Die Implementationen der Methode split() unterscheiden sich im Internet Explorer und im Firefox.
 * 
 *  Die Rückgabewerte der Methode des Internet Explorers entsprechen NICHT der vorgabe des W3C.
 *  Um einheitliche Rückgabewerte zu bekommen wurde die Methode neu geschrieben.
 * 
 *  @return String Array, das alle Werte enthält die vom vorgegebenen Separator getrennt wurden
 */
function correctedSplit(delimiter, str)		// ie has wrong implementation of the method split()
{
	if(str == null || str.replace(' ', '') == "") return new Array();


	result = new Array();

	span = 0;	
	while(str.indexOf(delimiter) != -1)
	{
		span = str.indexOf(delimiter);	
		result.push(str.substring(0, span));
		str = str.substring(span+1, str.length);
	}
	result.push(str);

//	for(i=0;i<result.length;i++) alert(result[i]);

	return result;
}

/** Entfernt alle Kinder eines Knotens.
 * 
 * @param element Aus DOM zu entfernender Knoten
 * @return void
 */
function removeChildren(element)
{
	if(document.getElementById(element).hasChildNodes() )
	{
		while (document.getElementById(element).childNodes.length >= 1 )
		{
			document.getElementById(element).removeChild(document.getElementById(element).firstChild);
		}
	}
}


// event handlers
window.onload = init;
window.resize = stretchLayout;
