internal HierarchyMember(Hierarchy Hierarchy, HierarchyMember ParentMember, Level Level, string UniqueNameInHierarchy)
		{
			this.Hierarchy = Hierarchy;
			this.UniqueName = UniqueNameInHierarchy;
			this.Level = Level;
			this.ParentMember = ParentMember;
			
			Hierarchy.Members[UniqueNameInHierarchy] = this;
			if (ParentMember==null)
				Hierarchy.FirstLevelMembers.Add(this);
			else
				ParentMember.Childs.Add(this);
			
		}
		internal Level GetOrAddNextLevel4Member(HierarchyMember HierarchyMember)
		{
			int levelIndex;
			if(HierarchyMember==null)
				levelIndex=0;
			else
				levelIndex=HierarchyMember.Level.Index+1;
			
			Level result;
			if (Levels.Count <= levelIndex)
			{
				result = new Level(this,Levels.Count);
				Levels.Add(result);
			}	
			else
				result = Levels[levelIndex];
			
			return result;
		}