public Hierarchy GetOrAddHierarchy(string HierarchyUniqueName)
		{
			Hierarchy result;
			if (!dHierarchies.TryGetValue(HierarchyUniqueName,out result))
			{
				result = new Hierarchy(this, HierarchyUniqueName, Hierarchies.Count);
				Hierarchies.Add(result);
				dHierarchies[HierarchyUniqueName]=result;
			}
			return result;
		}
		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(Hierarchy Hierarchy, int Index)
		{
			this.Hierarchy=Hierarchy;
			this.Index = Index;
		}