//##########--- Objekt MenuItem erzeugen ---##########//
function MenuItem(Title,Url)
{
	this.ParentNode = null;
	this.Title = Title;
	this.Url = Url;
	this.ChildNodes = new Array();
	this.Level = 0;
	
	this.Add = MenuItem_Add;
	this.isAncestorOf = MenuItem_isAncestorOf;
	this.isSiblingOfAncestorOf = MenuItem_isSiblingOfAncestorOf;
	this.isParentOf = MenuItem_isParentOf;
	this.isSiblingOf = MenuItem_isSiblingOf;
	this.isChildOf = MenuItem_isChildOf;
	this.isFirstLevel = MenuItem_isFirstLevel;
}
//##########--- Objekt MenuItem erzeugen ---##########//


//##########--- Methoden definieren ---##########//

//MenuItem dem Objekt hinzufügen
function MenuItem_Add(Title, Url)
{
    var mi = new MenuItem(Title, Url);
	mi.ParentNode = this;
	mi.Level = this.Level + 1;
	this.ChildNodes[this.ChildNodes.length] = mi;
	return mi;
}

//Vorfahren des aktuellen Knotens ermitteln
function MenuItem_isAncestorOf(Node)
{
	if((this != Node)&&(Node.ParentNode != null))
	{
		if(this.isAncestorOf(Node.ParentNode))
			return true;
		else
			return false;
	}
	else
	{
		if(this == Node)
			return true;
		else
			return false;
	}
}

//Vorfahren des aktuellen Knotens und die Zwillinge der Vorfahren ermitteln
function MenuItem_isSiblingOfAncestorOf(Node)
{
	if(Node.ParentNode != null)
	{
		father = Node.ParentNode;
		if(father != null)
		{
			if(father.ParentNode != null)
			{
				sisters = father.ParentNode.ChildNodes;
				result = false;
				for(i=0;i<sisters.length;i++)
				{
					if(sisters[i] == this)
					{
						result = true;
					}
				}
				if(!result)
				{
					result = this.isSiblingOfAncestorOf(father);
				}
				return result;
			}
			else
				return false;
		}
		else
			return false;
	}
	else
		return false;
}

//Eltern des aktuellen Knotens ermitteln
function MenuItem_isParentOf(Node)
{
	if(this == Node.ParentNode)
		return true;
	else
		return false;
}

//Zwillinge des aktuellen Knotens ermitteln
function MenuItem_isSiblingOf(Node)
{
	if((this.ParentNode == Node.ParentNode)&&(this != Node))
		return true;
	else
		return false;
}

//Kinder des aktuellen Knotens ermitteln
function MenuItem_isChildOf(Node)
{
	if(this.ParentNode == Node)
		return true;
	else
		return false;
}

//Ist der aktuelle Knoten ein FirstLevel Knoten
function MenuItem_isFirstLevel()
{
	father = this.ParentNode;
	if(father != null)
	{
		if(father.ParentNode==null)
			return true;
		else
			return false;
	}
	else
	{
		return false;
	}
		
}
//##########--- End Methoden definieren ---##########//