var row = 0;
var direction = 1;

/*
* Sortiert eine Tabelle nach der Methode
*/
function sortTable(idTable, rowNumber, method)
{
	// Sortierreihenfolge wird umgekehrt
	direction = direction * (-1);
	rowNumber = 3;
	row = rowNumber;
	
	// Tabelle wird bestimmt
	var table = document.getElementById(idTable);
	
	
	// Rows werden ausgelesen und sortiert
	rows = new Array();
	str = "<tr>" + table.firstChild.childNodes[0].innerHTML +"</tr>";
	for (i = 1; i < table.firstChild.childNodes.length; i++)
	{
		if (table.firstChild.childNodes[i].nodeName.toLowerCase() == "tr")
		{
			rows.push(table.firstChild.childNodes[i]);
		}
	}
	eval ('rows = rows.sort('+method+');');
	
	// Ergebnis wird zurückgeschrieben
	for (i = 0; i < rows.length; i++)
	{
		str += "<tr style='display:"+rows[i].style.display+";'>" + rows[i].innerHTML +"</tr>";
	}
	
	if (table.outerHTML && table.outerHTML != "")
	{
		// IE
		table.outerHTML = "<table><tbody>"+str+"</tbody></table>";
	}
	else
	{
		table.firstChild.innerHTML = str;
	}
	
	
}

/*
* Zeigt die Filteroptionen für eine Tabelle an
*/
function displayFilterOptionsTable(event, idTable, rowNumber, method)
{
	//Array mit Filteroptionen wird geladen
	var options =getFilterOptions(idTable, rowNumber, method);
	
	var filter = document.getElementById("filter");
	// Optionen werden hinzugefügt
	
	var content = document.getElementById("filterContent");
	content.innerHTML = "";
	for (i = 0; i < options.length; i++)
	{
		//content.innerHTML += "<input type='checkbox' onclick='filterTable(\""+idTable+"\","+rowNumber+",\""+method+"\");' name='filterOption' value='"+options[i]+"'/> " + options[i] +"<br/>";
		var inputNode = document.createElement("input");
	
		var typeAttr = document.createAttribute("type");
		typeAttr.nodeValue = "checkbox";
		inputNode.setAttributeNode(typeAttr);
		
		var onclickAttr = document.createAttribute("onclick");
		onclickAttr.nodeValue = "filterTable('"+idTable+"',"+rowNumber+",'"+method+"');";
		
		//onclickAttr.nodeValue = "filterTable('0');";
		inputNode.setAttributeNode(onclickAttr);
		
		var nameAttr = document.createAttribute("name");
		nameAttr.nodeValue = "filterOption";
		inputNode.setAttributeNode(nameAttr);
		
		var valueAttr = document.createAttribute("value");
		valueAttr.nodeValue = options[i];
		inputNode.setAttributeNode(valueAttr);
		
		content.appendChild(inputNode);
		
		content.appendChild(document.createTextNode(options[i]));
		content.appendChild(document.createElement("br"));
		
	
		//content.innerHTML += "<input type='checkbox' onclick='alert(\"test\");' name='filterOption' value='"+options[i]+"'/> " + options[i] +"<br/>";
	}
	
	content.innerHTML += "<div><a href='#' onclick='unFilterTable(\""+idTable+"\");'>Alle Filter l&ouml;schen</a></div>";
	
	// filter wird angezeigt
	filter.style.display = "block";
	
	positionElement(event, filter, rowNumber-2);
}

/*
* Filtern einer Tabelle 
*/
function filterTable(idTable, rowNumber, method)
{
	var table = document.getElementById(idTable);
	
	var options = new Array();
	//options werden ermittelt
	for (i = 0; i < document.filter.elements.length; i++)
	{
		if (document.filter.elements[i].checked)
		{
			options.push(document.filter.elements[i].value);
		}
	}
	if (options.length == 0)
	{
		unFilterTable(idTable);
	}
	else
	{
	
		for (var i = 3; i < table.firstChild.childNodes.length; i++)
		{
			if (table.firstChild.childNodes[i].nodeName.toLowerCase() == "tr" && table.firstChild.childNodes.length >= 5)
			{
				// Es wird überprüft ob die tr auf die Filterbedingungen zutrifft
				table.firstChild.childNodes[i].style.display = "none";
				try
				{
					var value = eval ('filter'+method+'(table.firstChild.childNodes[i].childNodes[rowNumber])');
					if (inArray(options, value))
					{
						try
						{
							table.firstChild.childNodes[i].style.display = "table-row";
						}
						catch(e)
						{
							table.firstChild.childNodes[i].style.display = "block";
						}
					}
				}
				catch(e)
				{
				}
			}
		}
	}
	
}

/*
* Filtern einer Tabelle aufheben
*/
function unFilterTable(idTable)
{
	var table = document.getElementById(idTable);
	
	for (i = 0; i < document.filter.elements.length; i++)
	{
		document.filter.elements[i].checked = false;
	}
	
	for (var i = 3; i < table.firstChild.childNodes.length; i++)
	{
		if (table.firstChild.childNodes[i].nodeName.toLowerCase() == "tr" && table.firstChild.childNodes.length >= 5)
		{
			try
			{
				table.firstChild.childNodes[i].style.display = "table-row";
			}
			catch(e)
			{
				table.firstChild.childNodes[i].style.display = "block";
			}
		}
	}
	
}

/*
* Erstellt einen Array mit Filteroptionen. 
*/
function getFilterOptions(idTable, rowNumber, method)
{
	var table = document.getElementById(idTable);
	var options = new Array();
	
	for (i = 3; i < table.firstChild.childNodes.length; i++)
	{
		if (table.firstChild.childNodes[i].nodeName.toLowerCase() == "tr")
		{
			try
			{
				var value = eval ('filter'+method+'(table.firstChild.childNodes[i].childNodes[rowNumber])');
				if (!inArray(options, value))
				{
					options.push(value);
				}
			}
			catch(e)
			{
			}
		}
	}
	
	return options;
}
/*
* Es werden von den Images die Title-Attributs ausgelesen
*/
function filterImg(node)
{
	return node.firstChild.title;
}


function filterName(node)
{
	return node.innerHTML;
}

function filterRealm(node)
{
	return node.innerHTML.match(/\[(\<\w+\>)?\w*\.?(<\/\w+\>)?\]/)[0].replace(/(\<\w+\>)|(<\/\w+\>)/g,"");
}



function inArray(array, element)
{
	for (var i = 0; i < array.length; i++)
	{
		if (array[i] == element)
		{
			return true;
		}
	}
	return false;
}

/*
* Sortierfunktionen für eine Tabelle
*/
this.sortByName = function(a, b)
{
	if (a.childNodes[row].innerHTML >= b.childNodes[row].innerHTML)
	{
		return 1 * direction;
	}
	return -1 * direction;
}

this.sortByDate = function(a, b)
{
	if (Date.parse(a.childNodes[row].innerHTML) >= Date.parse(b.childNodes[row].innerHTML))
	{
		return 1 * direction;
	}
	return -1 * direction;
}

function positionElement(event, div, direction)
{
	var y;
	if (self.pageYOffset) // all except Explorer
	{
		y = self.pageYOffset;
	}
	else if (document.documentElement && document.documentElement.scrollTop)
	// Explorer 6 Strict
	{
		y = document.documentElement.scrollTop;
	}
	else if (document.body) // all other Explorers
	{
		y = document.body.scrollTop;
	}

	if (event.pageX)

	{
		var pageX = event.pageX;
		var pageY = event.pageY;
	}
	else
	{
		var pageX = event.clientX;
		var pageY = event.clientY + y;
	}
	
	div.style.right = "";
	if (direction > 0)
	{
		div.style.left = (pageX - 10)+ "px";
	}
	else
	{
		div.style.left = "";
		
		var innerWidth, offSetY, pageX, pageY;

		/**
		* Die X/Y-Position "pageX, pageY" des Events wird bestimmt
		* Fuer den IE muss dazu der Scroll-Offset "offSetY"  bestimmt werden 
		*/
		if (self.pageYOffset) // all except Explorer
		{
			offSetY = self.pageYOffset;
		}
		else if (document.documentElement && document.documentElement.scrollTop)
		// Explorer 6 Strict
		{
			offSetY = document.documentElement.scrollTop;
		}
		else if (document.body) // all other Explorers
		{
			offSetY = document.body.scrollTop;
		}
		if (event.pageX)
		{
			pageX = event.pageX;
		}
		else
		{
			pageX = event.clientX;
		}

		/**
		* Fensterbreite "innerWidth" wird bestimmt.
		*/
		if (self.innerHeight)
		{
			// alle Browser auser IE
			innerWidth = self.innerWidth;
		}
		else if (document.documentElement && document.documentElement.clientHeight)
		{
			// IE 6 Strict Mode
			innerWidth = document.documentElement.clientWidth;
		}
		else if (document.body)
		{
			// andere IEs
			innerWidth = document.body.clientWidth;
		}
		if ((!is_opera) || is_opera9up)
		{
			div.style.right = (innerWidth - pageX - 30)+ "px";
		}
		else
		{
			div.style.left = (pageX - 10)+ "px";
		}
	}
	div.style.top = (pageY - 10) + "px";

	
}
