/// <summary> Saves the data rendered by this element to the provided bibliographic object during postback </summary>
        /// <param name="Bib"> Object into which to save the user's data, entered into the html rendered by this element </param>
        public override void Save_To_Bib(SobekCM_Item Bib)
        {
            // Try to get any existing metadata module
            VRACore_Info vraInfo = Bib.Get_Metadata_Module(GlobalVar.VRACORE_METADATA_MODULE_KEY) as VRACore_Info;

            string[] getKeys = HttpContext.Current.Request.Form.AllKeys;
            foreach (string thisKey in getKeys.Where(thisKey => thisKey.IndexOf(html_element_name.Replace("_", "")) == 0))
            {
                // Get the value from the form element
                string value = HttpContext.Current.Request.Form[thisKey].Trim();
                if (value.Length > 0)
                {
                    // There is a value, so ensure metadata does exist
                    if (vraInfo == null)
                    {
                        vraInfo = new VRACore_Info();
                        Bib.Add_Metadata_Module(GlobalVar.VRACORE_METADATA_MODULE_KEY, vraInfo);
                    }

                    // Add the value
                    vraInfo.Add_Technique(value);

                }
            }
        }
        /// <summary> Adds a bit of data to a bibliographic package using the mapping </summary>
        /// <param name="Package">Bibliographic package to receive the data</param>
        /// <param name="Data">Text of the data</param>
        /// <param name="Field">Mapped field</param>
        /// <returns> TRUE if the field was mapped, FALSE if there was data and no mapping was found </returns>
        public bool Add_Data(SobekCM_Item Package, string Data, string Field)
        {
            // If no field listed, just skip (but not a mapping error, so return TRUE)
            if (String.IsNullOrEmpty(Field))
                return true;

            // If no data listed, just skip (but not a mapping error, so return TRUE)
            if (String.IsNullOrWhiteSpace(Data))
                return true;

            // Trim the data
            Data = Data.Trim();

            // Normalize the field name
            string correctName = Field.ToLower().Replace("(s)", "").Replace("#", "").Replace(" ", "").Replace(".", "").Replace(":", "").Replace("\\", "").Replace("/", "").Replace(")", "").Replace("(", "").Trim();

            // Everything depends on the field which is mapped
            switch (correctName)
            {
                case "acknowledgements":
                case "acknowledgments":
                    Package.Bib_Info.Add_Note(Data, Note_Type_Enum.CreationCredits, "Acknowledgments");
                    return true;

                case "bulletincommitteemembers":
                    Package.Bib_Info.Add_Named_Entity(Data, "Bulletin Committee Member").Name_Type = Name_Info_Type_Enum.Personal;
                    return true;

                case "collectionlocation":
                    Package.Bib_Info.Add_Note(Data, Note_Type_Enum.AdditionalPhysicalForm, "Collection Location");
                    return true;

                case "columnist":
                    Package.Bib_Info.Add_Named_Entity(Data, "Columnist").Name_Type = Name_Info_Type_Enum.Personal;
                    return true;

                case "contents":
                    Package.Bib_Info.Get_TableOfContents("Contents").Add(Data);
                    return true;

                case "contributinginstitution":
                    Package.Bib_Info.Add_Named_Entity(Data, "Contributing Institution").Name_Type = Name_Info_Type_Enum.Corporate;
                    return true;

                case "contributor":
                    Package.Bib_Info.Add_Named_Entity(Data, "Contributing Institution").Name_Type = Name_Info_Type_Enum.Personal;
                    return true;

                case "coverstories":
                    Package.Bib_Info.Get_TableOfContents("Cover Stories").Add(Data);
                    return true;

                case "coverstoriescontents":
                    Package.Bib_Info.Get_TableOfContents("Cover Stories / Contents").Add(Data);
                    return true;

                case "covertitle":
                    Package.Bib_Info.Get_TableOfContents("Contents").Add(Data);
                    return true;

                case "creator":
                    Package.Bib_Info.Add_Named_Entity(Data, "Creator").Name_Type = Name_Info_Type_Enum.Personal;
                    return true;

                case "creator,performer":
                    Package.Bib_Info.Add_Named_Entity(Data, "Creator / Performer").Name_Type = Name_Info_Type_Enum.Personal;
                    return true;

                case "date":
                    Package.Bib_Info.Origin_Info.Date_Created = Data;
                    return true;

                case "dateoriginal":
                    Package.Bib_Info.Origin_Info.Date_Created = Data;
                    return true;

                case "description":
                    Package.Bib_Info.Add_Abstract(new Abstract_Info { Abstract_Text = Data, Type = "Summary", Display_Label = "Description" });
                    return true;

                case "designer":
                    Package.Bib_Info.Add_Named_Entity(Data, "Designer").Name_Type = Name_Info_Type_Enum.Personal;
                    return true;

                case "digitalid":
                    Package.Bib_Info.Add_Identifier(Data, "Digital Id");
                    return true;

                case "digitizationspecifications":
                    Package.Bib_Info.Add_Note(Data, Note_Type_Enum.Ownership, "Digitization Specifications");
                    return true;

                case "editing":
                case "editor":
                    Package.Bib_Info.Add_Named_Entity(Data, "Editor").Name_Type = Name_Info_Type_Enum.Personal;
                    return true;

                case "editorwriter":
                    Package.Bib_Info.Add_Named_Entity(Data, "Editor / Writer").Name_Type = Name_Info_Type_Enum.Personal;
                    return true;

                case "emcee":
                    Package.Bib_Info.Add_Named_Entity(Data, "Emcee").Name_Type = Name_Info_Type_Enum.Personal;
                    return true;

                case "features":
                    Package.Bib_Info.Get_TableOfContents("Features").Add(Data);
                    return true;

                case "filesizeandduration":
                    // Get the duration from the parantheses
                    int fsd_start = Data.IndexOf("(");
                    int fsd_end = Data.IndexOf(")");
                    if ((fsd_start > 0) && (fsd_end > fsd_start))
                    {
                        string duration_string = Data.Substring(fsd_start + 1, fsd_end - fsd_start - 1);
                        if (( duration_string.IndexOf("second", StringComparison.OrdinalIgnoreCase) > 0 ) || (duration_string.IndexOf("minute", StringComparison.OrdinalIgnoreCase) > 0 ))
                            Package.Bib_Info.Original_Description.Extent = duration_string;
                    }
                    return true;

                case "founder":
                    Package.Bib_Info.Add_Named_Entity(Data, "Founder").Name_Type = Name_Info_Type_Enum.Personal;
                    return true;

                case "frontpageheadlines":
                    Package.Bib_Info.Get_TableOfContents("Front Page Headlines").Add(Data);
                    return true;

                case "generalsubjects":
                    split_add_subjects(Package, Data);
                    return true;

                case "genre":
                    Package.Bib_Info.Add_Genre(Data);
                    return true;

                case "geographiccoverage":
                    Package.Bib_Info.Add_Spatial_Subject(Data);
                    return true;

                case "historicalnarrative":
                    Package.Bib_Info.Add_Named_Entity(Data, "Historical Narrative").Name_Type = Name_Info_Type_Enum.Personal;
                    return true;

                case "identifiedindividuals":
                    Subject_Info_Name nameSubj = Package.Bib_Info.Add_Name_Subject();
                    nameSubj.Full_Name = Data;
                    nameSubj.Name_Type = Name_Info_Type_Enum.Personal;
                    nameSubj.Description = "Identified Individuals";
                    return true;

                case "image-specificsubjects":
                    split_add_subjects(Package, Data);
                    return true;

                case "internalnote":
                    Package.Bib_Info.Add_Note(Data, Note_Type_Enum.InternalComments, "Acknowledgments");
                    return true;

                case "interviewdate":
                    Package.Bib_Info.Origin_Info.Add_Date_Other(Data, "Interview Date");
                    return true;

                case "interviewlocation":
                    Package.Bib_Info.Origin_Info.Add_Place(Data);
                    return true;

                case "interviewee":
                    Package.Bib_Info.Add_Named_Entity(Data, "Interviewee").Name_Type = Name_Info_Type_Enum.Personal;
                    return true;

                case "interviewer":
                    Package.Bib_Info.Add_Named_Entity(Data, "Interviewer").Name_Type = Name_Info_Type_Enum.Personal;
                    return true;

                case "issue":
                case "issuenumber":
                    // If there is already an enumberation (1), use (2)
                    if (!String.IsNullOrWhiteSpace(Package.Bib_Info.Series_Part_Info.Enum1))
                    {
                        int issue_number = -1;
                        if (Int32.TryParse(Data, out issue_number))
                        {
                            Package.Bib_Info.Series_Part_Info.Enum1 = "Issue " + Data;
                            Package.Bib_Info.Series_Part_Info.Enum1_Index = issue_number;
                        }
                        else
                        {
                            Package.Bib_Info.Series_Part_Info.Enum1 = Data + " Issue";
                        }
                    }
                    else
                    {
                        int issue_number = -1;
                        if (Int32.TryParse(Data, out issue_number))
                        {
                            Package.Bib_Info.Series_Part_Info.Enum2 = "Issue " + Data;
                            Package.Bib_Info.Series_Part_Info.Enum2_Index = issue_number;
                        }
                        else
                        {
                            Package.Bib_Info.Series_Part_Info.Enum2 = Data + " Issue";
                        }
                    }
                    return true;

                case "issue-specificsubjects":
                    split_add_subjects(Package, Data);
                    return true;

                case "item-specificsubjects":
                    split_add_subjects(Package, Data);
                    return true;

                case "language":
                    Package.Bib_Info.Add_Language(Data);
                    return true;

                case "layout":
                    Package.Bib_Info.Add_Named_Entity(Data, "Layout").Name_Type = Name_Info_Type_Enum.Personal;
                    return true;

                case "location":
                    Package.Bib_Info.Origin_Info.Add_Place(Data);
                    return true;

                case "locationdepicted":
                    Package.Bib_Info.Add_Spatial_Subject(Data);
                    return true;

                case "monthseason":
                    Package.Bib_Info.Series_Part_Info.Month = Data;
                    return true;

                case "monthscovered":
                    Package.Bib_Info.Series_Part_Info.Month = Data;
                    return true;

                case "namesorganizations":
                    Package.Bib_Info.Add_Name_Subject().Full_Name = Data;
                    return true;

                case "originaldate":
                    Package.Bib_Info.Origin_Info.Date_Issued = Data;
                    return true;

                case "originalitemid":
                    Package.Bib_Info.Add_Identifier(Data, "Original ItemID");
                    return true;

                case "originalmedium":
                    VRACore_Info vraCoreInfo2 = Package.Get_Metadata_Module("VRACore") as VRACore_Info;
                    if (vraCoreInfo2 == null)
                    {
                        vraCoreInfo2 = new VRACore_Info();
                        Package.Add_Metadata_Module("VRACore", vraCoreInfo2);
                    }
                    vraCoreInfo2.Add_Material(Data, "medium");
                    return true;

                case "originalpublisher":
                    Package.Bib_Info.Add_Publisher(Data);
                    return true;

                case "photographer":
                    Package.Bib_Info.Add_Named_Entity(Data, "Photographer").Name_Type = Name_Info_Type_Enum.Personal;
                    return true;

                case "photographs":
                    Package.Bib_Info.Add_Named_Entity(Data, "Photograph Studio").Name_Type = Name_Info_Type_Enum.Corporate;
                    return true;

                case "physicalcollection":
                    Package.Bib_Info.Location.Holding_Name = Data;
                    return true;

                case "presentedatboardmeeting":
                    Package.Bib_Info.Origin_Info.Add_Date_Other(Data, "Presented at board meeting");
                    return true;

                case "presenter":
                    Package.Bib_Info.Add_Named_Entity(Data, "Presenter").Name_Type = Name_Info_Type_Enum.Personal;
                    return true;

                case "president":
                    Package.Bib_Info.Add_Named_Entity(Data, "President").Name_Type = Name_Info_Type_Enum.Personal;
                    return true;

                case "projectcoordinator":
                    Package.Bib_Info.Add_Named_Entity(Data, "Project Coordinator").Name_Type = Name_Info_Type_Enum.Personal;
                    return true;

                case "projectcreator":
                    Package.Bib_Info.Add_Named_Entity(Data, "Project Creator").Name_Type = Name_Info_Type_Enum.Personal;
                    return true;

                case "publicationdate":
                    Package.Bib_Info.Origin_Info.Date_Issued = Data;
                    return true;

                case "publisher":
                    Package.Bib_Info.Add_Publisher(Data);
                    return true;

                case "relatedbminewsletter":
                    Related_Item_Info relatedNewsletter = new Related_Item_Info();
                    relatedNewsletter.Main_Title.Title = Data;
                    relatedNewsletter.Relationship = Related_Item_Type_Enum.UNKNOWN;
                    relatedNewsletter.Add_Note("Related BMI Newsletter");
                    Package.Bib_Info.Add_Related_Item(relatedNewsletter);
                    return true;

                case "relatedbmiphoto":
                    Related_Item_Info relatedPhoto = new Related_Item_Info();
                    relatedPhoto.Main_Title.Title = Data;
                    relatedPhoto.Relationship = Related_Item_Type_Enum.UNKNOWN;
                    relatedPhoto.Add_Note("Related BMI Photograph");
                    Package.Bib_Info.Add_Related_Item(relatedPhoto);
                    return true;

                case "resourcetype":
                    Package.Bib_Info.Type.Add_Uncontrolled_Type(Data);
                    return true;

                case "rightsinformation":
                    Package.Bib_Info.Access_Condition.Text = Data;
                    return true;

                case "scrapbook-specificsubjects":
                    split_add_subjects(Package, Data);
                    return true;

                case "seasonmonth":
                    Package.Bib_Info.Series_Part_Info.Month = Data;
                    return true;

                case "subjects":
                    split_add_subjects(Package, Data);
                    return true;

                case "timeperiodcovered":
                    // Was this either a number, or a range?
                    int dash_count = 0;
                    bool isNumbers = true;
                    string dns = Data.Replace(" ", "");
                    foreach (char thisChar in dns)
                    {
                        if ((!Char.IsNumber(thisChar)) && (thisChar != '-'))
                        {
                            isNumbers = false;
                            break;
                        }

                        if (thisChar == '-')
                            dash_count++;
                    }

                    // Just add as is, if not number or range
                    if ((!isNumbers) || (dash_count > 1))
                        Package.Bib_Info.Add_Temporal_Subject(-1, -1, Data);
                    else
                    {
                        int start_year = -1;
                        int end_year = -1;
                        // Was it a range?
                        if (dash_count == 1)
                        {
                            string[] splitter = dns.Split("-".ToCharArray());
                            if (splitter.Length == 2)
                            {
                                if (( Int32.TryParse(splitter[0], out start_year)) && ( Int32.TryParse(splitter[1], out end_year )))
                                    Package.Bib_Info.Add_Temporal_Subject(start_year, end_year, Data);
                                else
                                    Package.Bib_Info.Add_Temporal_Subject(-1, -1, Data);
                            }
                        }
                        else
                        {
                            if ( Int32.TryParse(Data, out start_year))
                                Package.Bib_Info.Add_Temporal_Subject(start_year, -1, Data);
                            else
                                Package.Bib_Info.Add_Temporal_Subject(-1, -1, Data);
                        }
                    }
                    return true;

                case "title":
                    Package.Bib_Info.Main_Title.Title = Data;
                    return true;

                case "topics":
                    split_add_subjects(Package, Data);
                    return true;

                case "transcriptionprovidedby":
                    Package.Bib_Info.Add_Note(Data, Note_Type_Enum.CreationCredits, "Transcription Provided By");
                    return true;

                case "videofilesizeandduration":
                    // Get the duration from the parantheses
                    int vfsd_start = Data.IndexOf("(");
                    int vfsd_end = Data.IndexOf(")");
                    if ((vfsd_start > 0) && (vfsd_end > vfsd_start))
                    {
                        string duration_string = Data.Substring(vfsd_start + 1, vfsd_end - vfsd_start - 1);
                        Package.Bib_Info.Original_Description.Extent = duration_string;
                    }
                    return true;

                case "videographer":
                    Package.Bib_Info.Add_Named_Entity(Data, "Videographer").Name_Type = Name_Info_Type_Enum.Personal;
                    return true;

                case "volume":
                    // If there is already an enumberation (1), move it to (2)
                    if (!String.IsNullOrWhiteSpace(Package.Bib_Info.Series_Part_Info.Enum1))
                    {
                        Package.Bib_Info.Series_Part_Info.Enum2 = Package.Bib_Info.Series_Part_Info.Enum1;
                        Package.Bib_Info.Series_Part_Info.Enum2_Index = Package.Bib_Info.Series_Part_Info.Enum1_Index;
                    }

                    // Now, add the volume
                    int volume_number = -1;
                    if (Int32.TryParse(Data, out volume_number))
                    {
                        Package.Bib_Info.Series_Part_Info.Enum1 = "Volume " + Data;
                        Package.Bib_Info.Series_Part_Info.Enum1_Index = volume_number;
                    }
                    else
                    {
                        Package.Bib_Info.Series_Part_Info.Enum1 = Data + " Volume";
                        Package.Bib_Info.Series_Part_Info.Enum1_Index = -1;
                    }
                    return true;

                case "wars":
                    if ( Data.IndexOf("World War") >= 0 )
                        Package.Bib_Info.Add_Temporal_Subject(1939, 1945, "World War");
                    else if ( Data.IndexOf("Vietnam") >= 0 )
                        Package.Bib_Info.Add_Temporal_Subject(1961, 1975, "Vietnam War");
                    else if ( Data.IndexOf("Korean") >= 0 )
                        Package.Bib_Info.Add_Temporal_Subject(1950, 1953, "Korean War");
                    return true;

                case "writer":
                    Package.Bib_Info.Add_Named_Entity(Data, "Writer").Name_Type = Name_Info_Type_Enum.Personal;
                    return true;

                case "writerscontributors":
                    Package.Bib_Info.Add_Named_Entity(Data, "Writer / Contributor").Name_Type = Name_Info_Type_Enum.Personal;
                    return true;

                case "year":
                    Package.Bib_Info.Series_Part_Info.Year = Data;
                    return true;

                default:
                    // No mapping exists and this is a non-known no-mapping
                    return false;
            }
        }
        private static void read_vra_core_extensions(XmlReader r, Bibliographic_Info thisBibInfo, string alias, SobekCM_Item Package)
        {
            if (Package == null)
            {
                while (r.Read())
                {
                    if ((r.NodeType == XmlNodeType.EndElement) && ((r.Name == "mods:extension") || (r.Name == "extension")))
                    {
                        return;
                    }
                }
                return;
            }

            VRACore_Info vraCoreInfo = Package.Get_Metadata_Module( GlobalVar.VRACORE_METADATA_MODULE_KEY ) as VRACore_Info;
            if (vraCoreInfo == null)
            {
                vraCoreInfo = new VRACore_Info();
                Package.Add_Metadata_Module(GlobalVar.VRACORE_METADATA_MODULE_KEY, vraCoreInfo);
            }

            while (r.Read())
            {
                if ((r.NodeType == XmlNodeType.EndElement) && ((r.Name == "mods:extension") || (r.Name == "extension")))
                {
                    return;
                }

                if (r.NodeType == XmlNodeType.Element)
                {
                    string nodename = r.Name;
                    if (alias.Length > 0)
                    {
                        nodename = nodename.Replace(alias + ":", "");
                    }
                    switch (nodename)
                    {
                        case "culturalContext":
                            r.Read();
                            if (r.NodeType == XmlNodeType.Text)
                            {
                                if (r.Value.Length > 0)
                                    vraCoreInfo.Add_Cultural_Context(r.Value);
                            }
                            break;

                        case "inscription":
                            r.Read();
                            if (r.NodeType == XmlNodeType.Text)
                            {
                                if (r.Value.Length > 0)
                                    vraCoreInfo.Add_Inscription(r.Value);
                            }
                            break;

                        case "material":
                            string type = String.Empty;
                            if (r.HasAttributes)
                            {
                                if (r.MoveToAttribute("type"))
                                    type = r.Value;
                            }
                            r.Read();
                            if (r.NodeType == XmlNodeType.Text)
                            {
                                if (r.Value.Length > 0)
                                    vraCoreInfo.Add_Material(r.Value, type);
                            }
                            break;

                        case "measurements":
                            string units = String.Empty;
                            if (r.HasAttributes)
                            {
                                if (r.MoveToAttribute("unit"))
                                    units = r.Value;
                            }
                            r.Read();
                            if (r.NodeType == XmlNodeType.Text)
                            {
                                if (r.Value.Length > 0)
                                    vraCoreInfo.Add_Measurement(r.Value, units);
                            }
                            break;

                        case "stateEdition":
                            r.Read();
                            if (r.NodeType == XmlNodeType.Text)
                            {
                                if (r.Value.Length > 0)
                                    vraCoreInfo.Add_State_Edition(r.Value);
                            }
                            break;

                        case "stylePeriod":
                            r.Read();
                            if (r.NodeType == XmlNodeType.Text)
                            {
                                if (r.Value.Length > 0)
                                    vraCoreInfo.Add_Style_Period(r.Value);
                            }
                            break;

                        case "technique":
                            r.Read();
                            if (r.NodeType == XmlNodeType.Text)
                            {
                                if (r.Value.Length > 0)
                                    vraCoreInfo.Add_Technique(r.Value);
                            }
                            break;
                    }
                }
            }
        }
        /// <summary> Saves the data rendered by this element to the provided bibliographic object during postback </summary>
        /// <param name="Bib"> Object into which to save the user's data, entered into the html rendered by this element </param>
        public override void Save_To_Bib(SobekCM_Item Bib)
        {
            // Try to get any existing VRAcore metadata module
            VRACore_Info vraInfo = Bib.Get_Metadata_Module(GlobalVar.VRACORE_METADATA_MODULE_KEY) as VRACore_Info;

            Dictionary<string, string> terms = new Dictionary<string, string>();
            Dictionary<string, string> schemes = new Dictionary<string, string>();

            string[] getKeys = HttpContext.Current.Request.Form.AllKeys;
            foreach (string thisKey in getKeys)
            {
                if (thisKey.IndexOf(html_element_name.Replace("_", "") + "_first") == 0)
                {
                    string term = HttpContext.Current.Request.Form[thisKey];
                    string index = thisKey.Replace(html_element_name.Replace("_", "") + "_first", "");
                    terms[index] = term;
                }

                if (thisKey.IndexOf(html_element_name.Replace("_", "") + "_second") == 0)
                {
                    string scheme = HttpContext.Current.Request.Form[thisKey];
                    string index = thisKey.Replace(html_element_name.Replace("_", "") + "_second", "");
                    schemes[index] = scheme;
                }
            }

            // Were values found?
            if (terms.Count > 0)
            {
                // There is a value, so ensure VRAcore metadata does exist
                if (vraInfo == null)
                {
                    vraInfo = new VRACore_Info();
                    Bib.Add_Metadata_Module(GlobalVar.VRACORE_METADATA_MODULE_KEY, vraInfo);
                }

                // Add each value
                foreach (string index in terms.Keys)
                {
                    vraInfo.Add_Measurement( terms[index], schemes.ContainsKey(index) ? schemes[index] : String.Empty);
                }
            }
        }
        /// <summary> Adds a bit of data to a bibliographic package using the mapping </summary>
        /// <param name="Package">Bibliographic package to receive the data</param>
        /// <param name="Data">Text of the data</param>
        /// <param name="Field">Mapped field</param>
        public static void Add_Data(SobekCM_Item Package, string Data, Mapped_Fields Field)
        {
            Data = Data.Trim();
            if (Data.Length == 0)
                return;

            // Everything depends on the field which is mapped
            switch (Field)
            {
                case Mapped_Fields.None:
                    // Do nothing, since no mapping exists
                    break;

                case Mapped_Fields.Abstract:
                    Package.Bib_Info.Add_Abstract(Data, "en");
                    break;
                case Mapped_Fields.Accession_Number:
                    Package.Bib_Info.Add_Identifier(Data, "Accession Number");
                    break;
                case Mapped_Fields.Alternate_Title:
                    Package.Bib_Info.Add_Other_Title(Data, Title_Type_Enum.alternative);
                    break;
                case Mapped_Fields.Alternate_Title_Language:
                    List<Title_Info> otherTitles = Package.Bib_Info.Other_Titles.Where(ThisTitle => ThisTitle.Title_Type == Title_Type_Enum.alternative).ToList();
                    if (otherTitles.Count > 0)
                    {
                        otherTitles[otherTitles.Count - 1].Language = Data;
                    }
                    break;
                case Mapped_Fields.Attribution:
                    Package.Bib_Info.Add_Note(Data, Note_Type_Enum.funding);
                    break;
                case Mapped_Fields.Aggregation_Code:
                    Package.Behaviors.Add_Aggregation(Data.ToUpper());
                    break;
                case Mapped_Fields.Classification:
                    Package.Bib_Info.Add_Classification(Data);
                    break;
                case Mapped_Fields.Classification_Authority:
                    if (Package.Bib_Info.Classifications_Count > 0)
                    {
                        Package.Bib_Info.Classifications[Package.Bib_Info.Classifications_Count - 1].Authority = Data;
                    }
                    break;
                case Mapped_Fields.Contributor:
                    Package.Bib_Info.Add_Named_Entity(new Name_Info(Data, "contributor"));
                    break;
                case Mapped_Fields.Creator:
                    Package.Bib_Info.Add_Named_Entity(new Name_Info(Data, "creator"));
                    break;
                case Mapped_Fields.Creator_Affiliation:
                    if (Package.Bib_Info.Names_Count > 0)
                    {
                        Package.Bib_Info.Names[Package.Bib_Info.Names_Count - 1].Affiliation = Data;
                    }
                    break;
                case Mapped_Fields.Creator_Dates:
                    if (Package.Bib_Info.Names_Count > 0)
                    {
                        Package.Bib_Info.Names[Package.Bib_Info.Names_Count - 1].Dates = Data;
                    }
                    break;
                case Mapped_Fields.Creator_Family_Name:
                    if (Package.Bib_Info.Names_Count > 0)
                    {
                        Name_Info lastNamedEntity = Package.Bib_Info.Names[Package.Bib_Info.Names_Count - 1];
                        if (lastNamedEntity.Family_Name.Length == 0)
                            lastNamedEntity.Family_Name = Data;
                        else
                        {
                            Name_Info newNameEntity = new Name_Info {Family_Name = Data};
                            Package.Bib_Info.Add_Named_Entity(newNameEntity);
                        }
                    }
                    else
                    {
                        Name_Info newNameEntity = new Name_Info {Family_Name = Data};
                        Package.Bib_Info.Add_Named_Entity(newNameEntity);
                    }
                    break;
                case Mapped_Fields.Creator_Given_Name:
                    if (Package.Bib_Info.Names_Count > 0)
                    {
                        Name_Info lastNamedEntity = Package.Bib_Info.Names[Package.Bib_Info.Names_Count - 1];
                        if (lastNamedEntity.Given_Name.Length == 0)
                            lastNamedEntity.Given_Name = Data;
                        else
                        {
                            Name_Info newNameEntity = new Name_Info {Given_Name = Data};
                            Package.Bib_Info.Add_Named_Entity(newNameEntity);
                        }
                    }
                    else
                    {
                        Name_Info newNameEntity = new Name_Info {Given_Name = Data};
                        Package.Bib_Info.Add_Named_Entity(newNameEntity);
                    }
                    break;
                case Mapped_Fields.Creator_Role:
                    if (Package.Bib_Info.Names_Count > 0)
                    {
                        Name_Info thisCreator = Package.Bib_Info.Names[Package.Bib_Info.Names_Count - 1];
                        if ((thisCreator.Roles.Count == 1) && ((thisCreator.Roles[0].Role == "creator") || (thisCreator.Roles[1].Role == "contributor")))
                            thisCreator.Roles.Clear();
                        Package.Bib_Info.Names[Package.Bib_Info.Names_Count - 1].Add_Role(Data);
                    }
                    break;
                case Mapped_Fields.Cultural_Context:
                    VRACore_Info vraCoreInfo = Package.Get_Metadata_Module("VRACore") as VRACore_Info;
                    if (vraCoreInfo == null)
                    {
                        vraCoreInfo = new VRACore_Info();
                        Package.Add_Metadata_Module("VRACore", vraCoreInfo);
                    }
                    vraCoreInfo.Add_Cultural_Context(Data);
                    break;
                case Mapped_Fields.Donor:
                    Package.Bib_Info.Donor.Full_Name = Data;
                    break;
                case Mapped_Fields.Genre:
                    Package.Bib_Info.Add_Genre(Data);
                    break;
                case Mapped_Fields.Genre_Authority:
                    if (Package.Bib_Info.Genres_Count > 0)
                    {
                        Package.Bib_Info.Genres[Package.Bib_Info.Genres_Count - 1].Authority = Data;
                    }
                    break;
                case Mapped_Fields.Holding_Code:
                    Package.Bib_Info.Location.Holding_Code = Data;
                    break;
                case Mapped_Fields.Holding_Statement:
                    Package.Bib_Info.Location.Holding_Name = Data;
                    break;
                case Mapped_Fields.Identifier:
                    Package.Bib_Info.Add_Identifier(Data);
                    break;
                case Mapped_Fields.Identifier_Type:
                    if (Package.Bib_Info.Identifiers_Count > 0)
                    {
                        Package.Bib_Info.Identifiers[Package.Bib_Info.Identifiers_Count - 1].Type = Data;
                    }
                    break;
                case Mapped_Fields.Inscription:
                    VRACore_Info vraCoreInfo8 = Package.Get_Metadata_Module("VRACore") as VRACore_Info;
                    if (vraCoreInfo8 == null)
                    {
                        vraCoreInfo8 = new VRACore_Info();
                        Package.Add_Metadata_Module("VRACore", vraCoreInfo8);
                    }
                    vraCoreInfo8.Add_Inscription(Data);
                    break;
                case Mapped_Fields.Language:
                    Package.Bib_Info.Add_Language(Data);
                    break;
                case Mapped_Fields.Publisher:
                    Package.Bib_Info.Add_Publisher(Data);
                    break;
                case Mapped_Fields.Pub_Place:
                    Package.Bib_Info.Origin_Info.Add_Place(Data);
                    break;
                case Mapped_Fields.Related_URL_Label:
                    Package.Bib_Info.Location.Other_URL_Display_Label = Data;
                    break;
                case Mapped_Fields.Related_URL_Link:
                    Package.Bib_Info.Location.Other_URL = Data;
                    break;
                case Mapped_Fields.Related_URL_Note:
                    Package.Bib_Info.Location.Other_URL_Note = Data;
                    break;
                case Mapped_Fields.Source_Code:
                    Package.Bib_Info.Source.Code = Data;
                    break;
                case Mapped_Fields.Source_Statement:
                    Package.Bib_Info.Source.Statement = Data;
                    break;
                case Mapped_Fields.Subject_Keyword:
                    Package.Bib_Info.Add_Subject(Data, String.Empty);
                    break;
                case Mapped_Fields.Subject_Keyword_Authority:
                    if (Package.Bib_Info.Subjects_Count > 0)
                    {
                        Package.Bib_Info.Subjects[Package.Bib_Info.Subjects_Count - 1].Authority = Data;
                    }
                    break;
                case Mapped_Fields.BibID:
                    Package.Bib_Info.BibID = Data.ToUpper();
                    break;
                case Mapped_Fields.VID:
                    Package.Bib_Info.VID = Data.PadLeft(5, '0');
                    break;
                case Mapped_Fields.Date:
                    try
                    {
                        // first, try converting the string value to a date object
                        Package.Bib_Info.Origin_Info.Date_Issued = Convert.ToDateTime(Data).ToShortDateString();
                    }
                    catch
                    {
                        try
                        {
                            // second, try converting the string value to an integer
                            Package.Bib_Info.Origin_Info.Date_Issued = Convert.ToInt32(Data).ToString();
                        }
                        catch
                        {
                            Package.Bib_Info.Origin_Info.Date_Issued = Data;
                        }
                    }
                    break;
                case Mapped_Fields.Edition:
                    Package.Bib_Info.Origin_Info.Edition = Data;
                    break;
                case Mapped_Fields.Format:
                    Package.Bib_Info.Original_Description.Extent = Data;
                    break;
                case Mapped_Fields.Note:
                    Package.Bib_Info.Add_Note(Data);
                    break;
                case Mapped_Fields.Rights:
                    Package.Bib_Info.Access_Condition.Text = Data;
                    break;
                case Mapped_Fields.Series_Title:
                    Package.Bib_Info.SeriesTitle.Title = Data;
                    Package.Behaviors.GroupTitle = Data;
                    break;
                case Mapped_Fields.Type:
                    string upper_data = Data.ToUpper();
                    if (upper_data.IndexOf("NEWSPAPER") >= 0)
                    {
                        Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Newspaper;
                        break;
                    }
                    if ((upper_data.IndexOf("MONOGRAPH") >= 0) || (upper_data.IndexOf("BOOK") >= 0))
                    {
                        Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Book;
                        break;
                    }
                    if (upper_data.IndexOf("SERIAL") >= 0)
                    {
                        Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Serial;
                        break;
                    }
                    if (upper_data.IndexOf("AERIAL") >= 0)
                    {
                        Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Aerial;
                        if (Package.Bib_Info.Original_Description.Extent.Length == 0)
                            Package.Bib_Info.Original_Description.Extent = "Aerial Photograph";
                        break;
                    }
                    if (upper_data.IndexOf("PHOTO") >= 0)
                    {
                        Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Photograph;
                        break;
                    }
                    if (upper_data.IndexOf("POSTCARD") >= 0)
                    {
                        Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Photograph;
                        if (Package.Bib_Info.Original_Description.Extent.Length == 0)
                            Package.Bib_Info.Original_Description.Extent = "Postcard";
                        break;
                    }
                    if (upper_data.IndexOf("MAP") >= 0)
                    {
                        Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Map;
                        break;
                    }
                    if (upper_data.IndexOf("TEXT") >= 0)
                    {
                        Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Book;
                        break;
                    }
                    if (upper_data.IndexOf("AUDIO") >= 0)
                    {
                        Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Audio;
                        break;
                    }
                    if (upper_data.IndexOf("VIDEO") >= 0)
                    {
                        Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Video;
                        break;
                    }
                    if ((upper_data.IndexOf("ARCHIVE") >= 0) || (upper_data.IndexOf("ARCHIVAL") >= 0))
                    {
                        Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Archival;
                        break;
                    }
                    if (upper_data.IndexOf("ARTIFACT") >= 0)
                    {
                        Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Artifact;
                        break;
                    }
                    if (upper_data.IndexOf("IMAGE") >= 0)
                    {
                        Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Photograph;
                        break;
                    }

                    // if there was no match, set type to "UNDETERMINED"
                    Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.UNKNOWN;

                    if (Package.Bib_Info.Original_Description.Extent.Length == 0)
                        Package.Bib_Info.Original_Description.Extent = "Undetermined";
                    break;
                case Mapped_Fields.Uniform_Title:
                    Package.Bib_Info.Add_Other_Title(Data, Title_Type_Enum.uniform);
                    Package.Behaviors.GroupTitle = Data;
                    break;
                case Mapped_Fields.Title:
                    Package.Bib_Info.Main_Title.Title = Data;
                    break;
                case Mapped_Fields.Title_Language:
                    Package.Bib_Info.Main_Title.Language = Data;
                    break;
                case Mapped_Fields.Aleph:
                    Package.Bib_Info.Add_Identifier(Data, "ALEPH");
                    break;
                case Mapped_Fields.OCLC:
                    Package.Bib_Info.Add_Identifier(Data, "OCLC");
                    break;
                case Mapped_Fields.LCCN:
                    Package.Bib_Info.Add_Identifier(Data, "LCCN");
                    break;
                case Mapped_Fields.ISBN:
                    Package.Bib_Info.Add_Identifier(Data, "ISBN");
                    break;
                case Mapped_Fields.ISSN:
                    Package.Bib_Info.Add_Identifier(Data, "ISSN");
                    break;
                case Mapped_Fields.Sub_Title:
                    Package.Bib_Info.Main_Title.Subtitle = Data;
                    break;
                case Mapped_Fields.Volume:
                    Package.Bib_Info.Series_Part_Info.Enum1 = Data;
                    Package.Behaviors.Serial_Info.Add_Hierarchy(Package.Behaviors.Serial_Info.Count + 1, 1, Data);
                    break;
                case Mapped_Fields.Issue:
                    if (Package.Bib_Info.Series_Part_Info.Enum1.Length == 0)
                    {
                        Package.Bib_Info.Series_Part_Info.Enum1 = Data;
                    }
                    else
                    {
                        Package.Bib_Info.Series_Part_Info.Enum2 = Data;
                    }
                    Package.Behaviors.Serial_Info.Add_Hierarchy(Package.Behaviors.Serial_Info.Count + 1, 1, Data);
                    break;
                case Mapped_Fields.Section:
                    if (Package.Bib_Info.Series_Part_Info.Enum2.Length == 0)
                    {
                        if (Package.Bib_Info.Series_Part_Info.Enum1.Length == 0)
                            Package.Bib_Info.Series_Part_Info.Enum1 = Data;
                        else
                            Package.Bib_Info.Series_Part_Info.Enum2 = Data;
                    }
                    else
                    {
                        Package.Bib_Info.Series_Part_Info.Enum3 = Data;
                    }
                    Package.Behaviors.Serial_Info.Add_Hierarchy(Package.Behaviors.Serial_Info.Count + 1, 1, Data);
                    // Do nothing for now
                    break;

                case Mapped_Fields.Year:
                    Package.Bib_Info.Series_Part_Info.Year = Data;

                    if (Data.Length == 1)
                        year = "0" + Data;
                    else
                        year = Data;
                    build_date_string(Package);

                    break;

                case Mapped_Fields.Month:
                    Package.Bib_Info.Series_Part_Info.Month = Data;
                    month = Data;
                    build_date_string(Package);

                    break;

                case Mapped_Fields.Day:
                    Package.Bib_Info.Series_Part_Info.Day = Data;
                    day = Data;
                    build_date_string(Package);

                    break;

                case Mapped_Fields.Coordinates:
                    GeoSpatial_Information geoInfo = Package.Get_Metadata_Module(GlobalVar.GEOSPATIAL_METADATA_MODULE_KEY) as GeoSpatial_Information;
                    if (geoInfo == null)
                    {
                        geoInfo = new GeoSpatial_Information();
                        Package.Add_Metadata_Module(GlobalVar.GEOSPATIAL_METADATA_MODULE_KEY, geoInfo);
                    }
                    string[] coordinates = Data.Split(", ;".ToCharArray());
                    try
                    {
                        if (coordinates.Length == 2)
                        {
                            geoInfo.Add_Point(Convert.ToDouble(coordinates[0]), Convert.ToDouble(coordinates[1]), String.Empty);
                        }
                        else
                        {
                            coordinates = Data.Split(",;".ToCharArray());
                            if (coordinates.Length == 2)
                            {
                                geoInfo.Add_Point(Convert.ToDouble(coordinates[0]), Convert.ToDouble(coordinates[1]), String.Empty);
                            }
                        }
                    }
                    catch
                    {
                    }
                    break;

                case Mapped_Fields.Latitude:
                    GeoSpatial_Information geoInfo2 = Package.Get_Metadata_Module(GlobalVar.GEOSPATIAL_METADATA_MODULE_KEY) as GeoSpatial_Information;
                    if (geoInfo2 == null)
                    {
                        geoInfo2 = new GeoSpatial_Information();
                        Package.Add_Metadata_Module(GlobalVar.GEOSPATIAL_METADATA_MODULE_KEY, geoInfo2);
                    }
                    try
                    {
                        if (geoInfo2.Point_Count == 0)
                            geoInfo2.Add_Point(Convert.ToDouble(Data), 0, String.Empty);
                        else
                            geoInfo2.Points[0].Latitude = Convert.ToDouble(Data);
                    }
                    catch
                    {
                    }
                    break;

                case Mapped_Fields.Longitude:
                    GeoSpatial_Information geoInfo3 = Package.Get_Metadata_Module(GlobalVar.GEOSPATIAL_METADATA_MODULE_KEY) as GeoSpatial_Information;
                    if (geoInfo3 == null)
                    {
                        geoInfo3 = new GeoSpatial_Information();
                        Package.Add_Metadata_Module(GlobalVar.GEOSPATIAL_METADATA_MODULE_KEY, geoInfo3);
                    }
                    try
                    {
                        if (geoInfo3.Point_Count == 0)
                            geoInfo3.Add_Point(0, Convert.ToDouble(Data.Replace("°", "")), String.Empty);
                        else
                            geoInfo3.Points[0].Longitude = Convert.ToDouble(Data.Replace("°", ""));
                    }
                    catch
                    {
                    }
                    break;

                case Mapped_Fields.Projection:
                    Guarantee_Cartographics(Package).Projection = Data;
                    break;
                case Mapped_Fields.Scale:
                    Guarantee_Cartographics(Package).Scale = Data;
                    break;
                    //case Mapped_Fields.Spatial_Coverage:
                    //    Package.Bib_Info.Hierarchical_Spatials[0].Area = Data;
                    //    break;
                case Mapped_Fields.Icon_Wordmarks:
                case Mapped_Fields.Wordmark:
                    //    Package.Processing_Parameters.Icons.Add(Data, String.Empty);
                    Package.Behaviors.Add_Wordmark(Data);
                    break;
                case Mapped_Fields.Webskin:
                    Package.Behaviors.Add_Web_Skin(Data);
                    break;
                case Mapped_Fields.Temporal_Coverage:
                    Package.Bib_Info.Add_Temporal_Subject(-1, -1, Data);
                    break;
                case Mapped_Fields.Affiliation_University:
                    Guarantee_Affiliation_Collection(Package);
                    Package.Bib_Info.Affiliations[0].University = Data;
                    break;
                case Mapped_Fields.Affiliation_Campus:
                    Guarantee_Affiliation_Collection(Package);
                    Package.Bib_Info.Affiliations[0].Campus = Data;
                    break;
                case Mapped_Fields.Affiliation_College:
                    Guarantee_Affiliation_Collection(Package);
                    Package.Bib_Info.Affiliations[0].College = Data;
                    break;
                case Mapped_Fields.Affiliation_Unit:
                    Guarantee_Affiliation_Collection(Package);
                    Package.Bib_Info.Affiliations[0].Unit = Data;
                    break;
                case Mapped_Fields.Affiliation_Department:
                    Guarantee_Affiliation_Collection(Package);
                    Package.Bib_Info.Affiliations[0].Department = Data;
                    break;
                case Mapped_Fields.Affiliation_Institute:
                    Guarantee_Affiliation_Collection(Package);
                    Package.Bib_Info.Affiliations[0].Institute = Data;
                    break;
                case Mapped_Fields.Affiliation_Center:
                    Guarantee_Affiliation_Collection(Package);
                    Package.Bib_Info.Affiliations[0].Center = Data;
                    break;
                case Mapped_Fields.Affiliation_Section:
                    Guarantee_Affiliation_Collection(Package);
                    Package.Bib_Info.Affiliations[0].Section = Data;
                    break;
                case Mapped_Fields.Affiliation_Subsection:
                    Guarantee_Affiliation_Collection(Package);
                    Package.Bib_Info.Affiliations[0].SubSection = Data;
                    break;
                case Mapped_Fields.Geography_Continent:
                    Guarantee_Hierarchical_Spatial(Package).Continent = Data;
                    break;
                case Mapped_Fields.Geography_Country:
                    Guarantee_Hierarchical_Spatial(Package).Country = Data;
                    break;
                case Mapped_Fields.Geography_Province:
                    Guarantee_Hierarchical_Spatial(Package).Province = Data;
                    break;
                case Mapped_Fields.Geography_Region:
                    Guarantee_Hierarchical_Spatial(Package).Region = Data;
                    break;
                case Mapped_Fields.Geography_State:
                    Guarantee_Hierarchical_Spatial(Package).State = Data;
                    break;
                case Mapped_Fields.Geography_Territory:
                    Guarantee_Hierarchical_Spatial(Package).Territory = Data;
                    break;
                case Mapped_Fields.Geography_County:
                    Guarantee_Hierarchical_Spatial(Package).County = Data;
                    break;
                case Mapped_Fields.Geography_City:
                    Guarantee_Hierarchical_Spatial(Package).City = Data;
                    break;
                case Mapped_Fields.Geography_Island:
                    Guarantee_Hierarchical_Spatial(Package).Island = Data;
                    break;
                case Mapped_Fields.Geography_Area:
                    Guarantee_Hierarchical_Spatial(Package).Area = Data;
                    break;
                case Mapped_Fields.Copyright_Date:
                    Package.Bib_Info.Origin_Info.Date_Copyrighted = Data;
                    break;
                case Mapped_Fields.EAD_Name:
                    Package.Bib_Info.Location.EAD_Name = Data;
                    break;
                case Mapped_Fields.EAD_URL:
                    Package.Bib_Info.Location.EAD_URL = Data;
                    break;
                case Mapped_Fields.Internal_Comments:
                    Package.Tracking.Internal_Comments = Data;
                    break;
                case Mapped_Fields.Container_Box:
                    Package.Bib_Info.Add_Container("Box", Data, 1);
                    break;
                case Mapped_Fields.Container_Divider:
                    Package.Bib_Info.Add_Container("Divider", Data, 2);
                    break;
                case Mapped_Fields.Container_Folder:
                    Package.Bib_Info.Add_Container("Folder", Data, 3);
                    break;
                case Mapped_Fields.Viewer:
                    switch (Data.ToUpper().Replace("_"," ").Replace(" ",""))
                    {
                        case "JPEG":
                        case "JPG":
                            Package.Behaviors.Add_View(View_Enum.JPEG);
                            break;

                        case "JPEG2000":
                        case "JP2":
                            Package.Behaviors.Add_View(View_Enum.JPEG2000);
                            break;

                        case "PAGETURNER":
                            Package.Behaviors.Add_View(View_Enum.PAGE_TURNER);
                            break;

                        case "RELATEDIMAGES":
                        case "THUMBNAILS":
                            Package.Behaviors.Add_View(View_Enum.RELATED_IMAGES);
                            break;
                    }
                    break;
                case Mapped_Fields.Visibility:
                    switch (Data.ToUpper())
                    {
                        case "DARK":
                            Package.Behaviors.Dark_Flag = true;
                            Package.Behaviors.IP_Restriction_Membership = -1;
                            break;

                        case "PRIVATE":
                            Package.Behaviors.Dark_Flag = false;
                            Package.Behaviors.IP_Restriction_Membership = -1;
                            break;

                        case "PUBLIC":
                            Package.Behaviors.Dark_Flag = false;
                            Package.Behaviors.IP_Restriction_Membership = 0;
                            break;

                        case "RESTRICTED":
                            Package.Behaviors.Dark_Flag = false;
                            Package.Behaviors.IP_Restriction_Membership = 1;
                            break;
                    }
                    break;

                case Mapped_Fields.Tickler:
                    Package.Behaviors.Add_Tickler(Data);
                    break;

                case Mapped_Fields.Tracking_Box:
                    Package.Tracking.Tracking_Box = Data;
                    break;

                case Mapped_Fields.Born_Digital_Flag:
                    if (Data.ToUpper().Trim() == "TRUE")
                        Package.Tracking.Born_Digital = true;
                    break;

                case Mapped_Fields.Material_Received_Date:
                    DateTime materialReceivedDate;
                    if (DateTime.TryParse(Data, out materialReceivedDate))
                        Package.Tracking.Material_Received_Date = materialReceivedDate;
                    break;

                case Mapped_Fields.Materials:
                    VRACore_Info vraCoreInfo2 = Package.Get_Metadata_Module("VRACore") as VRACore_Info;
                    if (vraCoreInfo2 == null)
                    {
                        vraCoreInfo2 = new VRACore_Info();
                        Package.Add_Metadata_Module("VRACore", vraCoreInfo2);
                    }
                    vraCoreInfo2.Add_Material(Data, "medium");
                    break;

                case Mapped_Fields.Measurements:
                    VRACore_Info vraCoreInfo3 = Package.Get_Metadata_Module("VRACore") as VRACore_Info;
                    if (vraCoreInfo3 == null)
                    {
                        vraCoreInfo3 = new VRACore_Info();
                        Package.Add_Metadata_Module("VRACore", vraCoreInfo3);
                    }
                    vraCoreInfo3.Add_Measurement(Data, String.Empty);
                    break;

                case Mapped_Fields.State_Edition:
                    VRACore_Info vraCoreInfo4 = Package.Get_Metadata_Module("VRACore") as VRACore_Info;
                    if (vraCoreInfo4 == null)
                    {
                        vraCoreInfo4 = new VRACore_Info();
                        Package.Add_Metadata_Module("VRACore", vraCoreInfo4);
                    }
                    vraCoreInfo4.Add_State_Edition(Data);
                    break;

                case Mapped_Fields.Style_Period:
                    VRACore_Info vraCoreInfo5 = Package.Get_Metadata_Module("VRACore") as VRACore_Info;
                    if (vraCoreInfo5 == null)
                    {
                        vraCoreInfo5 = new VRACore_Info();
                        Package.Add_Metadata_Module("VRACore", vraCoreInfo5);
                    }
                    vraCoreInfo5.Add_Style_Period(Data);
                    break;

                case Mapped_Fields.Technique:
                    VRACore_Info vraCoreInfo6 = Package.Get_Metadata_Module("VRACore") as VRACore_Info;
                    if (vraCoreInfo6 == null)
                    {
                        vraCoreInfo6 = new VRACore_Info();
                        Package.Add_Metadata_Module("VRACore", vraCoreInfo6);
                    }
                    vraCoreInfo6.Add_Technique(Data);
                    break;
            }
        }
        /// <summary> Appends this bibliographic description information as MODS to the StringBuilder object </summary>
        /// <param name="Results">StringBuilder to add this XML to </param>
        /// <param name="VRACoreInfo"> VRA core information to include here </param>
        internal virtual void Add_MODS(TextWriter Results, VRACore_Info VRACoreInfo)
        {
            // Start the MODS section
            Results.Write("<mods:mods>\r\n");

            // Add the abstracts
            if (abstracts != null)
            {
                foreach (Abstract_Info thisAbstract in abstracts)
                {
                    thisAbstract.Add_MODS(Results);
                }
            }

            // Add the classifications
            if (classifications != null)
            {
                foreach (Classification_Info thisClassification in classifications)
                {
                    thisClassification.Add_MODS(Results);
                }
            }

            // Add the rights
            accessCondition.Add_MODS(Results);

            // Add the genres
            if (genres != null)
            {
                foreach (Genre_Info thisGenre in genres)
                {
                    thisGenre.Add_MODS(Results);
                }
            }

            // Add the identifiers
            if (identifiers != null)
            {
                foreach (Identifier_Info thisIdentifier in identifiers)
                {
                    thisIdentifier.Add_MODS(Results);
                }
            }

            // Add the languages
            if (languages != null)
            {
                foreach (Language_Info thisLanguage in languages)
                {
                    thisLanguage.Add_MODS(Results);
                }
            }

            // Write the location
            if (locationInfo != null)
            {
                locationInfo.Add_MODS(Results);
            }

            write_all_names(Results);

            // Add the notes
            if (notes != null)
            {
                foreach (Note_Info thisNote in notes)
                {
                    thisNote.Add_MODS(Results);
                }
            }

            ModsOriginInfo.Add_MODS(Results);

            //// Add the physical description of this resource
            //if (physicalDesc.hasData)
            //{
            //    physicalDesc.Add_MODS(results);
            //}

            // Write the record information
            if (recordInfo.hasData)
            {
                recordInfo.Add_MODS(Results);
            }

            // Write description of the related, original resource
            if (originalPhysicalDesc.hasData)
            {
                Results.Write("<mods:relatedItem type=\"original\">\r\n");
                originalPhysicalDesc.Add_MODS(Results);
                Results.Write("</mods:relatedItem>\r\n");
            }

            // Write the volume and issue and edition, if they exist
            if (((seriesPartInfo != null) && (seriesPartInfo.hasData)) || ((seriesTitle != null) && (seriesTitle.Title.Length > 0)))
            {
                Results.Write("<mods:relatedItem type=\"series\">\r\n");

                // Write the series title
                if ((seriesTitle != null) && (seriesTitle.Title.Length > 0))
                {
                    seriesTitle.Add_MODS(Results);
                }

                if ((seriesPartInfo != null) && (seriesPartInfo.hasData))
                {
                    seriesPartInfo.Add_MODS(Results);
                }
                Results.Write("</mods:relatedItem>\r\n");
            }

            // Add any additional related items
            if (relatedItems != null)
            {
                foreach (Related_Item_Info relatedItem in relatedItems)
                {
                    relatedItem.Add_MODS(Results);
                }
            }

            // Add the subjects
            if (subjects != null)
            {
                foreach (Subject_Info thisSubject in subjects)
                {
                    thisSubject.Add_MODS(Results);
                }
            }

            if ( TableOfContents_Count > 0 )
            {
                foreach (TableOfContents_Info thisToc in TableOfContents)
                {
                    if (String.IsNullOrEmpty(thisToc.Text))
                        continue;

                    if (!String.IsNullOrEmpty(thisToc.DisplayLabel))
                    {
                        Results.Write("<mods:tableOfContents type=\"original catalog\" displayLabel=\"" + Convert_String_To_XML_Safe(thisToc.DisplayLabel) + "\">" + Convert_String_To_XML_Safe(thisToc.Text) + "</mods:tableOfContents>\r\n");
                    }
                    else
                    {
                        Results.Write("<mods:tableOfContents type=\"original catalog\">" + Convert_String_To_XML_Safe(thisToc.Text) + "</mods:tableOfContents>\r\n");
                    }
                }
            }

            // Write the target audiences
            if (targetAudiences != null)
            {
                foreach (TargetAudience_Info thisAudience in targetAudiences)
                {
                    thisAudience.Add_MODS(Results);
                }
            }

            // Write the main title
            if (mainTitle.Title.Length > 0)
                mainTitle.Add_MODS(Results);

            // Write all the other titles
            if (otherTitles != null)
            {
                foreach (Title_Info otherTitle in otherTitles)
                {
                    if (otherTitle.Title.Length > 0)
                    {
                        otherTitle.Add_MODS(Results);
                    }
                }
            }

            // Write the resource type
            type.Add_MODS_MODS(Results);

            // End the MODS section
            Results.Write("</mods:mods>\r\n");
        }
 /// <summary> Appends this bibliographic description information as MODS to the StringBuilder object </summary>
 /// <param name="Results">StringBuilder to add this XML to </param>
 /// <param name="VraCoreInfo"> MODS can also contain the VRA core as an internal extension schema </param>
 internal override void Add_MODS(TextWriter Results, VRACore_Info VraCoreInfo)
 {
     // Set some values
     XML_Node_Base_Type.Reset_User_ID_Index();
     if (Source != null)
     {
         recordInfo.Record_Content_Source = Source.Statement;
     }
     if (BibID.Length > 0)
     {
         if ((recordInfo.Main_Record_Identifier.Identifier.Length != 0) && (recordInfo.Main_Record_Identifier.Type.ToLower() != "ufdc") && (recordInfo.Main_Record_Identifier.Type.ToLower() != "dloc") && (recordInfo.Main_Record_Identifier.Type.ToLower() != "sobekcm"))
         {
             Add_Identifier(recordInfo.Main_Record_Identifier.Identifier, recordInfo.Main_Record_Identifier.Type);
         }
         recordInfo.Main_Record_Identifier.Type = "sobekcm";
         recordInfo.Main_Record_Identifier.Identifier = BibID + "_" + VID;
         if (VID == "*****")
             recordInfo.Main_Record_Identifier.Identifier = BibID;
     }
     if (publishers != null)
     {
         foreach (Publisher_Info thisPublisher in publishers)
         {
             ModsOriginInfo.Add_Publisher(thisPublisher.Name);
         }
     }
     base.Add_MODS(Results, VraCoreInfo);
 }
        /// <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)
        {
            // Ensure this metadata module extension exists
            VRACore_Info vraInfo = Return_Package.Get_Metadata_Module(GlobalVar.VRACORE_METADATA_MODULE_KEY) as VRACore_Info;
            if (vraInfo == null)
            {
                vraInfo = new VRACore_Info();
                Return_Package.Add_Metadata_Module(GlobalVar.VRACORE_METADATA_MODULE_KEY, vraInfo);
            }

            // Loop through reading each XML node
            do
            {
                // If this is the end of this section, return
                if ((Input_XmlReader.NodeType == XmlNodeType.EndElement) && ((Input_XmlReader.Name == "METS:mdWrap") || (Input_XmlReader.Name == "mdWrap")))
                    return true;

                // get the right division information based on node type
                if (Input_XmlReader.NodeType == XmlNodeType.Element)
                {
                    string name = Input_XmlReader.Name.ToLower();
                    if (name.IndexOf("vra:") == 0)
                        name = name.Substring(4);

                    switch (name)
                    {
                        case "culturalcontext":
                            Input_XmlReader.Read();
                            if (Input_XmlReader.NodeType == XmlNodeType.Text)
                            {
                                if (Input_XmlReader.Value.Length > 0)
                                    vraInfo.Add_Cultural_Context(Input_XmlReader.Value);
                            }
                            break;

                        case "inscription":
                            Input_XmlReader.Read();
                            if (Input_XmlReader.NodeType == XmlNodeType.Text)
                            {
                                if (Input_XmlReader.Value.Length > 0)
                                    vraInfo.Add_Inscription(Input_XmlReader.Value);
                            }
                            break;

                        case "material":
                            string type = String.Empty;
                            if (Input_XmlReader.HasAttributes)
                            {
                                if (Input_XmlReader.MoveToAttribute("type"))
                                    type = Input_XmlReader.Value;
                            }
                            Input_XmlReader.Read();
                            if (Input_XmlReader.NodeType == XmlNodeType.Text)
                            {
                                if (Input_XmlReader.Value.Length > 0)
                                    vraInfo.Add_Material(Input_XmlReader.Value, type);
                            }
                            break;

                        case "measurements":
                            string units = String.Empty;
                            if (Input_XmlReader.HasAttributes)
                            {
                                if (Input_XmlReader.MoveToAttribute("unit"))
                                    units = Input_XmlReader.Value;
                            }
                            Input_XmlReader.Read();
                            if (Input_XmlReader.NodeType == XmlNodeType.Text)
                            {
                                if (Input_XmlReader.Value.Length > 0)
                                    vraInfo.Add_Measurement(Input_XmlReader.Value, units);
                            }
                            break;

                        case "stateedition":
                            Input_XmlReader.Read();
                            if (Input_XmlReader.NodeType == XmlNodeType.Text)
                            {
                                if (Input_XmlReader.Value.Length > 0)
                                    vraInfo.Add_State_Edition(Input_XmlReader.Value);
                            }
                            break;

                        case "styleperiod":
                            Input_XmlReader.Read();
                            if (Input_XmlReader.NodeType == XmlNodeType.Text)
                            {
                                if (Input_XmlReader.Value.Length > 0)
                                    vraInfo.Add_Style_Period(Input_XmlReader.Value);
                            }
                            break;

                        case "technique":
                            Input_XmlReader.Read();
                            if (Input_XmlReader.NodeType == XmlNodeType.Text)
                            {
                                if (Input_XmlReader.Value.Length > 0)
                                    vraInfo.Add_Technique(Input_XmlReader.Value);
                            }
                            break;
                    }
                }
            } while (Input_XmlReader.Read());

            return true;
        }
        /// <summary> Adds a bit of data to a bibliographic package using the mapping </summary>
        /// <param name="Package">Bibliographic package to receive the data</param>
        /// <param name="Data">Text of the data</param>
        /// <param name="Field">Mapped field</param>
        /// <returns> TRUE if the field was mapped, FALSE if there was data and no mapping was found </returns>
        public bool Add_Data(SobekCM_Item Package, string Data, string Field)
        {
            // If no field listed, just skip (but not a mapping error, so return TRUE)
            if (String.IsNullOrEmpty(Field))
                return true;

            // If no data listed, just skip (but not a mapping error, so return TRUE)
            if (String.IsNullOrWhiteSpace(Data))
                return true;

            // Trim the data
            Data = Data.Trim();

            // Normalize the field name
            string correctName = Field.ToUpper().Replace("#", "").Replace(" ", "").Replace(".", "").Replace(":", "").Replace("\\", "").Replace("/", "").Replace(")", "").Replace("(", "").Trim();
            if (correctName.Length == 0)
            {
                correctName = "None";
            }
            else
            {
                // Find the first number
                int charIndex = 0;
                while ((charIndex < correctName.Length) && (!Char.IsNumber(correctName[charIndex])))
                {
                    charIndex++;
                }

                // If the index stopped before the end (that is, it found a number),
                // trim the number of the column name
                if ((charIndex < correctName.Length) && (charIndex > 0))
                {
                    correctName = correctName.Substring(0, charIndex);
                }

                // If it was all numbers, just assign NONE
                if (charIndex == 0)
                {
                    correctName = "None";
                }
            }

            // Everything depends on the field which is mapped
            switch (correctName)
            {
                case "NONE":
                    // Do nothing, since no mapping exists
                    return true;

                case "ABSTRACT":
                case "SUMMARY":
                    Package.Bib_Info.Add_Abstract(Data, "en");
                    return true;

                case "ACCESSION":
                case "ACCESSIONNUMBER":
                    Package.Bib_Info.Add_Identifier(Data, "Accession Number");
                    return true;

                case "ALTERNATETITLE":
                case "ALTTITLE":
                case "TITLEVARIANT":
                    Package.Bib_Info.Add_Other_Title(Data, Title_Type_Enum.Alternative);
                    return true;

                case "ALTERNATETITLELANGUAGE":
                case "ALTTITLELANGUAGE":
                    List<Title_Info> otherTitles = Package.Bib_Info.Other_Titles.Where(ThisTitle => ThisTitle.Title_Type == Title_Type_Enum.Alternative).ToList();
                    if (otherTitles.Count > 0)
                    {
                        otherTitles[otherTitles.Count - 1].Language = Data;
                    }
                    return true;

                case "TITLETRANSLATION":
                case "TRANSLATEDTITLE":
                    Package.Bib_Info.Add_Other_Title(Data, Title_Type_Enum.Translated);
                    return true;

                case "ATTRIBUTION":
                    Package.Bib_Info.Add_Note(Data, Note_Type_Enum.Funding);
                    return true;

                case "COLLECTION":
                case "COLLECTIONCODE":
                case "AGGREGATION":
                case "AGGREGATIONCODE":
                case "SUBCOLLECTION":
                case "SUBCOLLECTIONS":
                    Package.Behaviors.Add_Aggregation(Data.ToUpper());
                    return true;

                case "CLASSIFICATION":
                    Package.Bib_Info.Add_Classification(Data);
                    return true;

                case "CLASSIFICATIONTYPE":
                case "CLASSIFICATIONAUTHORITY":
                    if (Package.Bib_Info.Classifications_Count > 0)
                    {
                        Package.Bib_Info.Classifications[Package.Bib_Info.Classifications_Count - 1].Authority = Data;
                    }
                    return true;

                case "CONTRIBUTOR":
                case "CONTRIBUTORS":
                    Package.Bib_Info.Add_Named_Entity(new Name_Info(Data, "contributor"));
                    return true;

                case "CREATOR":
                case "CREATORS":
                case "AUTHOR":
                    // Ensure it doesn't already exist
                    if (Package.Bib_Info.Names_Count > 0)
                    {
                        foreach (Name_Info thisName in Package.Bib_Info.Names)
                        {
                            if (String.Compare(thisName.Full_Name, Data, StringComparison.OrdinalIgnoreCase) == 0)
                                return true;
                        }
                    }
                    Package.Bib_Info.Add_Named_Entity(new Name_Info(Data, "creator"));
                    return true;

                case "CREATORPERSONALNAME":

                    // Ensure it doesn't already exist
                    if (Package.Bib_Info.Names_Count > 0)
                    {
                        foreach (Name_Info thisName in Package.Bib_Info.Names)
                        {
                            if (String.Compare(thisName.Full_Name, Data, StringComparison.OrdinalIgnoreCase) == 0)
                                return true;
                        }
                    }

                    Name_Info personalCreator = new Name_Info(Data, "creator");
                    personalCreator.Name_Type = Name_Info_Type_Enum.Personal;
                    Package.Bib_Info.Add_Named_Entity(personalCreator);
                    return true;

                case "CREATORCORPORATENAME":
                    Name_Info corporateCreator = new Name_Info(Data, "creator");
                    corporateCreator.Name_Type = Name_Info_Type_Enum.Corporate;
                    Package.Bib_Info.Add_Named_Entity(corporateCreator);
                    return true;

                case "CREATORLANGUAGE":
                    if (Package.Bib_Info.Names_Count > 0)
                    {
                        Package.Bib_Info.Names[Package.Bib_Info.Names_Count - 1].Description = Data;
                    }
                    return true;

                case "CREATORAFFILIATION":
                case "AUTHORAFFILIATION":
                    if (Package.Bib_Info.Names_Count > 0)
                    {
                        Package.Bib_Info.Names[Package.Bib_Info.Names_Count - 1].Affiliation = Data;
                    }
                    return true;

                case "CREATORDATES":
                case "AUTHORDATES":
                    if (Package.Bib_Info.Names_Count > 0)
                    {
                        Package.Bib_Info.Names[Package.Bib_Info.Names_Count - 1].Dates = Data;
                    }
                    return true;

                case "CREATORFAMILYNAME":
                case "AUTHORFAMILYNAME":
                case "FAMILYNAME":
                    if (Package.Bib_Info.Names_Count > 0)
                    {
                        Name_Info lastNamedEntity = Package.Bib_Info.Names[Package.Bib_Info.Names_Count - 1];
                        if (lastNamedEntity.Family_Name.Length == 0)
                            lastNamedEntity.Family_Name = Data;
                        else
                        {
                            Name_Info newNameEntity = new Name_Info { Family_Name = Data };
                            Package.Bib_Info.Add_Named_Entity(newNameEntity);
                        }
                    }
                    else
                    {
                        Name_Info newNameEntity = new Name_Info { Family_Name = Data };
                        Package.Bib_Info.Add_Named_Entity(newNameEntity);
                    }
                    return true;

                case "CREATORGIVENNAME":
                case "AUTHORGIVENNAME":
                case "GIVENNAME":
                    if (Package.Bib_Info.Names_Count > 0)
                    {
                        Name_Info lastNamedEntity = Package.Bib_Info.Names[Package.Bib_Info.Names_Count - 1];
                        if (lastNamedEntity.Given_Name.Length == 0)
                            lastNamedEntity.Given_Name = Data;
                        else
                        {
                            Name_Info newNameEntity = new Name_Info { Given_Name = Data };
                            Package.Bib_Info.Add_Named_Entity(newNameEntity);
                        }
                    }
                    else
                    {
                        Name_Info newNameEntity = new Name_Info { Given_Name = Data };
                        Package.Bib_Info.Add_Named_Entity(newNameEntity);
                    }
                    return true;

                case "CREATORROLE":
                case "AUTHORROLE":
                case "CREATORROLES":
                case "AUTHORROLES":
                case "CREATORATTRIBUTION":
                    if (Package.Bib_Info.Names_Count > 0)
                    {
                        Name_Info thisCreator = Package.Bib_Info.Names[Package.Bib_Info.Names_Count - 1];
                        if ((thisCreator.Roles.Count == 1) && ((thisCreator.Roles[0].Role == "creator") || (thisCreator.Roles[1].Role == "contributor")))
                            thisCreator.Roles.Clear();
                        Package.Bib_Info.Names[Package.Bib_Info.Names_Count - 1].Add_Role(Data);
                    }
                    return true;

                case "CULTURALCONTEXT":
                case "CULTURE":
                    VRACore_Info vraCoreInfo = Package.Get_Metadata_Module("VRACore") as VRACore_Info;
                    if (vraCoreInfo == null)
                    {
                        vraCoreInfo = new VRACore_Info();
                        Package.Add_Metadata_Module("VRACore", vraCoreInfo);
                    }
                    vraCoreInfo.Add_Cultural_Context(Data);
                    return true;

                case "DONOR":
                    Package.Bib_Info.Donor.Full_Name = Data;
                    return true;

                case "GENRE":
                    Package.Bib_Info.Add_Genre(Data);
                    return true;

                case "GENREAUTHORITY":
                    if (Package.Bib_Info.Genres_Count > 0)
                    {
                        Package.Bib_Info.Genres[Package.Bib_Info.Genres_Count - 1].Authority = Data;
                    }
                    return true;

                case "HOLDINGLOCATIONCODE":
                case "HOLDINGCODE":
                    Package.Bib_Info.Location.Holding_Code = Data;
                    return true;

                case "HOLDINGLOCATIONSTATEMENT":
                case "HOLDINGSTATEMENT":
                case "CONTRIBUTINGINSTITUTION":
                case "LOCATIONCURRENT":
                case "LOCATIONCURRENTSITE":
                case "LOCATIONCURRENTREPOSITORY":
                    Package.Bib_Info.Location.Holding_Name = Data;
                    return true;

                case "LOCATIONFORMERSITE":
                    Package.Bib_Info.Add_Note(Data, Note_Type_Enum.OriginalLocation);
                    return true;

                case "IDENTIFIER":
                case "IDNUMBERFORMERREPOSITORY":
                case "IDNUMBERCURRENTREPOSITORY":
                case "IDNUMBERCURRENTRESPOSITORY":
                    Package.Bib_Info.Add_Identifier(Data);
                    return true;

                case "IDENTIFIERTYPE":
                    if (Package.Bib_Info.Identifiers_Count > 0)
                    {
                        Package.Bib_Info.Identifiers[Package.Bib_Info.Identifiers_Count - 1].Type = Data;
                    }
                    return true;

                case "INSCRIPTION":
                    VRACore_Info vraCoreInfo8 = Package.Get_Metadata_Module("VRACore") as VRACore_Info;
                    if (vraCoreInfo8 == null)
                    {
                        vraCoreInfo8 = new VRACore_Info();
                        Package.Add_Metadata_Module("VRACore", vraCoreInfo8);
                    }
                    vraCoreInfo8.Add_Inscription(Data);
                    return true;

                case "LANGUAGE":
                    Package.Bib_Info.Add_Language(Data);
                    return true;

                case "PUBLISHER":
                case "PUBLISHERS":
                    Package.Bib_Info.Add_Publisher(Data);
                    return true;

                case "PLACEOFPUBLICATION":
                case "PUBLICATIONPLACE":
                case "PUBPLACE":
                case "PUBLICATIONLOCATION":
                case "PLACE":
                    Package.Bib_Info.Origin_Info.Add_Place(Data);
                    return true;

                case "RELATEDURLLABEL":
                    Package.Bib_Info.Location.Other_URL_Display_Label = Data;
                    return true;

                case "RELATEDURL":
                case "RELATEDURLLINK":
                    Package.Bib_Info.Location.Other_URL = Data;
                    return true;

                case "RELATEDURLNOTE":
                case "RELATEDURLNOTES":
                    Package.Bib_Info.Location.Other_URL_Note = Data;
                    return true;

                case "SOURCEINSTITUTIONCODE":
                case "SOURCECODE":
                    Package.Bib_Info.Source.Code = Data;
                    return true;

                case "SOURCEINSTITUTIONSTATEMENT":
                case "SOURCESTATEMENT":
                case "SOURCE":
                    Package.Bib_Info.Source.Statement = Data;
                    return true;

                case "SUBJECTKEYWORD":
                case "SUBJECTKEYWORDS":
                case "SUBJECT":
                case "SUBJECTS":
                case "KEYWORDS":
                    Package.Bib_Info.Add_Subject(Data, String.Empty);
                    return true;

                case "SUBJECTKEYWORDAUTHORITY":
                case "SUBJECTAUTHORITY":
                    if (Package.Bib_Info.Subjects_Count > 0)
                    {
                        Package.Bib_Info.Subjects[Package.Bib_Info.Subjects_Count - 1].Authority = Data;
                    }
                    return true;

                case "BIBID":
                case "BIB":
                case "BIBLIOGRAHPICID":
                case "BIBLIOGRAPHICIDENTIFIER":
                    Package.Bib_Info.BibID = Data.ToUpper();
                    return true;

                case "VID":
                    Package.Bib_Info.VID = Data.PadLeft(5, '0');
                    return true;

                case "DATE":
                case "DATECREATION":
                    try
                    {
                        // first, try converting the string value to a date object
                        Package.Bib_Info.Origin_Info.Date_Issued = Convert.ToDateTime(Data).ToShortDateString();
                    }
                    catch
                    {
                        try
                        {
                            // second, try converting the string value to an integer
                            Package.Bib_Info.Origin_Info.Date_Issued = Convert.ToInt32(Data).ToString();
                        }
                        catch
                        {
                            Package.Bib_Info.Origin_Info.Date_Issued = Data;
                        }
                    }
                    return true;

                case "DATEBEGINNING":
                    Package.Bib_Info.Origin_Info.MARC_DateIssued_Start = Data;
                    return true;

                case "DATECOMPLETION":
                    Package.Bib_Info.Origin_Info.MARC_DateIssued_End = Data;
                    return true;

                case "EDITION":
                    Package.Bib_Info.Origin_Info.Edition = Data;
                    return true;

                case "FORMAT":
                case "PHYSICALDESCRIPTION":
                case "EXTENT":
                    Package.Bib_Info.Original_Description.Extent = Data;
                    return true;

                case "NOTE":
                case "NOTES":
                case "DESCRIPTION":
                    Package.Bib_Info.Add_Note(Data);
                    return true;

                case "PROVENANCE":
                    Package.Bib_Info.Add_Note(Data, Note_Type_Enum.Acquisition);
                    return true;

                case "USAGESTATEMENT":
                    Package.Bib_Info.Add_Note(Data, Note_Type_Enum.CitationReference);
                    return true;

                case "CONTACT":
                case "CONTACTNOTES":
                case "CONTACTINFORMATION":
                    Package.Bib_Info.Add_Note(Data, Note_Type_Enum.NONE, "Contact");
                    return true;

                case "RIGHTS":
                    Package.Bib_Info.Access_Condition.Text = Data;
                    return true;

                case "BIBSERIESTITLE":
                case "SERIESTITLE":
                case "TITLESERIES":
                    Package.Bib_Info.SeriesTitle.Title = Data;
                    Package.Behaviors.GroupTitle = Data;
                    return true;

                case "MATERIALTYPE":
                case "TYPE":
                case "RECORDTYPE":
                    string upper_data = Data.ToUpper();
                    if (upper_data.IndexOf("NEWSPAPER", StringComparison.Ordinal) >= 0)
                    {
                        Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Newspaper;
                        return true;
                    }
                    if ((upper_data.IndexOf("MONOGRAPH", StringComparison.Ordinal) >= 0) || (upper_data.IndexOf("BOOK", StringComparison.Ordinal) >= 0))
                    {
                        Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Book;
                        return true;
                    }
                    if (upper_data.IndexOf("SERIAL", StringComparison.Ordinal) >= 0)
                    {
                        Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Serial;
                        return true;
                    }
                    if (upper_data.IndexOf("AERIAL", StringComparison.Ordinal) >= 0)
                    {
                        Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Aerial;
                        if (Package.Bib_Info.Original_Description.Extent.Length == 0)
                            Package.Bib_Info.Original_Description.Extent = "Aerial Photograph";
                        return true;
                    }
                    if (upper_data.IndexOf("PHOTO", StringComparison.Ordinal) >= 0)
                    {
                        Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Photograph;
                        return true;
                    }
                    if (upper_data.IndexOf("POSTCARD", StringComparison.Ordinal) >= 0)
                    {
                        Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Photograph;
                        if (Package.Bib_Info.Original_Description.Extent.Length == 0)
                            Package.Bib_Info.Original_Description.Extent = "Postcard";
                        return true;
                    }
                    if (upper_data.IndexOf("MAP", StringComparison.Ordinal) >= 0)
                    {
                        Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Map;
                        return true;
                    }
                    if (upper_data.IndexOf("TEXT", StringComparison.Ordinal) >= 0)
                    {
                        Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Book;
                        return true;
                    }
                    if (upper_data.IndexOf("AUDIO", StringComparison.Ordinal) >= 0)
                    {
                        Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Audio;
                        return true;
                    }
                    if (upper_data.IndexOf("VIDEO", StringComparison.Ordinal) >= 0)
                    {
                        Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Video;
                        return true;
                    }
                    if ((upper_data.IndexOf("ARCHIVE", StringComparison.Ordinal) >= 0) || (upper_data.IndexOf("ARCHIVAL", StringComparison.Ordinal) >= 0))
                    {
                        Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Archival;
                        return true;
                    }
                    if (upper_data.IndexOf("ARTIFACT", StringComparison.Ordinal) >= 0)
                    {
                        Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Artifact;
                        return true;
                    }
                    if (upper_data.IndexOf("IMAGE", StringComparison.Ordinal) >= 0)
                    {
                        Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Photograph;
                        return true;
                    }

                    // if there was no match, set type to "UNDETERMINED"
                    Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.UNKNOWN;

                    if (Package.Bib_Info.Original_Description.Extent.Length == 0)
                        Package.Bib_Info.Original_Description.Extent = "Undetermined";
                    return true;

                case "BIBUNIFORMTITLE":
                case "UNIFORMTITLE":
                    Package.Bib_Info.Add_Other_Title(Data, Title_Type_Enum.Uniform);
                    Package.Behaviors.GroupTitle = Data;
                    return true;

                case "VOLUMETITLE":
                case "TITLE":
                    if (String.IsNullOrEmpty(Package.Bib_Info.Main_Title.Title))
                        Package.Bib_Info.Main_Title.Title = Data;
                    else
                        Package.Bib_Info.Add_Other_Title(Data, Title_Type_Enum.Alternative);
                    return true;

                case "TITLELANGUAGE":
                    Package.Bib_Info.Main_Title.Language = Data;
                    return true;

                case "ALEPH":
                    Package.Bib_Info.Add_Identifier(Data, "ALEPH");
                    return true;

                case "OCLC":
                    Package.Bib_Info.Add_Identifier(Data, "OCLC");
                    return true;

                case "LCCN":
                    Package.Bib_Info.Add_Identifier(Data, "LCCN");
                    return true;

                case "ISBN":
                    Package.Bib_Info.Add_Identifier(Data, "ISBN");
                    return true;

                case "ISSN":
                    Package.Bib_Info.Add_Identifier(Data, "ISSN");
                    return true;

                case "SUBTITLE":
                    Package.Bib_Info.Main_Title.Subtitle = Data;
                    return true;

                case "VOLUME":
                    Package.Bib_Info.Series_Part_Info.Enum1 = Data;
                    Package.Behaviors.Serial_Info.Add_Hierarchy(Package.Behaviors.Serial_Info.Count + 1, 1, Data);
                    return true;

                case "ISSUE":
                    if (Package.Bib_Info.Series_Part_Info.Enum1.Length == 0)
                    {
                        Package.Bib_Info.Series_Part_Info.Enum1 = Data;
                    }
                    else
                    {
                        Package.Bib_Info.Series_Part_Info.Enum2 = Data;
                    }
                    Package.Behaviors.Serial_Info.Add_Hierarchy(Package.Behaviors.Serial_Info.Count + 1, 1, Data);
                    return true;

                case "SECTION":
                    if (Package.Bib_Info.Series_Part_Info.Enum2.Length == 0)
                    {
                        if (Package.Bib_Info.Series_Part_Info.Enum1.Length == 0)
                            Package.Bib_Info.Series_Part_Info.Enum1 = Data;
                        else
                            Package.Bib_Info.Series_Part_Info.Enum2 = Data;
                    }
                    else
                    {
                        Package.Bib_Info.Series_Part_Info.Enum3 = Data;
                    }
                    Package.Behaviors.Serial_Info.Add_Hierarchy(Package.Behaviors.Serial_Info.Count + 1, 1, Data);
                    // Do nothing for now
                    return true;

                case "YEAR":
                    Package.Bib_Info.Series_Part_Info.Year = Data;

                    if (Data.Length == 1)
                        year = "0" + Data;
                    else
                        year = Data;
                    build_date_string(Package);

                    return true;

                case "MONTH":
                    Package.Bib_Info.Series_Part_Info.Month = Data;
                    month = Data;
                    build_date_string(Package);

                    return true;

                case "DAY":
                    Package.Bib_Info.Series_Part_Info.Day = Data;
                    day = Data;
                    build_date_string(Package);

                    return true;

                case "COORDINATES":
                    GeoSpatial_Information geoInfo = Package.Get_Metadata_Module(GlobalVar.GEOSPATIAL_METADATA_MODULE_KEY) as GeoSpatial_Information;
                    if (geoInfo == null)
                    {
                        geoInfo = new GeoSpatial_Information();
                        Package.Add_Metadata_Module(GlobalVar.GEOSPATIAL_METADATA_MODULE_KEY, geoInfo);
                    }
                    string[] coordinates = Data.Split(", ;".ToCharArray());
                    try
                    {
                        if (coordinates.Length == 2)
                        {
                            geoInfo.Add_Point(Convert.ToDouble(coordinates[0]), Convert.ToDouble(coordinates[1]), String.Empty);
                        }
                        else
                        {
                            coordinates = Data.Split(",;".ToCharArray());
                            if (coordinates.Length == 2)
                            {
                                geoInfo.Add_Point(Convert.ToDouble(coordinates[0]), Convert.ToDouble(coordinates[1]), String.Empty);
                            }
                        }
                    }
                    catch
                    {
                    }
                    return true;

                case "LATITUDE":
                case "COORDINATESLATITUDE":
                    GeoSpatial_Information geoInfo2 = Package.Get_Metadata_Module(GlobalVar.GEOSPATIAL_METADATA_MODULE_KEY) as GeoSpatial_Information;
                    if (geoInfo2 == null)
                    {
                        geoInfo2 = new GeoSpatial_Information();
                        Package.Add_Metadata_Module(GlobalVar.GEOSPATIAL_METADATA_MODULE_KEY, geoInfo2);
                    }
                    try
                    {
                        if (geoInfo2.Point_Count == 0)
                            geoInfo2.Add_Point(Convert.ToDouble(Data), 0, String.Empty);
                        else
                            geoInfo2.Points[0].Latitude = Convert.ToDouble(Data);
                    }
                    catch
                    {
                    }
                    return true;

                case "LONGITUDE":
                case "COORDINATESLONGITUDE":
                    GeoSpatial_Information geoInfo3 = Package.Get_Metadata_Module(GlobalVar.GEOSPATIAL_METADATA_MODULE_KEY) as GeoSpatial_Information;
                    if (geoInfo3 == null)
                    {
                        geoInfo3 = new GeoSpatial_Information();
                        Package.Add_Metadata_Module(GlobalVar.GEOSPATIAL_METADATA_MODULE_KEY, geoInfo3);
                    }
                    try
                    {
                        if (geoInfo3.Point_Count == 0)
                            geoInfo3.Add_Point(0, Convert.ToDouble(Data.Replace("°", "")), String.Empty);
                        else
                            geoInfo3.Points[0].Longitude = Convert.ToDouble(Data.Replace("°", ""));
                    }
                    catch
                    {
                    }
                    return true;

                case "PROJECTION":
                case "MAPPROJECTION":
                    Guarantee_Cartographics(Package).Projection = Data;
                    return true;

                case "SCALE":
                case "MAPSCALE":
                    Guarantee_Cartographics(Package).Scale = Data;
                    return true;

                //case Mapped_Fields.Spatial_Coverage:
                //    Package.Bib_Info.Hierarchical_Spatials[0].Area = Data;
                //    return true;

                case "ICON/WORDMARK":
                case "ICON/WORDMARKS":
                case "ICON":
                case "ICONS":
                case "WORDMARK":
                case "WORDMARKS":
                    Package.Behaviors.Add_Wordmark(Data);
                    return true;

                case "WEBSKINS":
                case "WEBSKIN":
                case "SKINS":
                case "SKIN":
                    Package.Behaviors.Add_Web_Skin(Data);
                    return true;

                case "TEMPORALCOVERAGE":
                case "TEMPORAL":
                case "TIMEPERIOD":
                    Package.Bib_Info.Add_Temporal_Subject(-1, -1, Data);
                    return true;

                case "COVERAGE":
                    // Was this a number.. likely, a year?
                    int possible_year;
                    if (( Data.Length >= 4 ) && ( Int32.TryParse(Data.Substring(0,4), out possible_year)))
                        Package.Bib_Info.Add_Temporal_Subject(-1, -1, Data);
                    else
                        Package.Bib_Info.Add_Spatial_Subject(Data);
                    return true;

                case "AFFILIATIONUNIVERSITY":
                case "UNIVERSITY":
                    Guarantee_Affiliation_Collection(Package);
                    Package.Bib_Info.Affiliations[0].University = Data;
                    return true;

                case "AFFILIATIONCAMPUS":
                case "CAMPUS":
                    Guarantee_Affiliation_Collection(Package);
                    Package.Bib_Info.Affiliations[0].Campus = Data;
                    return true;

                case "AFFILIATIONCOLLEGE":
                case "COLLEGE":
                    Guarantee_Affiliation_Collection(Package);
                    Package.Bib_Info.Affiliations[0].College = Data;
                    return true;

                case "AFFILIATIONUNIT":
                case "UNIT":
                    Guarantee_Affiliation_Collection(Package);
                    Package.Bib_Info.Affiliations[0].Unit = Data;
                    return true;

                case "AFFILIATIONDEPARTMENT":
                case "DEPARTMENT":
                    Guarantee_Affiliation_Collection(Package);
                    Package.Bib_Info.Affiliations[0].Department = Data;
                    return true;

                case "AFFILIATIONINSTITUTE":
                case "INSTITUTE":
                    Guarantee_Affiliation_Collection(Package);
                    Package.Bib_Info.Affiliations[0].Institute = Data;
                    return true;

                case "AFFILIATIONCENTER":
                case "CENTER":
                    Guarantee_Affiliation_Collection(Package);
                    Package.Bib_Info.Affiliations[0].Center = Data;
                    return true;

                case "AFFILIATIONSECTION":
                    Guarantee_Affiliation_Collection(Package);
                    Package.Bib_Info.Affiliations[0].Section = Data;
                    return true;

                case "AFFILIATIONSUBSECTION":
                    Guarantee_Affiliation_Collection(Package);
                    Package.Bib_Info.Affiliations[0].SubSection = Data;
                    return true;

                case "GEOGRAPHYCONTINENT":
                case "CONTINENT":
                    Guarantee_Hierarchical_Spatial(Package).Continent = Data;
                    return true;

                case "GEOGRAPHYCOUNTRY":
                case "COUNTRY":
                    Guarantee_Hierarchical_Spatial(Package).Country = Data;
                    return true;

                case "GEOGRAPHYPROVINCE":
                case "PROVINCE":
                    Guarantee_Hierarchical_Spatial(Package).Province = Data;
                    return true;

                case "GEOGRAPHYREGION":
                case "REGION":
                    Guarantee_Hierarchical_Spatial(Package).Region = Data;
                    return true;

                case "GEOGRAPHYSTATE":
                case "STATE":
                    Guarantee_Hierarchical_Spatial(Package).State = Data;
                    return true;

                case "GEOGRAPHYTERRITORY":
                case "TERRITORY":
                    Guarantee_Hierarchical_Spatial(Package).Territory = Data;
                    return true;

                case "GEOGRAPHYCOUNTY":
                case "COUNTY":
                    Guarantee_Hierarchical_Spatial(Package).County = Data;
                    return true;

                case "GEOGRAPHYCITY":
                case "CITY":
                    Guarantee_Hierarchical_Spatial(Package).City = Data;
                    return true;

                case "GEOGRAPHYISLAND":
                case "ISLAND":
                    Guarantee_Hierarchical_Spatial(Package).Island = Data;
                    return true;

                case "GEOGRAPHYAREA":
                case "AREA":
                    Guarantee_Hierarchical_Spatial(Package).Area = Data;
                    return true;

                case "LOCATION":
                    Package.Bib_Info.Add_Spatial_Subject(Data);
                    return true;

                case "COPYRIGHTDATE":
                case "COPYRIGHT":
                    Package.Bib_Info.Origin_Info.Date_Copyrighted = Data;
                    return true;

                case "EADNAME":
                case "EAD":
                    Package.Bib_Info.Location.EAD_Name = Data;
                    return true;

                case "EADURL":
                    Package.Bib_Info.Location.EAD_URL = Data;
                    return true;

                case "COMMENTS":
                case "INTERNALCOMMENTS":
                case "INTERNAL":
                    Package.Tracking.Internal_Comments = Data;
                    return true;

                case "CONTAINERBOX":
                case "BOX":
                    Package.Bib_Info.Add_Container("Box", Data, 1);
                    return true;

                case "CONTAINERDIVIDER":
                case "DIVIDER":
                    Package.Bib_Info.Add_Container("Divider", Data, 2);
                    return true;

                case "CONTAINERFOLDER":
                case "FOLDER":
                    Package.Bib_Info.Add_Container("Folder", Data, 3);
                    return true;

                case "VIEWERS":
                case "VIEWER":
                    Package.Behaviors.Add_View(Data);
                    return true;

                case "VISIBILITY":
                    switch (Data.ToUpper())
                    {
                        case "DARK":
                            Package.Behaviors.Dark_Flag = true;
                            Package.Behaviors.IP_Restriction_Membership = -1;
                            return true;

                        case "PRIVATE":
                            Package.Behaviors.Dark_Flag = false;
                            Package.Behaviors.IP_Restriction_Membership = -1;
                            return true;

                        case "PUBLIC":
                            Package.Behaviors.Dark_Flag = false;
                            Package.Behaviors.IP_Restriction_Membership = 0;
                            return true;

                        case "RESTRICTED":
                            Package.Behaviors.Dark_Flag = false;
                            Package.Behaviors.IP_Restriction_Membership = 1;
                            return true;
                    }
                    return true;

                case "TICKLER":
                    Package.Behaviors.Add_Tickler(Data);
                    return true;

                case "TRACKINGBOX":
                    Package.Tracking.Tracking_Box = Data;
                    return true;

                case "BORNDIGITAL":
                    if (Data.ToUpper().Trim() == "TRUE")
                        Package.Tracking.Born_Digital = true;
                    return true;

                case "MATERIALRECEIVED":
                case "MATERIALRECEIVEDDATE":
                case "MATERIALRECDDATE":
                case "MATERIALRECD":
                    DateTime materialReceivedDate;
                    if (DateTime.TryParse(Data, out materialReceivedDate))
                        Package.Tracking.Material_Received_Date = materialReceivedDate;
                    return true;

                case "MATERIAL":
                case "MATERIALS":
                case "MATERIALMEDIUM":
                    VRACore_Info vraCoreInfo2 = Package.Get_Metadata_Module("VRACore") as VRACore_Info;
                    if (vraCoreInfo2 == null)
                    {
                        vraCoreInfo2 = new VRACore_Info();
                        Package.Add_Metadata_Module("VRACore", vraCoreInfo2);
                    }
                    vraCoreInfo2.Add_Material(Data, "medium");
                    return true;

                case "MATERIALSUPPORT":
                    VRACore_Info vraCoreInfo2b = Package.Get_Metadata_Module("VRACore") as VRACore_Info;
                    if (vraCoreInfo2b == null)
                    {
                        vraCoreInfo2b = new VRACore_Info();
                        Package.Add_Metadata_Module("VRACore", vraCoreInfo2b);
                    }
                    vraCoreInfo2b.Add_Material(Data, "support");
                    return true;

                case "MEASUREMENT":
                case "MEASUREMENTS":
                case "MEASUREMENTDIMENSIONS":
                case "MEASUREMENTSDIMENSIONS":
                case "DIMENSIONS":
                    VRACore_Info vraCoreInfo3 = Package.Get_Metadata_Module("VRACore") as VRACore_Info;
                    if (vraCoreInfo3 == null)
                    {
                        vraCoreInfo3 = new VRACore_Info();
                        Package.Add_Metadata_Module("VRACore", vraCoreInfo3);
                    }
                    if (vraCoreInfo3.Measurement_Count == 0)
                        vraCoreInfo3.Add_Measurement(Data, String.Empty);
                    else
                        vraCoreInfo3.Measurements[0].Measurements = Data;
                    return true;

                case "MEASUREMENTFORMAT":
                case "MEASUREMENTUNITS":
                case "MEASUREMENTSFORMAT":
                case "MEASUREMENTSUNITS":
                    VRACore_Info vraCoreInfo3b = Package.Get_Metadata_Module("VRACore") as VRACore_Info;
                    if (vraCoreInfo3b == null)
                    {
                        vraCoreInfo3b = new VRACore_Info();
                        Package.Add_Metadata_Module("VRACore", vraCoreInfo3b);
                    }
                    if (vraCoreInfo3b.Measurement_Count == 0)
                        vraCoreInfo3b.Add_Measurement(String.Empty, Data);
                    else
                        vraCoreInfo3b.Measurements[0].Units = Data;
                    return true;

                case "STATEEDITION":
                    VRACore_Info vraCoreInfo4 = Package.Get_Metadata_Module("VRACore") as VRACore_Info;
                    if (vraCoreInfo4 == null)
                    {
                        vraCoreInfo4 = new VRACore_Info();
                        Package.Add_Metadata_Module("VRACore", vraCoreInfo4);
                    }
                    vraCoreInfo4.Add_State_Edition(Data);
                    return true;

                case "STYLE":
                case "PERIOD":
                case "STYLEPERIOD":
                    VRACore_Info vraCoreInfo5 = Package.Get_Metadata_Module("VRACore") as VRACore_Info;
                    if (vraCoreInfo5 == null)
                    {
                        vraCoreInfo5 = new VRACore_Info();
                        Package.Add_Metadata_Module("VRACore", vraCoreInfo5);
                    }
                    vraCoreInfo5.Add_Style_Period(Data);
                    return true;

                case "TECHNIQUE":
                    VRACore_Info vraCoreInfo6 = Package.Get_Metadata_Module("VRACore") as VRACore_Info;
                    if (vraCoreInfo6 == null)
                    {
                        vraCoreInfo6 = new VRACore_Info();
                        Package.Add_Metadata_Module("VRACore", vraCoreInfo6);
                    }
                    vraCoreInfo6.Add_Technique(Data);
                    return true;

                case "TARGETAUDIENCE":
                case "AUDIENCE":
                    Package.Bib_Info.Add_Target_Audience(Data);
                    return true;

                default:
                    // No mapping exists and this is a non-known no-mapping
                    return false;
            }
        }