/// <summary> Accepts a simple <see cref="View_Object"/> from the digital resource object and returns
        /// the appropriate item viewer object which extends the <see cref="SobekCM.Library.ItemViewer.Viewers.abstractItemViewer"/>
        /// class for rendering the item to the web via HTML.</summary>
        /// <param name="viewObject"> View object from the digital resource object </param>
        /// <param name="Resource_Type">Resource type often impacts how an item viewer renders</param>
        /// <returns> Genereated item viewer class for rendering the particular view of a digital resource
        /// via HTML. </returns>
        public static abstractItemViewer Get_Viewer(View_Object viewObject, string Resource_Type )
        {
            switch (viewObject.View_Type)
            {
                case View_Enum.ALL_VOLUMES:
                    return new MultiVolumes_ItemViewer();

                case View_Enum.CITATION:
                    return new Citation_ItemViewer();

                case View_Enum.DOWNLOADS:
                    return new Download_ItemViewer();

                case View_Enum.FEATURES:
                    return new Feature_ItemViewer();

                case View_Enum.FLASH:
                    return new Flash_ItemViewer(viewObject.Label, 0);

                case View_Enum.GOOGLE_MAP:
                    return new Google_Map_ItemViewer();

                case View_Enum.HTML:
                    return new HTML_ItemViewer(viewObject.Attributes, viewObject.Label);

                case View_Enum.HTML_MAP:
                    string[] html_map_splitter = viewObject.Attributes.Split(";".ToCharArray());
                    if (html_map_splitter.Length >= 2)
                    {
                        return new HTML_Map_ItemViewer(html_map_splitter[0], html_map_splitter[1], viewObject.Label);
                    }
                    break;

                case View_Enum.JPEG:
                    abstractItemViewer jpegViewer = new JPEG_ItemViewer( viewObject.Attributes );
                    jpegViewer.FileName = viewObject.FileName;
                    return jpegViewer;

                case View_Enum.JPEG2000:
                    abstractItemViewer jpeg2000Viewer = new Aware_JP2_ItemViewer(Resource_Type, viewObject.Attributes);
                    jpeg2000Viewer.FileName = viewObject.FileName;
                    return jpeg2000Viewer;

                case View_Enum.RELATED_IMAGES:
                    return new Related_Images_ItemViewer(viewObject.Label);

                case View_Enum.SEARCH:
                    return new Text_Search_ItemViewer();

                case View_Enum.STREETS:
                    return new Street_ItemViewer();

                case View_Enum.TEXT:
                    abstractItemViewer textViewer = new Text_ItemViewer();
                    textViewer.FileName = viewObject.FileName;
                    return textViewer;

                case View_Enum.TOC:
                    return new TOC_ItemViewer();

                case View_Enum.PDF:
                    return new PDF_ItemViewer(viewObject.FileName);

                case View_Enum.EAD_DESCRIPTION:
                    return new EAD_Description_ItemViewer();

                case View_Enum.EAD_CONTAINER_LIST:
                    return new EAD_Container_List_ItemViewer();

                case View_Enum.PAGE_TURNER:
                    return new GnuBooks_PageTurner_ItemViewer();

                case View_Enum.YOUTUBE_VIDEO:
                    return new YouTube_Embedded_Video_ItemViewer();

                case View_Enum.EMBEDDED_VIDEO:
                    return new EmbeddedVideo_ItemViewer();

                case View_Enum.TRACKING:
                    return new Tracking_ItemViewer();

                case View_Enum.QUALITY_CONTROL:
                    return new QC_ItemViewer();
            }

            return null;
        }
        /// <summary> Accepts a simple <see cref="View_Object"/> from the digital resource object and returns
        /// the appropriate item viewer object which extends the <see cref="SobekCM.Library.ItemViewer.Viewers.abstractItemViewer"/>
        /// class for rendering the item to the web via HTML.</summary>
        /// <param name="viewObject"> View object from the digital resource object </param>
        /// <param name="Resource_Type">Resource type often impacts how an item viewer renders</param>
        /// <param name="Current_Object">Current resource object </param>
        /// <param name="Current_User">Currently session's user </param>
        /// <returns> Genereated item viewer class for rendering the particular view of a digital resource
        /// via HTML. </returns>
        public static abstractItemViewer Get_Viewer(View_Object viewObject, string Resource_Type, SobekCM_Item Current_Object, User_Object Current_User, SobekCM_Navigation_Object Current_Mode )
        {
            switch (viewObject.View_Type)
            {
                case View_Enum.ALL_VOLUMES:
                    return new MultiVolumes_ItemViewer();

                case View_Enum.CITATION:
                    return new Citation_ItemViewer();

                case View_Enum.DOWNLOADS:
                    return new Download_ItemViewer();

                case View_Enum.DATASET_CODEBOOK:
                    return new Dataset_CodeBook_ItemViewer();

                case View_Enum.DATASET_REPORTS:
                    return new Dataset_Reports_ItemViewer();

                case View_Enum.DATASET_VIEWDATA:
                    return new Dataset_ViewData_ItemViewer();

                case View_Enum.EAD_DESCRIPTION:
                    return new EAD_Description_ItemViewer();

                case View_Enum.EAD_CONTAINER_LIST:
                    return new EAD_Container_List_ItemViewer();

                case View_Enum.EMBEDDED_VIDEO:
                    return new EmbeddedVideo_ItemViewer();

                case View_Enum.FEATURES:
                    return new Feature_ItemViewer();

                case View_Enum.FLASH:
                    return new Flash_ItemViewer(viewObject.Label, 0);

                case View_Enum.GOOGLE_COORDINATE_ENTRY:
                    return new Google_Coordinate_Entry_ItemViewer(Current_User, Current_Object, Current_Mode);

                case View_Enum.GOOGLE_MAP:
                    return new Google_Map_ItemViewer();

                case View_Enum.GOOGLE_MAP_BETA:
                    return new Google_Map_ItemViewer_Beta();

                case View_Enum.HTML:
                    return new HTML_ItemViewer(viewObject.Attributes, viewObject.Label);

                case View_Enum.JPEG:
                    abstractItemViewer jpegViewer = new JPEG_ItemViewer( viewObject.Attributes );
                    jpegViewer.FileName = viewObject.FileName;
                    return jpegViewer;

                case View_Enum.JPEG_TEXT_TWO_UP:
                    abstractItemViewer jpegTextViewer = new JPEG_Text_Two_Up_ItemViewer(viewObject.Attributes);
                    jpegTextViewer.FileName = viewObject.FileName;
                    return jpegTextViewer;

                case View_Enum.JPEG2000:
                    if ( SobekCM_Library_Settings.JP2ServerType == "Built-In IIPImage")
                    {
                        abstractItemViewer newJp2Viewer = new JPEG2000_ItemViewer();
                        newJp2Viewer.FileName = viewObject.FileName;
                        return newJp2Viewer;
                    }
                    else if ( SobekCM_Library_Settings.JP2ServerType == "Aware")
                    {
                        abstractItemViewer jpeg2000Viewer = new Aware_JP2_ItemViewer(Resource_Type, viewObject.Attributes, Current_Mode);
                        jpeg2000Viewer.FileName = viewObject.FileName;
                        return jpeg2000Viewer;
                    }
                    return null;
                    break;

                case View_Enum.MANAGE:
                    return new ManageMenu_ItemViewer(Current_Object, Current_User, Current_Mode);

                case View_Enum.PAGE_TURNER:
                        return new GnuBooks_PageTurner_ItemViewer();

                case View_Enum.PDF:
                        return new PDF_ItemViewer(viewObject.FileName);

                case View_Enum.QUALITY_CONTROL:
                        return new QC_ItemViewer(Current_Object, Current_User, Current_Mode);

                case View_Enum.RELATED_IMAGES:
                    return new Related_Images_ItemViewer();

                case View_Enum.SEARCH:
                    return new Text_Search_ItemViewer();

                case View_Enum.STREETS:
                    return new Street_ItemViewer();

                case View_Enum.TEST:
                    return new Test_ItemViewer();

                case View_Enum.TEXT:
                    abstractItemViewer textViewer = new Text_ItemViewer();
                    textViewer.FileName = viewObject.FileName;
                    return textViewer;

                case View_Enum.TOC:
                    return new TOC_ItemViewer();

                case View_Enum.TRACKING:
                    return new Tracking_ItemViewer();

                case View_Enum.TRACKING_SHEET:
                    return new TrackingSheet_ItemViewer(Current_Object, Current_User, Current_Mode);

                case View_Enum.YOUTUBE_VIDEO:
                    return new YouTube_Embedded_Video_ItemViewer();

            }

            return null;
        }