/// <summary> Adds a new temporal subject to this object </summary>
        /// <param name="Start_Year">Start year for the year range</param>
        /// <param name="End_Year">End year for the year range</param>
        /// <param name="TimePeriod">Description of the time period (i.e. 'Post-WWII')</param>
        /// <returns> Temporal_Info object, either the one passed in or one that equals it already in the list </returns>
        public Temporal_Info Add_Temporal_Subject(int Start_Year, int End_Year, string TimePeriod)
        {
            if (temporalSubjects == null)
                temporalSubjects = new List<Temporal_Info>();

            Temporal_Info newTemporal = new Temporal_Info(Start_Year, End_Year, TimePeriod);
            if (!temporalSubjects.Contains(newTemporal))
            {
                temporalSubjects.Add(newTemporal);
                return newTemporal;
            }

            Temporal_Info returnTemporal = temporalSubjects.Find(newTemporal.Equals);
            if ((TimePeriod.Length > 0) && (returnTemporal.TimePeriod.Length == 0))
                returnTemporal.TimePeriod = TimePeriod;
            return returnTemporal;
        }
        /// <summary> Reads the dmdSec at the current position in the XmlTextReader and associates it with the 
        /// entire package  </summary>
        /// <param name="Input_XmlReader"> Open XmlReader from which to read the metadata </param>
        /// <param name="Return_Package"> Package into which to read the metadata</param>
        /// <param name="Options"> Dictionary of any options which this METS section reader may utilize</param>
        /// <returns> TRUE if successful, otherwise FALSE</returns>  
        public bool Read_dmdSec(XmlReader Input_XmlReader, SobekCM_Item Return_Package, Dictionary<string, object> Options)
        {
            // Get the related metadata modules here
            Performing_Arts_Info partInfo = Return_Package.Get_Metadata_Module("PerformingArts") as Performing_Arts_Info;
            Oral_Interview_Info oralInfo = Return_Package.Get_Metadata_Module("OralInterview") as Oral_Interview_Info;

            // Was a list for the deprecated download portion of the SobekCM section input?
            List<Download_Info_DEPRECATED> deprecatedDownloads = null;
            if (Options != null)
            {
                if (Options.ContainsKey("SobekCM_METS_dmdSec_ReaderWriter:Deprecated_Downloads"))
                {
                    deprecatedDownloads = (List<Download_Info_DEPRECATED>) Options["SobekCM_METS_dmdSec_ReaderWriter:Deprecated_Downloads"];
                }
            }

            while (Input_XmlReader.Read())
            {
                if ((Input_XmlReader.NodeType == XmlNodeType.EndElement) && ((Input_XmlReader.Name == "METS:mdWrap") || (Input_XmlReader.Name == "mdWrap")))
                    return true;

                if (Input_XmlReader.NodeType == XmlNodeType.Element)
                {
                    switch (Input_XmlReader.Name.Replace(sobekcm_namespace + ":", ""))
                    {
                        case "embeddedVideo":
                            Input_XmlReader.Read();
                            if (Input_XmlReader.NodeType == XmlNodeType.Text)
                            {
                                string code = Input_XmlReader.Value;
                                Return_Package.Behaviors.Embedded_Video = Input_XmlReader.Value;
                            }
                            break;

                        case "Collection.Primary":
                            Input_XmlReader.Read();
                            if (Input_XmlReader.NodeType == XmlNodeType.Text)
                            {
                                string code = Input_XmlReader.Value;
                                Return_Package.Behaviors.Add_Aggregation(code);
                            }
                            break;

                        case "Collection.Alternate":
                            Input_XmlReader.Read();
                            if (Input_XmlReader.NodeType == XmlNodeType.Text)
                            {
                                string code = Input_XmlReader.Value;
                                Return_Package.Behaviors.Add_Aggregation(code);
                            }
                            break;

                        case "SubCollection":
                            Input_XmlReader.Read();
                            if (Input_XmlReader.NodeType == XmlNodeType.Text)
                                Return_Package.Behaviors.Add_Aggregation(Input_XmlReader.Value);
                            break;

                        case "Aggregation":
                            Input_XmlReader.Read();
                            if (Input_XmlReader.NodeType == XmlNodeType.Text)
                                Return_Package.Behaviors.Add_Aggregation(Input_XmlReader.Value);
                            break;

                        case "MainPage":
                            if (Input_XmlReader.MoveToAttribute("pagename"))
                                Return_Package.Behaviors.Main_Page.PageName = Input_XmlReader.Value;
                            if (Input_XmlReader.MoveToAttribute("previous"))
                            {
                                try
                                {
                                    Return_Package.Behaviors.Main_Page.Previous_Page_Exists = Convert.ToBoolean(Input_XmlReader.Value);
                                }
                                catch
                                {
                                }
                            }
                            if (Input_XmlReader.MoveToAttribute("next"))
                            {
                                try
                                {
                                    Return_Package.Behaviors.Main_Page.Next_Page_Exists = Convert.ToBoolean(Input_XmlReader.Value);
                                }
                                catch
                                {
                                }
                            }
                            Input_XmlReader.Read();
                            if (Input_XmlReader.NodeType == XmlNodeType.Text)
                                Return_Package.Behaviors.Main_Page.FileName = Input_XmlReader.Value;
                            break;

                        case "MainThumbnail":
                            Input_XmlReader.Read();
                            if (Input_XmlReader.NodeType == XmlNodeType.Text)
                                Return_Package.Behaviors.Main_Thumbnail = Input_XmlReader.Value;
                            break;

                        case "EncodingLevel":
                            Input_XmlReader.Read();
                            if (Input_XmlReader.NodeType == XmlNodeType.Text)
                                Return_Package.Bib_Info.EncodingLevel = Input_XmlReader.Value;
                            break;

                        case "Icon":
                        case "Wordmark":
                            Input_XmlReader.Read();
                            if (Input_XmlReader.NodeType == XmlNodeType.Text)
                                Return_Package.Behaviors.Add_Wordmark(Input_XmlReader.Value);
                            break;

                        case "Download":
                            Download_Info_DEPRECATED newDownload = new Download_Info_DEPRECATED();
                            if (Input_XmlReader.MoveToAttribute("label"))
                                newDownload.Label = Input_XmlReader.Value;
                            while (Input_XmlReader.Read())
                            {
                                if (Input_XmlReader.NodeType == XmlNodeType.Element)
                                    break;

                                if ((Input_XmlReader.NodeType == XmlNodeType.EndElement) && (Input_XmlReader.Name == sobekcm_namespace + ":Download"))
                                    break;
                            }
                            switch (Input_XmlReader.Name.Replace(sobekcm_namespace + ":", ""))
                            {
                                case "name":
                                    Input_XmlReader.Read();
                                    if (Input_XmlReader.NodeType == XmlNodeType.Text)
                                    {
                                        newDownload.FileName = Input_XmlReader.Value;
                                        if (deprecatedDownloads != null)
                                            deprecatedDownloads.Add(newDownload);
                                    }
                                    break;

                                case "url":
                                    if (Input_XmlReader.MoveToAttribute("type"))
                                        newDownload.FormatCode = Input_XmlReader.Value;
                                    if (Input_XmlReader.MoveToAttribute("size"))
                                    {
                                        try
                                        {
                                            newDownload.Size_MB = (float) Convert.ToDouble(Input_XmlReader.Value);
                                        }
                                        catch
                                        {
                                        }
                                    }
                                    Input_XmlReader.Read();
                                    if (Input_XmlReader.NodeType == XmlNodeType.Text)
                                    {
                                        newDownload.URL = Input_XmlReader.Value;
                                        if (deprecatedDownloads != null)
                                            deprecatedDownloads.Add(newDownload);
                                    }
                                    break;

                                case "fptr":
                                    if (Input_XmlReader.MoveToAttribute("FILEID"))
                                    {
                                        newDownload.File_ID = Input_XmlReader.Value;
                                        if (deprecatedDownloads != null)
                                            deprecatedDownloads.Add(newDownload);
                                    }
                                    break;
                            }
                            break;

                        case "URL":
                            Input_XmlReader.Read();
                            if (Input_XmlReader.NodeType == XmlNodeType.Text)
                                Return_Package.Bib_Info.Location.PURL = Input_XmlReader.Value;
                            break;

                        case "GUID":
                            Input_XmlReader.Read();
                            if (Input_XmlReader.NodeType == XmlNodeType.Text)
                                Return_Package.Web.GUID = Input_XmlReader.Value;
                            break;

                        case "NotifyEmail":
                            Input_XmlReader.Read();
                            if (Input_XmlReader.NodeType == XmlNodeType.Text)
                            {
                                Return_Package.Behaviors.NotifyEmail = Input_XmlReader.Value;
                            }
                            break;

                        case "Tickler":
                            Input_XmlReader.Read();
                            if (Input_XmlReader.NodeType == XmlNodeType.Text)
                            {
                                Return_Package.Behaviors.Add_Tickler(Input_XmlReader.Value);
                            }
                            break;

                        case "BibID":
                            Input_XmlReader.Read();
                            if (Input_XmlReader.NodeType == XmlNodeType.Text)
                                Return_Package.Bib_Info.BibID = Input_XmlReader.Value;
                            break;

                        case "VID":
                            Input_XmlReader.Read();
                            if (Input_XmlReader.NodeType == XmlNodeType.Text)
                                Return_Package.Bib_Info.VID = Input_XmlReader.Value;
                            break;

                        case "Affiliation":
                            Affiliation_Info newAffiliation = new Affiliation_Info();
                            if (Input_XmlReader.MoveToAttribute("nameid"))
                                newAffiliation.Name_Reference = Input_XmlReader.Value;
                            while (Input_XmlReader.Read())
                            {
                                if ((Input_XmlReader.NodeType == XmlNodeType.EndElement) && (Input_XmlReader.Name == sobekcm_namespace + ":Affiliation"))
                                {
                                    if (newAffiliation.hasData)
                                    {
                                        Return_Package.Bib_Info.Add_Affiliation(newAffiliation);
                                        break;
                                    }
                                }

                                if (Input_XmlReader.NodeType == XmlNodeType.Element)
                                {
                                    switch (Input_XmlReader.Name.Replace(sobekcm_namespace + ":", ""))
                                    {
                                        case "AffiliationTerm":
                                            Input_XmlReader.Read();
                                            if (Input_XmlReader.NodeType == XmlNodeType.Text)
                                                newAffiliation.Term = Input_XmlReader.Value;
                                            break;

                                        case "University":
                                            Input_XmlReader.Read();
                                            if (Input_XmlReader.NodeType == XmlNodeType.Text)
                                                newAffiliation.University = Input_XmlReader.Value;
                                            break;

                                        case "Campus":
                                            Input_XmlReader.Read();
                                            if (Input_XmlReader.NodeType == XmlNodeType.Text)
                                                newAffiliation.Campus = Input_XmlReader.Value;
                                            break;

                                        case "College":
                                            Input_XmlReader.Read();
                                            if (Input_XmlReader.NodeType == XmlNodeType.Text)
                                                newAffiliation.College = Input_XmlReader.Value;
                                            break;

                                        case "Unit":
                                            Input_XmlReader.Read();
                                            if (Input_XmlReader.NodeType == XmlNodeType.Text)
                                                newAffiliation.Unit = Input_XmlReader.Value;
                                            break;

                                        case "Department":
                                            Input_XmlReader.Read();
                                            if (Input_XmlReader.NodeType == XmlNodeType.Text)
                                                newAffiliation.Department = Input_XmlReader.Value;
                                            break;

                                        case "Institute":
                                            Input_XmlReader.Read();
                                            if (Input_XmlReader.NodeType == XmlNodeType.Text)
                                                newAffiliation.Institute = Input_XmlReader.Value;
                                            break;

                                        case "Center":
                                            Input_XmlReader.Read();
                                            if (Input_XmlReader.NodeType == XmlNodeType.Text)
                                                newAffiliation.Center = Input_XmlReader.Value;
                                            break;

                                        case "Section":
                                            Input_XmlReader.Read();
                                            if (Input_XmlReader.NodeType == XmlNodeType.Text)
                                                newAffiliation.Section = Input_XmlReader.Value;
                                            break;

                                        case "SubSection":
                                            Input_XmlReader.Read();
                                            if (Input_XmlReader.NodeType == XmlNodeType.Text)
                                                newAffiliation.SubSection = Input_XmlReader.Value;
                                            break;
                                    }
                                }
                            }
                            break;

                        case "Coordinates":
                            read_coordinates_info(Input_XmlReader, Return_Package);
                            break;

                        case "Holding":
                            while (Input_XmlReader.Read())
                            {
                                if ((Input_XmlReader.NodeType == XmlNodeType.EndElement) && (Input_XmlReader.Name == sobekcm_namespace + ":Holding"))
                                    break;

                                if ((Input_XmlReader.NodeType == XmlNodeType.Element) && (Input_XmlReader.Name == sobekcm_namespace + ":statement"))
                                {
                                    if (Input_XmlReader.MoveToAttribute("code"))
                                        Return_Package.Bib_Info.Location.Holding_Code = Input_XmlReader.Value;
                                    Input_XmlReader.Read();
                                    if (Input_XmlReader.NodeType == XmlNodeType.Text)
                                    {
                                        Return_Package.Bib_Info.Location.Holding_Name = Input_XmlReader.Value;
                                        break;
                                    }
                                }
                            }
                            break;

                        case "Source":
                            while (Input_XmlReader.Read())
                            {
                                if ((Input_XmlReader.NodeType == XmlNodeType.EndElement) && (Input_XmlReader.Name == sobekcm_namespace + ":Source"))
                                    break;

                                if ((Input_XmlReader.NodeType == XmlNodeType.Element) && (Input_XmlReader.Name == sobekcm_namespace + ":statement"))
                                {
                                    if (Input_XmlReader.MoveToAttribute("code"))
                                        Return_Package.Bib_Info.Source.Code = Input_XmlReader.Value;
                                    Input_XmlReader.Read();
                                    if (Input_XmlReader.NodeType == XmlNodeType.Text)
                                    {
                                        Return_Package.Bib_Info.Source.Statement = Input_XmlReader.Value;
                                        break;
                                    }
                                }
                            }
                            break;

                        case "Temporal":
                            while (Input_XmlReader.Read())
                            {
                                if ((Input_XmlReader.NodeType == XmlNodeType.EndElement) && (Input_XmlReader.Name == sobekcm_namespace + ":Temporal"))
                                {
                                    break;
                                }

                                if ((Input_XmlReader.NodeType == XmlNodeType.Element) && (Input_XmlReader.Name == sobekcm_namespace + ":period"))
                                {
                                    Temporal_Info newTemporal = new Temporal_Info();
                                    if (Input_XmlReader.MoveToAttribute("start"))
                                    {
                                        try
                                        {
                                            newTemporal.Start_Year = Convert.ToInt32(Input_XmlReader.Value);
                                        }
                                        catch
                                        {
                                        }
                                    }

                                    if (Input_XmlReader.MoveToAttribute("end"))
                                    {
                                        try
                                        {
                                            newTemporal.End_Year = Convert.ToInt32(Input_XmlReader.Value);
                                        }
                                        catch
                                        {
                                        }
                                    }

                                    Input_XmlReader.Read();
                                    if (Input_XmlReader.NodeType == XmlNodeType.Text)
                                    {
                                        newTemporal.TimePeriod = Input_XmlReader.Value;
                                        Return_Package.Bib_Info.Add_Temporal_Subject(newTemporal);
                                    }
                                }
                            }
                            break;

                        case "Type":
                            Input_XmlReader.Read();
                            if (Input_XmlReader.NodeType == XmlNodeType.Text)
                            {
                                Return_Package.Bib_Info.SobekCM_Type_String = Input_XmlReader.Value.Trim();
                            }
                            break;

                        case "SortDate":
                            Input_XmlReader.Read();
                            if (Input_XmlReader.NodeType == XmlNodeType.Text)
                            {
                                try
                                {
                                    Return_Package.Bib_Info.SortDate = Convert.ToInt32(Input_XmlReader.Value);
                                }
                                catch
                                {
                                }
                            }
                            break;

                        case "SortTitle":
                            Input_XmlReader.Read();
                            if (Input_XmlReader.NodeType == XmlNodeType.Text)
                            {
                                Return_Package.Bib_Info.SortTitle = Input_XmlReader.Value;
                            }
                            break;

                        case "Manufacturer":
                            Publisher_Info thisManufacturer = null;
                            string manufacturer_id = String.Empty;
                            if (Input_XmlReader.MoveToAttribute("ID"))
                                manufacturer_id = Input_XmlReader.Value;
                            while (Input_XmlReader.Read())
                            {
                                if ((Input_XmlReader.NodeType == XmlNodeType.EndElement) && (Input_XmlReader.Name == sobekcm_namespace + ":Manufacturer"))
                                {
                                    if (thisManufacturer != null)
                                    {
                                        thisManufacturer.ID = manufacturer_id;
                                    }
                                    break;
                                }

                                if (Input_XmlReader.NodeType == XmlNodeType.Element)
                                {
                                    switch (Input_XmlReader.Name.Replace(sobekcm_namespace + ":", ""))
                                    {
                                        case "Name":
                                            Input_XmlReader.Read();
                                            if (Input_XmlReader.NodeType == XmlNodeType.Text)
                                            {
                                                thisManufacturer = Return_Package.Bib_Info.Add_Manufacturer(Input_XmlReader.Value);
                                            }
                                            break;

                                        case "PlaceTerm":
                                            if (thisManufacturer != null)
                                            {
                                                if ((Input_XmlReader.MoveToAttribute("type")) && (Input_XmlReader.Value == "code"))
                                                {
                                                    if (Input_XmlReader.MoveToAttribute("authority"))
                                                    {
                                                        switch (Input_XmlReader.Value)
                                                        {
                                                            case "marccountry":
                                                                Input_XmlReader.Read();
                                                                if (Input_XmlReader.NodeType == XmlNodeType.Text)
                                                                {
                                                                    thisManufacturer.Add_Place(String.Empty, Input_XmlReader.Value, String.Empty);
                                                                }
                                                                break;

                                                            case "iso3166":
                                                                Input_XmlReader.Read();
                                                                if (Input_XmlReader.NodeType == XmlNodeType.Text)
                                                                {
                                                                    thisManufacturer.Add_Place(String.Empty, String.Empty, Input_XmlReader.Value);
                                                                }
                                                                break;
                                                        }
                                                    }
                                                }
                                                else
                                                {
                                                    Input_XmlReader.Read();
                                                    if (Input_XmlReader.NodeType == XmlNodeType.Text)
                                                    {
                                                        thisManufacturer.Add_Place(Input_XmlReader.Value);
                                                    }
                                                }
                                            }
                                            break;
                                    }
                                }
                            }
                            break;

                        case "Publisher":
                            Publisher_Info thisPublisher = null;
                            string publisher_id = String.Empty;
                            if (Input_XmlReader.MoveToAttribute("ID"))
                                publisher_id = Input_XmlReader.Value;
                            while (Input_XmlReader.Read())
                            {
                                if ((Input_XmlReader.NodeType == XmlNodeType.EndElement) && (Input_XmlReader.Name == sobekcm_namespace + ":Publisher"))
                                {
                                    if (thisPublisher != null)
                                    {
                                        thisPublisher.ID = publisher_id;
                                    }
                                    break;
                                }

                                if (Input_XmlReader.NodeType == XmlNodeType.Element)
                                {
                                    switch (Input_XmlReader.Name.Replace(sobekcm_namespace + ":", ""))
                                    {
                                        case "Name":
                                            Input_XmlReader.Read();
                                            if (Input_XmlReader.NodeType == XmlNodeType.Text)
                                            {
                                                thisPublisher = Return_Package.Bib_Info.Add_Publisher(Input_XmlReader.Value);
                                            }
                                            break;

                                        case "PlaceTerm":
                                            if (thisPublisher != null)
                                            {
                                                if ((Input_XmlReader.MoveToAttribute("type")) && (Input_XmlReader.Value == "code"))
                                                {
                                                    if (Input_XmlReader.MoveToAttribute("authority"))
                                                    {
                                                        switch (Input_XmlReader.Value)
                                                        {
                                                            case "marccountry":
                                                                Input_XmlReader.Read();
                                                                if (Input_XmlReader.NodeType == XmlNodeType.Text)
                                                                {
                                                                    thisPublisher.Add_Place(String.Empty, Input_XmlReader.Value, String.Empty);
                                                                }
                                                                break;

                                                            case "iso3166":
                                                                Input_XmlReader.Read();
                                                                if (Input_XmlReader.NodeType == XmlNodeType.Text)
                                                                {
                                                                    thisPublisher.Add_Place(String.Empty, String.Empty, Input_XmlReader.Value);
                                                                }
                                                                break;
                                                        }
                                                    }
                                                }
                                                else
                                                {
                                                    Input_XmlReader.Read();
                                                    if (Input_XmlReader.NodeType == XmlNodeType.Text)
                                                    {
                                                        thisPublisher.Add_Place(Input_XmlReader.Value);
                                                    }
                                                }
                                            }
                                            break;
                                    }
                                }
                            }
                            break;

                        case "part:performingArts":
                            if (partInfo == null)
                            {
                                partInfo = new Performing_Arts_Info();
                                Return_Package.Add_Metadata_Module("PerformingArts", partInfo);
                            }
                            while (Input_XmlReader.Read())
                            {
                                if ((Input_XmlReader.NodeType == XmlNodeType.EndElement) && (Input_XmlReader.Name == "part:performingArts"))
                                    break;

                                if (Input_XmlReader.NodeType == XmlNodeType.Element)
                                {
                                    switch (Input_XmlReader.Name)
                                    {
                                        case "part:Performer":
                                            string occupation = String.Empty;
                                            string lifespan = String.Empty;
                                            string title = String.Empty;
                                            string sex = String.Empty;
                                            if (Input_XmlReader.MoveToAttribute("occupation"))
                                                occupation = Input_XmlReader.Value;
                                            if (Input_XmlReader.MoveToAttribute("lifespan"))
                                                lifespan = Input_XmlReader.Value;
                                            if (Input_XmlReader.MoveToAttribute("title"))
                                                title = Input_XmlReader.Value;
                                            if (Input_XmlReader.MoveToAttribute("sex"))
                                                sex = Input_XmlReader.Value;
                                            Input_XmlReader.Read();
                                            if (Input_XmlReader.NodeType == XmlNodeType.Text)
                                            {
                                                Performer newPerformer = partInfo.Add_Performer(Input_XmlReader.Value);
                                                newPerformer.Occupation = occupation;
                                                newPerformer.Title = title;
                                                newPerformer.Sex = sex;
                                                newPerformer.LifeSpan = lifespan;
                                            }
                                            break;

                                        case "part:Performance":
                                            if (Input_XmlReader.MoveToAttribute("date"))
                                                partInfo.Performance_Date = Input_XmlReader.Value;
                                            Input_XmlReader.MoveToElement();
                                            if (!Input_XmlReader.IsEmptyElement)
                                            {
                                                Input_XmlReader.Read();
                                                if (Input_XmlReader.NodeType == XmlNodeType.Text)
                                                {
                                                    partInfo.Performance = Input_XmlReader.Value;
                                                }
                                            }
                                            break;
                                    }
                                }
                            }
                            break;

                        case "SerialHierarchy":
                            int serial_level = -1;
                            int serial_order = -1;
                            string serial_display = String.Empty;
                            if (Input_XmlReader.MoveToAttribute("level"))
                            {
                                try
                                {
                                    serial_level = Convert.ToInt32(Input_XmlReader.Value);
                                }
                                catch
                                {
                                }
                            }
                            if (Input_XmlReader.MoveToAttribute("order"))
                            {
                                try
                                {
                                    serial_order = Convert.ToInt32(Input_XmlReader.Value);
                                }
                                catch
                                {
                                }
                            }
                            Input_XmlReader.MoveToElement();
                            if (!Input_XmlReader.IsEmptyElement)
                            {
                                Input_XmlReader.Read();
                                if (Input_XmlReader.NodeType == XmlNodeType.Text)
                                    serial_display = Input_XmlReader.Value;
                            }
                            if ((serial_display.Length == 0) && (serial_order > 0))
                                serial_display = serial_order.ToString();
                            if ((serial_display.Length > 0) && (serial_order > 0))
                                Return_Package.Behaviors.Serial_Info.Add_Hierarchy(serial_level, serial_order, serial_display);
                            break;

                        case "Container":
                            int container_level = -1;
                            string container_type = String.Empty;
                            string container_name = String.Empty;
                            if (Input_XmlReader.MoveToAttribute("level"))
                            {
                                try
                                {
                                    container_level = Convert.ToInt32(Input_XmlReader.Value);
                                }
                                catch
                                {
                                }
                            }
                            if (Input_XmlReader.MoveToAttribute("type"))
                            {
                                container_type = Input_XmlReader.Value;
                            }
                            Input_XmlReader.MoveToElement();
                            if (!Input_XmlReader.IsEmptyElement)
                            {
                                Input_XmlReader.Read();
                                if (Input_XmlReader.NodeType == XmlNodeType.Text)
                                {
                                    container_name = Input_XmlReader.Value;

                                    Return_Package.Bib_Info.Add_Container(container_type, container_name, container_level);
                                }
                            }
                            break;

                        case "oral:Interviewee":
                            if (oralInfo == null)
                            {
                                oralInfo = new Oral_Interview_Info();
                                Return_Package.Add_Metadata_Module("OralInterview", oralInfo);
                            }
                            Input_XmlReader.Read();
                            if (Input_XmlReader.NodeType == XmlNodeType.Text)
                            {
                                oralInfo.Interviewee = Input_XmlReader.Value;
                            }
                            break;

                        case "oral:Interviewer":
                            if (oralInfo == null)
                            {
                                oralInfo = new Oral_Interview_Info();
                                Return_Package.Add_Metadata_Module("OralInterview", oralInfo);
                            }
                            Input_XmlReader.Read();
                            if (Input_XmlReader.NodeType == XmlNodeType.Text)
                            {
                                oralInfo.Interviewer = Input_XmlReader.Value;
                            }
                            break;
                    }
                }
            }

            // Return false since this read all the way to the end of the steam
            return false;
        }
        /// <summary> Adds a new temporal subject to this object </summary>
        /// <param name="New_Temporal"> Temporral subject object to add to this item </param>
        /// <returns> Temporal_Info object, either the one passed in or one that equals it already in the list </returns>
        public Temporal_Info Add_Temporal_Subject(Temporal_Info New_Temporal)
        {
            if (temporalSubjects == null)
                temporalSubjects = new List<Temporal_Info>();

            if (!temporalSubjects.Contains(New_Temporal))
            {
                temporalSubjects.Add(New_Temporal);
                return New_Temporal;
            }

            Temporal_Info returnTemporal = temporalSubjects.Find(New_Temporal.Equals);
            if ((New_Temporal.TimePeriod.Length > 0) && (returnTemporal.TimePeriod.Length == 0))
                returnTemporal.TimePeriod = New_Temporal.TimePeriod;
            return returnTemporal;
        }