{"id":239557,"date":"2025-01-18T09:15:00","date_gmt":"2025-01-18T09:15:00","guid":{"rendered":"https:\/\/investbank.jo\/?page_id=239557"},"modified":"2025-04-16T08:35:45","modified_gmt":"2025-04-16T08:35:45","slug":"governance-and-management-of-information-technology","status":"publish","type":"page","link":"https:\/\/www.investbank.jo\/governance-and-management-of-information-technology\/","title":{"rendered":"Governance and Management of Information Technology"},"content":{"rendered":"\n[et_pb_section fb_built=&#8221;1&#8243; custom_padding_last_edited=&#8221;on|phone&#8221; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; use_background_color_gradient=&#8221;on&#8221; background_color_gradient_direction=&#8221;90deg&#8221; background_color_gradient_stops=&#8221;rgba(98,100,108,0.72) 0%|rgba(98,100,108,0) 100%&#8221; background_color_gradient_overlays_image=&#8221;on&#8221; background_image=&#8221;https:\/\/www.investbank.jo\/media\/2025\/01\/Governance-and-Management-of-Information-Technology.jpg&#8221; custom_padding=&#8221;23vh||23vh||true|false&#8221; custom_padding_tablet=&#8221;15vh||15vh||true|false&#8221; custom_padding_phone=&#8221;13vh||13vh||true|false&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_row _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; width=&#8221;85%&#8221; max_width=&#8221;85%&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_text _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; text_font=&#8221;Tajawal||||||||&#8221; text_text_color=&#8221;#FFFFFF&#8221; text_font_size=&#8221;40px&#8221; text_line_height=&#8221;1.2em&#8221; header_font=&#8221;Tajawal||||||||&#8221; header_text_color=&#8221;#FFFFFF&#8221; header_font_size=&#8221;40px&#8221; header_line_height=&#8221;1.2em&#8221; text_font_size_tablet=&#8221;35px&#8221; text_font_size_phone=&#8221;35px&#8221; text_font_size_last_edited=&#8221;on|desktop&#8221; header_font_size_tablet=&#8221;35px&#8221; header_font_size_phone=&#8221;35px&#8221; header_font_size_last_edited=&#8221;on|desktop&#8221; global_colors_info=&#8221;{}&#8221;]<h1>Governance and Management of Information Technology<\/h1>[\/et_pb_text][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=&#8221;1&#8243; admin_label=&#8221;Section&#8221; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; custom_padding=&#8221;30px||30px||true|false&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_row make_equal=&#8221;on&#8221; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; width=&#8221;85%&#8221; max_width=&#8221;85%&#8221; module_alignment=&#8221;center&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.27.0&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_text _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; text_font=&#8221;Tajawal||||||||&#8221; text_text_color=&#8221;#000000&#8243; text_font_size=&#8221;23px&#8221; text_line_height=&#8221;1.2em&#8221; header_3_font=&#8221;Tajawal||||||||&#8221; header_3_text_color=&#8221;#B1904F&#8221; hover_enabled=&#8221;0&#8243; text_font_size_tablet=&#8221;25px&#8221; text_font_size_phone=&#8221;20px&#8221; text_font_size_last_edited=&#8221;on|phone&#8221; global_colors_info=&#8221;{}&#8221; sticky_enabled=&#8221;0&#8243;]    <div class=\"pdf-viewer-wrapper\" id=\"wrapper_pdf_69d1e21553ff6\">\n        <a class=\"pdf-download\" href=\"https:\/\/www.investbank.jo\/media\/2025\/01\/Governance-and-Management-of-Information-Technology_2024.pdf\" download>Download Report<\/a>\n        <div class=\"pdf-container\">\n            <div class=\"pdf-loading\" id=\"loading_pdf_69d1e21553ff6\">Loading PDF...<\/div>\n            <div class=\"pdf-error\" id=\"error_pdf_69d1e21553ff6\"><\/div>\n            <div id=\"viewer_pdf_69d1e21553ff6\" class=\"pdf-viewer\" role=\"region\" aria-label=\"PDF Viewer\"><\/div>\n        <\/div>\n    <\/div>\n\n    <script>\n    (function(){\n      const workerSrc = \"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/pdf.js\/3.7.107\/pdf.worker.min.js\";\n      document.addEventListener(\"DOMContentLoaded\", function(){\n        if (typeof pdfjsLib === \"undefined\") {\n          const e = document.getElementById(\"error_pdf_69d1e21553ff6\");\n          if (e){ e.textContent = \"PDF.js library failed to load\"; e.style.display = \"block\"; }\n          const l = document.getElementById(\"loading_pdf_69d1e21553ff6\");\n          if (l){ l.style.display = \"none\"; }\n          return;\n        }\n\n        pdfjsLib.GlobalWorkerOptions.workerSrc = workerSrc;\n\n        const viewer   = document.getElementById(\"viewer_pdf_69d1e21553ff6\");\n        const loading  = document.getElementById(\"loading_pdf_69d1e21553ff6\");\n        const errorDiv = document.getElementById(\"error_pdf_69d1e21553ff6\");\n\n        let pdfDoc      = null;\n        let totalPages  = 0;\n        let initialPages = 2;\n        let loadMoreBtn = null;\n        const pageContainers = new Map(); \/\/ pageNumber -> div\n\n        function showError(msg){\n          if (loading) loading.style.display = \"none\";\n          if (errorDiv){ errorDiv.textContent = msg; errorDiv.style.display = \"block\"; }\n          console.error(msg);\n        }\n\n        \/\/ Create (and append) a placeholder for a given page number in correct order\n        function ensurePageContainer(pageNumber, insertBeforeNode=null){\n          if (pageContainers.has(pageNumber)) return pageContainers.get(pageNumber);\n          const div = document.createElement(\"div\");\n          div.className = \"pdf-page\";\n          div.id = \"page_pdf_69d1e21553ff6_\" + pageNumber;\n\n          \/\/ Keep DOM order ascending by inserting at the end, or before a given node (e.g. the Load More button)\n          if (insertBeforeNode) {\n            viewer.insertBefore(div, insertBeforeNode);\n          } else {\n            viewer.appendChild(div);\n          }\n          pageContainers.set(pageNumber, div);\n          return div;\n        }\n\n        \/\/ Render a single page into its placeholder (order-safe)\n        function renderPageInto(pageNumber){\n          return pdfDoc.getPage(pageNumber).then(function(page){\n            \/\/ Measure width safely; fall back if zero (Divi layout timing)\n            const containerWidth = viewer.clientWidth || viewer.getBoundingClientRect().width || 800;\n\n            const baseViewport = page.getViewport({ scale: 1 });\n            const scale = containerWidth \/ baseViewport.width; \/\/ scale to fit width\n            const viewport = page.getViewport({ scale });\n\n            const pixelRatio = window.devicePixelRatio || 1;\n\n            const target = ensurePageContainer(pageNumber);\n            \/\/ Clear any previous canvas if re-rendering\n            target.innerHTML = \"\";\n\n            const canvas  = document.createElement(\"canvas\");\n            canvas.className = \"pdf-canvas\";\n            const context = canvas.getContext(\"2d\", { alpha: false });\n\n            canvas.width  = Math.floor(viewport.width * pixelRatio);\n            canvas.height = Math.floor(viewport.height * pixelRatio);\n            \/\/ Style size in CSS pixels\n            canvas.style.width = \"100%\";\n            canvas.style.height = \"auto\";\n\n            context.scale(pixelRatio, pixelRatio);\n            context.imageSmoothingEnabled = true;\n            context.imageSmoothingQuality = \"high\";\n\n            target.appendChild(canvas);\n\n            const renderTask = page.render({\n              canvasContext: context,\n              viewport: viewport,\n              intent: \"display\"\n            });\n\n            return renderTask.promise;\n          });\n        }\n\n        function addLoadMoreButton(){\n          if (loadMoreBtn) return;\n          loadMoreBtn = document.createElement(\"button\");\n          loadMoreBtn.className = \"pdf-load-more\";\n          loadMoreBtn.textContent = \"Load all pages\";\n          viewer.appendChild(loadMoreBtn);\n\n          loadMoreBtn.addEventListener(\"click\", function(){\n            loadMoreBtn.textContent = \"Loading...\";\n            loadMoreBtn.disabled = true;\n\n            \/\/ Create placeholders for remaining pages BEFORE the button, to keep button at the end.\n            const promises = [];\n            for (let i = (initialPages + 1); i <= totalPages; i++){\n              ensurePageContainer(i, loadMoreBtn);\n              promises.push(renderPageInto(i));\n            }\n\n            Promise.all(promises).then(function(){\n              loadMoreBtn.remove();\n              loadMoreBtn = null;\n            }).catch(function(err){\n              showError(\"Failed to render remaining pages: \" + err.message);\n            });\n          });\n        }\n\n        function renderInitialPages(){\n          viewer.innerHTML = \"\";\n          pageContainers.clear();\n\n          const pagesToRender = Math.min(initialPages, totalPages);\n          \/\/ Create placeholders first in correct order\n          for (let i = 1; i <= pagesToRender; i++){\n            ensurePageContainer(i);\n          }\n          \/\/ Render all initial pages (order preserved by placeholders)\n          const jobs = [];\n          for (let i = 1; i <= pagesToRender; i++){\n            jobs.push(renderPageInto(i));\n          }\n          Promise.all(jobs).then(function(){\n            if (loading) loading.style.display = \"none\";\n            if (pagesToRender < totalPages) addLoadMoreButton();\n          }).catch(function(err){\n            showError(\"Failed to render pages: \" + err.message);\n          });\n        }\n\n        \/\/ Load the PDF\n        const loadingOptions = {\n          url: \"https:\/\/www.investbank.jo\/media\/2025\/01\/Governance-and-Management-of-Information-Technology_2024.pdf\",\n          cMapUrl: \"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/pdf.js\/3.7.107\/cmaps\/\",\n          cMapPacked: true,\n          disableAutoFetch: false,\n          disableStream: false\n        };\n\n        pdfjsLib.getDocument(loadingOptions).promise.then(function(pdf){\n          pdfDoc = pdf;\n          totalPages = pdf.numPages;\n          renderInitialPages();\n        }).catch(function(error){\n          showError(\"Failed to load PDF: \" + error.message);\n        });\n\n        \/\/ Optional: re-render on resize to maintain sharpness\/layout\n        let resizeTO;\n        window.addEventListener(\"resize\", function(){\n          if (!pdfDoc) return;\n          clearTimeout(resizeTO);\n          resizeTO = setTimeout(function(){\n            \/\/ Re-render only visible pages (simple: re-render all initial; safe path)\n            const alreadyLoaded = Math.min(initialPages, totalPages);\n            const jobs = [];\n            for (let i = 1; i <= alreadyLoaded; i++){\n              jobs.push(renderPageInto(i));\n            }\n            Promise.all(jobs).catch(function(err){\n              console.warn(\"Resize re-render issue:\", err);\n            });\n          }, 200);\n        });\n\n      }); \/\/ DOMContentLoaded\n    })();\n    <\/script>\n    \n[\/et_pb_text][\/et_pb_column][\/et_pb_row][\/et_pb_section]\n","protected":false},"excerpt":{"rendered":"<p>Governance and Management of Information Technology    <div class=\"pdf-viewer-wrapper\" id=\"wrapper_pdf_69d1e21587b25\">\n        <a class=\"pdf-download\" href=\"https:\/\/www.investbank.jo\/media\/2025\/01\/Governance-and-Management-of-Information-Technology_2024.pdf\" download>Download Report<\/a>\n        <div class=\"pdf-container\">\n            <div class=\"pdf-loading\" id=\"loading_pdf_69d1e21587b25\">Loading PDF...<\/div>\n            <div class=\"pdf-error\" id=\"error_pdf_69d1e21587b25\"><\/div>\n            <div id=\"viewer_pdf_69d1e21587b25\" class=\"pdf-viewer\" role=\"region\" aria-label=\"PDF Viewer\"><\/div>\n        <\/div>\n    <\/div>\n\n    <script>\n    (function(){\n      const workerSrc = \"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/pdf.js\/3.7.107\/pdf.worker.min.js\";\n      document.addEventListener(\"DOMContentLoaded\", function(){\n        if (typeof pdfjsLib === \"undefined\") {\n          const e = document.getElementById(\"error_pdf_69d1e21587b25\");\n          if (e){ e.textContent = \"PDF.js library failed to load\"; e.style.display = \"block\"; }\n          const l = document.getElementById(\"loading_pdf_69d1e21587b25\");\n          if (l){ l.style.display = \"none\"; }\n          return;\n        }\n\n        pdfjsLib.GlobalWorkerOptions.workerSrc = workerSrc;\n\n        const viewer   = document.getElementById(\"viewer_pdf_69d1e21587b25\");\n        const loading  = document.getElementById(\"loading_pdf_69d1e21587b25\");\n        const errorDiv = document.getElementById(\"error_pdf_69d1e21587b25\");\n\n        let pdfDoc      = null;\n        let totalPages  = 0;\n        let initialPages = 2;\n        let loadMoreBtn = null;\n        const pageContainers = new Map(); \/\/ pageNumber -> div\n\n        function showError(msg){\n          if (loading) loading.style.display = \"none\";\n          if (errorDiv){ errorDiv.textContent = msg; errorDiv.style.display = \"block\"; }\n          console.error(msg);\n        }\n\n        \/\/ Create (and append) a placeholder for a given page number in correct order\n        function ensurePageContainer(pageNumber, insertBeforeNode=null){\n          if (pageContainers.has(pageNumber)) return pageContainers.get(pageNumber);\n          const div = document.createElement(\"div\");\n          div.className = \"pdf-page\";\n          div.id = \"page_pdf_69d1e21587b25_\" + pageNumber;\n\n          \/\/ Keep DOM order ascending by inserting at the end, or before a given node (e.g. the Load More button)\n          if (insertBeforeNode) {\n            viewer.insertBefore(div, insertBeforeNode);\n          } else {\n            viewer.appendChild(div);\n          }\n          pageContainers.set(pageNumber, div);\n          return div;\n        }\n\n        \/\/ Render a single page into its placeholder (order-safe)\n        function renderPageInto(pageNumber){\n          return pdfDoc.getPage(pageNumber).then(function(page){\n            \/\/ Measure width safely; fall back if zero (Divi layout timing)\n            const containerWidth = viewer.clientWidth || viewer.getBoundingClientRect().width || 800;\n\n            const baseViewport = page.getViewport({ scale: 1 });\n            const scale = containerWidth \/ baseViewport.width; \/\/ scale to fit width\n            const viewport = page.getViewport({ scale });\n\n            const pixelRatio = window.devicePixelRatio || 1;\n\n            const target = ensurePageContainer(pageNumber);\n            \/\/ Clear any previous canvas if re-rendering\n            target.innerHTML = \"\";\n\n            const canvas  = document.createElement(\"canvas\");\n            canvas.className = \"pdf-canvas\";\n            const context = canvas.getContext(\"2d\", { alpha: false });\n\n            canvas.width  = Math.floor(viewport.width * pixelRatio);\n            canvas.height = Math.floor(viewport.height * pixelRatio);\n            \/\/ Style size in CSS pixels\n            canvas.style.width = \"100%\";\n            canvas.style.height = \"auto\";\n\n            context.scale(pixelRatio, pixelRatio);\n            context.imageSmoothingEnabled = true;\n            context.imageSmoothingQuality = \"high\";\n\n            target.appendChild(canvas);\n\n            const renderTask = page.render({\n              canvasContext: context,\n              viewport: viewport,\n              intent: \"display\"\n            });\n\n            return renderTask.promise;\n          });\n        }\n\n        function addLoadMoreButton(){\n          if (loadMoreBtn) return;\n          loadMoreBtn = document.createElement(\"button\");\n          loadMoreBtn.className = \"pdf-load-more\";\n          loadMoreBtn.textContent = \"Load all pages\";\n          viewer.appendChild(loadMoreBtn);\n\n          loadMoreBtn.addEventListener(\"click\", function(){\n            loadMoreBtn.textContent = \"Loading...\";\n            loadMoreBtn.disabled = true;\n\n            \/\/ Create placeholders for remaining pages BEFORE the button, to keep button at the end.\n            const promises = [];\n            for (let i = (initialPages + 1); i <= totalPages; i++){\n              ensurePageContainer(i, loadMoreBtn);\n              promises.push(renderPageInto(i));\n            }\n\n            Promise.all(promises).then(function(){\n              loadMoreBtn.remove();\n              loadMoreBtn = null;\n            }).catch(function(err){\n              showError(\"Failed to render remaining pages: \" + err.message);\n            });\n          });\n        }\n\n        function renderInitialPages(){\n          viewer.innerHTML = \"\";\n          pageContainers.clear();\n\n          const pagesToRender = Math.min(initialPages, totalPages);\n          \/\/ Create placeholders first in correct order\n          for (let i = 1; i <= pagesToRender; i++){\n            ensurePageContainer(i);\n          }\n          \/\/ Render all initial pages (order preserved by placeholders)\n          const jobs = [];\n          for (let i = 1; i <= pagesToRender; i++){\n            jobs.push(renderPageInto(i));\n          }\n          Promise.all(jobs).then(function(){\n            if (loading) loading.style.display = \"none\";\n            if (pagesToRender < totalPages) addLoadMoreButton();\n          }).catch(function(err){\n            showError(\"Failed to render pages: \" + err.message);\n          });\n        }\n\n        \/\/ Load the PDF\n        const loadingOptions = {\n          url: \"https:\/\/www.investbank.jo\/media\/2025\/01\/Governance-and-Management-of-Information-Technology_2024.pdf\",\n          cMapUrl: \"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/pdf.js\/3.7.107\/cmaps\/\",\n          cMapPacked: true,\n          disableAutoFetch: false,\n          disableStream: false\n        };\n\n        pdfjsLib.getDocument(loadingOptions).promise.then(function(pdf){\n          pdfDoc = pdf;\n          totalPages = pdf.numPages;\n          renderInitialPages();\n        }).catch(function(error){\n          showError(\"Failed to load PDF: \" + error.message);\n        });\n\n        \/\/ Optional: re-render on resize to maintain sharpness\/layout\n        let resizeTO;\n        window.addEventListener(\"resize\", function(){\n          if (!pdfDoc) return;\n          clearTimeout(resizeTO);\n          resizeTO = setTimeout(function(){\n            \/\/ Re-render only visible pages (simple: re-render all initial; safe path)\n            const alreadyLoaded = Math.min(initialPages, totalPages);\n            const jobs = [];\n            for (let i = 1; i <= alreadyLoaded; i++){\n              jobs.push(renderPageInto(i));\n            }\n            Promise.all(jobs).catch(function(err){\n              console.warn(\"Resize re-render issue:\", err);\n            });\n          }, 200);\n        });\n\n      }); \/\/ DOMContentLoaded\n    })();\n    <\/script>\n    <\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_et_pb_use_builder":"on","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"class_list":["post-239557","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.investbank.jo\/api-secure\/wp\/v2\/pages\/239557","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.investbank.jo\/api-secure\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.investbank.jo\/api-secure\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.investbank.jo\/api-secure\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.investbank.jo\/api-secure\/wp\/v2\/comments?post=239557"}],"version-history":[{"count":1,"href":"https:\/\/www.investbank.jo\/api-secure\/wp\/v2\/pages\/239557\/revisions"}],"predecessor-version":[{"id":245729,"href":"https:\/\/www.investbank.jo\/api-secure\/wp\/v2\/pages\/239557\/revisions\/245729"}],"wp:attachment":[{"href":"https:\/\/www.investbank.jo\/api-secure\/wp\/v2\/media?parent=239557"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}