public void InsertLink(XmlElement links, LinkData link)
		{
			XmlElement itemElement = CreateElement("link");
			itemElement.SetAttribute("id", link.Ident);
			if (link.Url != null)
				itemElement.SetAttribute("url", link.Url);
			if (link.Title != null)
				itemElement.SetAttribute("title", link.Title);
			if (link.IsImage)
				itemElement.SetAttribute("image", "true");
			if (link.Text != null) {
				XmlText valueTextNode = Document.CreateTextNode(link.Text);
				itemElement.AppendChild(valueTextNode);
			}
			links.AppendChild(itemElement);
		}
		public LinkData DefineLink(string Url, string Title, string Ident,
								   bool Definition, bool? Image)
		{
			if (! string.IsNullOrEmpty(Url) &&
				Url[0] == '<' && Url[Url.Length - 1] == '>')
				Url = Url.Substring(1, Url.Length - 2);

			string id = Ident;
			if (string.IsNullOrEmpty(id)) {
				id = Ident = "#" + LinkIndex.ToString();
				LinkIndex++;
			} else {
				id = ReduceString(id);
			}				

			LinkData data;
			if (Links.ContainsKey(id)) {
				data = Links[id];
			} else {
				data = new LinkData();
				Links[id] = data;
			}

			data.Id	   = id;
			data.Ident = Ident;

			if (! string.IsNullOrEmpty(Url))
				data.Url = Url;
			if (! string.IsNullOrEmpty(Title))
				data.Title = Title;

			if (Image.HasValue && Image.Value)
				data.IsImage = Image.Value;
			if (Definition)
				data.IsDefined = Definition;

			return data;
		}