Help
RSS
API
Feed
Maltego
Contact
Domain > artfulreflectionswallcoverings.com
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2025-07-17
172.67.220.111
(
ClassC
)
2026-02-27
104.21.70.55
(
ClassC
)
Port 443
HTTP/1.1 200 OKDate: Fri, 27 Feb 2026 11:42:36 GMTContent-Type: text/html; charsetUTF-8Transfer-Encoding: chunkedConnection: keep-alivex-powered-by: PHP/8.1.34Set-Cookie: PHPSESSID92ubkpipvr1oam044h0g7p5u45; path/; secureexpires: Thu, 19 Nov 1981 08:52:00 GMTCache-Control: no-store, no-cache, must-revalidatepragma: no-cacheReport-To: {group:cf-nel,max_age:604800,endpoints:{url:https://a.nel.cloudflare.com/report/v4?sidu2RPEjXXqFFvchoR3gQQnJS8taX4EDOhoojz6J1ucELAT0Ez2ptzCinjmaHMwovhsEkhbMy2kOiTnbr77ugFxG3zS%2BbgFlQQODrsaz94n0UrNGgD6QwuWE7Jaukq7KeBU%3D}}vary: Accept-EncodingServer: cloudflareaccess-control-allow-origin: *access-control-allow-methods: GET, POST, OPTIONSaccess-control-allow-headers: Content-Type, Authorizationx-turbo-charged-by: LiteSpeedcf-cache-status: DYNAMICNel: {report_to:cf-nel,success_fraction:0.0,max_age:604800}CF-RAY: 9d476b73bcfcde1d-PDXalt-svc: h3:443; ma86400 !DOCTYPE html>html langen>head> meta charsetutf-8> meta http-equivX-UA-Compatible contentIEedge> meta nameviewport contentwidthdevice-width, initial-scale1> title>Artful Reflections Wall Coverings/title> link relstylesheet typetext/css href./config/css/bootstrap.min.css?v1772192556> link relstylesheet typetext/css hrefstyle.css?v1772192556> link hrefhttps://fonts.googleapis.com/icon?familyMaterial+Icons relstylesheet> script srchttps://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js>/script> link hrefhttps://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css relstylesheet> link relstylesheet hrefhttps://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.3.4/assets/owl.carousel.min.css> link relstylesheet hrefhttps://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.3.4/assets/owl.theme.default.min.css> link relstylesheet hrefhttps://cdnjs.cloudflare.com/ajax/libs/malihu-custom-scrollbar-plugin/3.1.5/jquery.mCustomScrollbar.min.css> link relstylesheet hrefconfig/css/swiper-bundle.min.css /> link relstylesheet hrefhttps://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick.min.css /> link relstylesheet hrefhttps://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick-theme.min.css /> link relstylesheet hrefhttps://cdnjs.cloudflare.com/ajax/libs/fancybox/3.5.7/jquery.fancybox.min.css /> link relstylesheet hrefconfig/css/site_custom.css?v1772192556 /> link hrefhttps://unpkg.com/aos@2.3.1/dist/aos.css relstylesheet> script srcconfig/js/swiper-bundle.min.js>/script> script srchttps://cdnjs.cloudflare.com/ajax/libs/chroma-js/2.1.1/chroma.min.js>/script> script srchttps://cdn.tailwindcss.com>/script> script> tailwind.config { prefix: tw-, corePlugins: { preflight: false, // ← This disables Tailwinds CSS reset } } /script>/head>style>.slick-slide { outline: none;}.thumbnail-slider .slick-slide { margin: 0 5px;}.thumbnail-slider .slick-slide img { cursor: pointer;} #loading-spinner { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); text-align: center; z-index: 1000; background: rgba(255, 255, 255, 0.8); padding: 20px; border-radius: 10px;}.spinner { border: 4px solid #f3f3f3; border-top: 4px solid #3498db; border-radius: 50%; width: 40px; height: 40px; animation: spin 1s linear infinite; margin: 0 auto;}@keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); }}.product-wrapper { position: relative; min-height: 300px; }/style>script> function getCookie(name) { const cookies document.cookie.split(;); const sanitizedCookieName name.replace(/,; \t\r\n\013\014/g, _); for (let cookie of cookies) { const cookieName, cookieValue cookie.trim().split(); if (cookieName sanitizedCookieName) { return decodeURIComponent(cookieValue); } } return null; // Cookie not found } function setCookieWithExpiration(name, value, seconds) { const sanitizedCookieName name.replace(/,; \t\r\n\013\014/g, _); // Calculate expiration time const expirationTime new Date(); expirationTime.setTime(expirationTime.getTime() + (seconds * 1000)); // Convert seconds to milliseconds // Construct the cookie string const cookieString `${name}${encodeURIComponent(sanitizedCookieName)}; expires${expirationTime.toUTCString()}; path/`; // Set the cookie document.cookie cookieString; }/script>body> div classnav-home> /div> script srcminiCart.js>/script> section classheader_section header_section36 > header classnavtemplatesSec> nav classnavbar navbar-expand-lg nav-color py-2 topbarRow1> div classw-100 section-max-width px-3> div classbrand-name-box brand-name> a classheader_brand nav-text-color text-md hrefindex.php> Artful Reflections Wall Coverings /a> /div> div classd-flex> button classnavbar-toggler text-md p-0 ms-auto typebutton data-bs-togglecollapse data-bs-target#navbarSupportedContent aria-controlsnavbarSupportedContent aria-expandedfalse aria-labelToggle navigation> span classnavbar-toggler-icon d-flex align-items-center nav-icon-color text-md stylewidth:auto;margin:auto;>i classmaterial-icons>horizontal_split/i>/span> /button> div classbrand-name-box cart d-flex justify-content-end> div classnavbar-contact-btn d-none d-lg-block> /div> ul classnavbar-cart nav-color p-0> li classcart_link ps-3> a hrefjavascript:void(0); class> div classcart-container> span classnav-icon-color text-md>i classmaterial-icons>shopping_cart_checkout/i>/span> span idcart_count classcart-count >/span> /div> span classcart_amt nav-text-color text-sm d-none> $ span idcart_amt classsubtotalAmount text-sm nav-text-color style-d-inline-navbar>/span> /span> /a> div classmini-cart-content navCart16> div classtopbarNavcart16> h2 classshoppingHead16 m-0 text-lg>Cart review/h2> button classmini-cart-close text-lg>i classmaterial-icons>close/i>/button> /div> div classminicart_inner14> div classminicart_table table-responsive> table classtable minicart_details6 > tbody idminicartRow> tr classemptyRow>td stylepadding: 10px; colspan3>p classcart_empty text-base>Your cart does not contain any products./p>/td>/tr> /tbody> /table> /div> /div> div classmini-cart-action16> div classminiCartTotal> p classtext14 text-md>Sub Total:/p> p classpricetext text-md>$ span classsubtotalAmount text-md idsubtotalAmount>/span>/p> /div> div classminicart_buttons> a hrefcart.php classbutton-primary w-50 mt-3 text-sm styledisplay: flex;justify-content: center;align-items: center;padding: 12px;min-height: 40px;> View Cart /a> a hrefcheckout classbutton-primary w-50 mt-3 text-sm styledisplay: flex;justify-content: center;align-items: center;padding: 12px;min-height: 40px;> Check Out /a> /div> /div> /div> /li> /ul> div classnav-text-color d-none d-lg-block ps-3> /div> /div> /div> /div> /nav> div classtopbar top-bar border-top border-color py-2 d-none d-lg-flex main2ndrow navtemplateBgwhite navbgcolor stylejustify-content: center;> div classw-100 align-content-between section-max-width px-3> div classcontainer navRight topbar-contact-btn> div classnavbar-nav m-0 anchors-container> ul classm-0 style display: flex; gap: 15px; align-items: center; justify-content: center; flex-wrap: wrap;> li classnav-item active > a classnav-link navtemplateBgwhiteText linkcolors hrefindex.php> Welcome /a> /li> li classnav-item > a classnav-link navtemplateBgwhiteText linkcolors hrefcontact> Support /a> /li> li classnav-item > a classnav-link navtemplateBgwhiteText linkcolors hrefcart> My Basket /a> /li> li classnav-item > a classnav-link navtemplateBgwhiteText linkcolors hrefcheckout> Complete Order /a> /li> li classnav-item > a classnav-link navtemplateBgwhiteText linkcolors hrefshop> Showcase /a> /li> li classnav-item dropdown> a classnav-link navtemplateBgwhiteText linkcolors dropdown-toggle href# data-bs-toggledropdown aria-expandedfalse> Collections /a> ul classdropdown-menu> li classdropdown-item> a class hrefproduct-category/artistic-texture-wallpaper> Artistic Texture Wallpaper /a> /li> li classdropdown-item> a class hrefproduct-category/bedroom-decorative-wallpaper> Bedroom Decorative Wallpaper /a> /li> li classdropdown-item> a class hrefproduct-category/heat-control-window-covers> Heat Control Window Covers /a> /li> li classdropdown-item> a class hrefproduct-category/home-interior-wallpaper> Home Interior Wallpaper /a> /li> li classdropdown-item> a class hrefproduct-category/home-window-protection-films> Home Window Protection Films /a> /li> li classdropdown-item> a class hrefproduct-category/kitchen-&-furniture-wraps> Kitchen & Furniture Wraps /a> /li> li classdropdown-item> a class hrefproduct-category/kitchen-backsplash-wallpapers> Kitchen Backsplash Wallpapers /a> /li> li classdropdown-item> a class hrefproduct-category/living-room-wallpaper-rolls> Living Room Wallpaper Rolls /a> /li> li classdropdown-item> a class hrefproduct-category/tempered-glass-wall-panels> Tempered Glass Wall Panels /a> /li> li classdropdown-item> a class hrefproduct-category/thermal-insulation-materials> Thermal Insulation Materials /a> /li> li classdropdown-item> a class hrefproduct-category/vehicle-window-accessories> Vehicle Window Accessories /a> /li> li classdropdown-item> a class hrefproduct-category/waterproof-furniture-cover> Waterproof Furniture Cover /a> /li> li classdropdown-item> a class hrefproduct-category/window-insulation-films> Window Insulation Films /a> /li> /ul> /li> /ul> /div> /div> /div> /div> header> div classmobile-menu> div classcollapse navbar-collapse nav-menu idnavbarSupportedContent> ul classnavbar-nav m-0 nav-color navColorInner2> li classnav-item active > a classnav-link nav-text-color hrefindex.php> Welcome /a> /li> li classnav-item > a classnav-link nav-text-color hrefcontact> Support /a> /li> li classnav-item > a classnav-link nav-text-color hrefcart> My Basket /a> /li> li classnav-item > a classnav-link nav-text-color hrefcheckout> Complete Order /a> /li> li classnav-item > a classnav-link nav-text-color hrefshop> Showcase /a> /li> li classnav-item dropdown> a classnav-link nav-text-color dropdown-toggle href# data-bs-toggledropdown aria-expandedfalse> Collections /a> ul classnav-color navColorInner2 dropdown-menu> li classdropdown-item> a class hrefproduct-category/artistic-texture-wallpaper> Artistic Texture Wallpaper /a> /li> li classdropdown-item> a class hrefproduct-category/bedroom-decorative-wallpaper> Bedroom Decorative Wallpaper /a> /li> li classdropdown-item> a class hrefproduct-category/heat-control-window-covers> Heat Control Window Covers /a> /li> li classdropdown-item> a class hrefproduct-category/home-interior-wallpaper> Home Interior Wallpaper /a> /li> li classdropdown-item> a class hrefproduct-category/home-window-protection-films> Home Window Protection Films /a> /li> li classdropdown-item> a class hrefproduct-category/kitchen-&-furniture-wraps> Kitchen & Furniture Wraps /a> /li> li classdropdown-item> a class hrefproduct-category/kitchen-backsplash-wallpapers> Kitchen Backsplash Wallpapers /a> /li> li classdropdown-item> a class hrefproduct-category/living-room-wallpaper-rolls> Living Room Wallpaper Rolls /a> /li> li classdropdown-item> a class hrefproduct-category/tempered-glass-wall-panels> Tempered Glass Wall Panels /a> /li> li classdropdown-item> a class hrefproduct-category/thermal-insulation-materials> Thermal Insulation Materials /a> /li> li classdropdown-item> a class hrefproduct-category/vehicle-window-accessories> Vehicle Window Accessories /a> /li> li classdropdown-item> a class hrefproduct-category/waterproof-furniture-cover> Waterproof Furniture Cover /a> /li> li classdropdown-item> a class hrefproduct-category/window-insulation-films> Window Insulation Films /a> /li> /ul> /li> /ul> /div> /div> /header> /header>/section>div idHeroSection class dark-mode nAlaDFdv section-max-width tw-px-4 styleoverflow:hidden;> div class tw-mt-0 tw-pt-0 > div class tw-relative> div classtw-relative tw-overflow-hidden tw-transition-height tw-duration-600ms tw-ease-cubic-bezier(0.44,0.13,0.48,0.87) md:tw-min-h-650px tw-min-h-450px> div class tw-absolute tw-top-0 tw-left-0 tw-w-full tw-opacity-100 tw-transition-opacity tw-duration-500 tw-ease-in-out md:tw-min-h-650px tw-min-h-450px> div idheroContainer-captivating class tw-absolute tw-top-0 tw-left-0 tw-w-full md:tw-min-h-650px tw-min-h-450px tw-bg-cover tw-bg-center tw-bg-no-repeat tw-bg-blend-overlay tw-text-white tw-transition-opacity tw-duration-800ms tw-ease-cubic-bezier(0.44,0.13,0.48,0.87) stylebackground-image:url(./img/lTIl5EzxP2YNWNvaGus1pzCNoWywnvdSboJMSQTT.webp),linear-gradient(rgba(0,0,0,0.3),rgba(0,0,0,0.2));> div class tw-absolute tw-top-0 tw-left-0 tw-w-full md:tw-min-h-650px tw-min-h-450px> /div> /div> div class tw-relative md:tw-min-h-650px tw-min-h-450px> div class tw-absolute tw-top-0 tw-w-full tw-h-full tw-flex tw-flex-col tw-items-center tw-justify-center tw-text-left tw-z-2 tw-opacity-100 tw-transition-all tw-duration-600ms tw-ease-cubic-bezier(0.44,0.13,0.48,0.87) tw-delay-300ms> div idheroContainer02-captivating class tw-max-w-1200px tw-mx-auto md:tw-px-55px tw-px-20px> ul class tw-list-none tw-m-0 tw-p-0> li class tw-m-0 tw-p-0> h2 idheroTitle01-captivating class text-xl tw-font-normal tw-text-white tw-mb-2 tw-text-shadow-0_0_4px_rgba(0,0,0,0.4)>Functional, dependable items for home, work, and life./h2> /li> li classheroLi-captivating> span idheroSlogan01-captivating class text-md tw-text-white tw-text-shadow-0_0_4px_rgba(0,0,0,0.4)>Helping you find better products, without the runaround./span> /li> /ul> div class tw-mt-30px> a href#order data-scroll-to#order classbutton-primary text-base tw-inline-block tw-py-13px tw-px-5 tw-min-h-40px tw-text-center tw-w-auto>Start Shopping Today/a> /div> /div> /div> /div> /div> /div> /div> /div>/div>section idaboutSection classXu0BXsPAuvg dark-mode nAlaDFdv section-max-width tw-relative tw-mx-auto tw-px-1rem tw-overflow-hidden> div classtw-w-full krctLPpT tw-overflow-hidden> div classtw-flex tw-flex-wrap > div classfirstdiv tw-w-full md:tw-w-5/12 lg:tw-w-5/12 > div classimages> div classimage1> img srcimg/S1yIArG4wdH4GbvbBWS5SOTuxgmPusOJwjTnVRJC.webp alt classimagcont tw-w-full tw-min-h-400px tw-object-cover /> /div> /div> /div> div classseconddiv tw-w-full md:tw-w-7/12 tw-p-0 md:tw-ps-3 tw-mt-3 lg:tw-mt-0> h2 classtitle tw-relative tw-inline-block tw-mb-0> span classspan1 text-md tw-relative tw-top-0 tw-left-0 tw-opacity-10 tw-text-white tw-pointer-events-none tw-webkit-text-stroke:1px_#111 style-webkit-text-stroke: 1px #111;>About/span> span classspan2 text-md tw-absolute tw-top-0 tw-left-0 tw-opacity-20 tw-text-white tw-pointer-events-none style-webkit-text-stroke: 1px #111;>About/span> /h2> h2 classsubtitle text-xl tw-relative tw-font-medium tw-tracking-tight tw-text-#000 tw-mb-4>Making Shopping an Unforgettable Experience/h2> div classtext> p classdescription text-md tw-mb-5 tw-tracking-tight tw-text-#000 tw-font-normal>Welcome to our shop, where customer happiness is our priority. Your smile is our success./p> /div> div classbutton> a hrefcontact classbutton-primary text-sm tw-my-2 tw-inline-block tw-py-13px tw-px-20px tw-min-h-40px tw-text-center >Contact Our Team/a> /div> /div> /div> /div>/section>section idPopularProductSection classtw-popular_section15 nAlaDFdv section-max-width tw-relative tw-overflow-hidden tw-px-3> div classtw-w-full krctLPpT> div class tw-pt-2 tw-text-center> h3 classtext-xl tw-font-semibold tw-text-#0a0a0a tw-uppercase tw-relative tw-inline-block tw-pb-3 after:tw-content- after:tw-absolute after:tw-w-70px after:tw-border-b-4px after:tw-border-var(--primary) after:tw-left-1/2 after:tw--translate-x-1/2>People’s Choice/h3> /div> input typehidden nameuser_ip iduser_ip value /> div classswiper popular-slider15 tw-py-4> div classswiper-wrapper> div classswiper-slide group product-section tw-border-2 tw-border-solid tw-border-#f1f1f1 hover:tw-border-var(--primary) tw-transition-all tw-duration-300 tw-rounded-md tw-flex tw-flex-col tw-overflow-hidden data-product-index1 data-product-idproduct-1> a hrefjavascript:void(0); classbtn_shop tw-block> div classtw-product-block tw-flex tw-flex-col tw-h-full> div class tw-relative tw-overflow-hidden tw-rounded-md> img class tw-w-full tw-aspect-square tw-object-cover tw-object-center tw-transition-transform tw-duration-500 group-hover:tw-scale-105 src./config/images/products/S13c6923dfc1940a88bdb34aacbd3cde5H.jpg_960x960q75.jpg_.webp altTextured Solid 3D Wallpaper /> div classtw-buttonAWishlist15 tw-absolute tw-flex tw-items-center tw-justify-center tw-gap-3 tw-transition-all tw-duration-300 tw-top-50% tw-left-50% tw-w-fit primary_color tw-rounded-50px tw-p-3 tw-flex-nowrap styletransform: translate(-50%, -50%);> a hrefjavascript:void(0); classbtn_shop buttonMainclass15 primary_text_color tw-text-white tw-rounded-full tw-w-12 tw-h-12 tw-flex tw-items-center tw-justify-center tw-text-xl tw-transition-colors tw-duration-300 idbtn_shop> i classmaterial-icons>shopping_cart_checkout/i> /a> /div> /div> div class tw-text-center tw-px-3 tw-py-4> h5 class text-base tw-font-medium tw-text-#0f2130 tw-mb-1 tw-capitalize>Textured Solid 3D Wallpaper/h5> div class tw-flex tw-justify-center tw-gap-2px tw-mb-1> span classstar> i classmaterial-icons>star/i> /span> span classstar> i classmaterial-icons>star/i> /span> span classstar> i classmaterial-icons>star/i> /span> span classstar> i classmaterial-icons>star/i> /span> span classstar> i classmaterial-icons>star/i> /span> /div> p class text-base tw-font-bold tw-text-black> span>$9.73/span> /p> /div> /div> /a> /div> div classswiper-slide group product-section tw-border-2 tw-border-solid tw-border-#f1f1f1 hover:tw-border-var(--primary) tw-transition-all tw-duration-300 tw-rounded-md tw-flex tw-flex-col tw-overflow-hidden data-product-index4 data-product-idproduct-1> a hrefjavascript:void(0); classbtn_shop tw-block> div classtw-product-block tw-flex tw-flex-col tw-h-full> div class tw-relative tw-overflow-hidden tw-rounded-md> img class tw-w-full tw-aspect-square tw-object-cover tw-object-center tw-transition-transform tw-duration-500 group-hover:tw-scale-105 src./config/images/products/Se1edf3bc7f8d48adb158f4483b88f7efZ.jpg_960x960q75.jpg_.webp altCement Pattern Adhesive Wallpaper /> div classtw-buttonAWishlist15 tw-absolute tw-flex tw-items-center tw-justify-center tw-gap-3 tw-transition-all tw-duration-300 tw-top-50% tw-left-50% tw-w-fit primary_color tw-rounded-50px tw-p-3 tw-flex-nowrap styletransform: translate(-50%, -50%);> a hrefjavascript:void(0); classbtn_shop buttonMainclass15 primary_text_color tw-text-white tw-rounded-full tw-w-12 tw-h-12 tw-flex tw-items-center tw-justify-center tw-text-xl tw-transition-colors tw-duration-300 idbtn_shop> i classmaterial-icons>shopping_cart_checkout/i> /a> /div> /div> div class tw-text-center tw-px-3 tw-py-4> h5 class text-base tw-font-medium tw-text-#0f2130 tw-mb-1 tw-capitalize>Cement Pattern Adhesive Wallpaper/h5> div class tw-flex tw-justify-center tw-gap-2px tw-mb-1> span classstar> i classmaterial-icons>star/i> /span> span classstar> i classmaterial-icons>star/i> /span> span classstar> i classmaterial-icons>star/i> /span> span classstar> i classmaterial-icons>star/i> /span> span classstar> i classmaterial-icons>star_border/i> /span> /div> p class text-base tw-font-bold tw-text-black> span>$11.52/span> /p> /div> /div> /a> /div> div classswiper-slide group product-section tw-border-2 tw-border-solid tw-border-#f1f1f1 hover:tw-border-var(--primary) tw-transition-all tw-duration-300 tw-rounded-md tw-flex tw-flex-col tw-overflow-hidden data-product-index7 data-product-idproduct-2> a hrefjavascript:void(0); classbtn_shop tw-block> div classtw-product-block tw-flex tw-flex-col tw-h-full> div class tw-relative tw-overflow-hidden tw-rounded-md> img class tw-w-full tw-aspect-square tw-object-cover tw-object-center tw-transition-transform tw-duration-500 group-hover:tw-scale-105 src./config/images/products/Ha48aad76dba349d8bbaa5ef16c932a1e2.jpg_720x720q50.webp altTempered Architectural Glass Panel /> div classtw-buttonAWishlist15 tw-absolute tw-flex tw-items-center tw-justify-center tw-gap-3 tw-transition-all tw-duration-300 tw-top-50% tw-left-50% tw-w-fit primary_color tw-rounded-50px tw-p-3 tw-flex-nowrap styletransform: translate(-50%, -50%);> a hrefjavascript:void(0); classbtn_shop buttonMainclass15 primary_text_color tw-text-white tw-rounded-full tw-w-12 tw-h-12 tw-flex tw-items-center tw-justify-center tw-text-xl tw-transition-colors tw-duration-300 idbtn_shop> i classmaterial-icons>shopping_cart_checkout/i> /a> /div> /div> div class tw-text-center tw-px-3 tw-py-4> h5 class text-base tw-font-medium tw-text-#0f2130 tw-mb-1 tw-capitalize>Tempered Architectural Glass Panel/h5> div class tw-flex tw-justify-center tw-gap-2px tw-mb-1> span classstar> i classmaterial-icons>star/i> /span> span classstar> i classmaterial-icons>star/i> /span> span classstar> i classmaterial-icons>star/i> /span> span classstar> i classmaterial-icons>star/i> /span> span classstar> i classmaterial-icons>star/i> /span> /div> p class text-base tw-font-bold tw-text-black> span>$29.95/span> /p> /div> /div> /a> /div> div classswiper-slide group product-section tw-border-2 tw-border-solid tw-border-#f1f1f1 hover:tw-border-var(--primary) tw-transition-all tw-duration-300 tw-rounded-md tw-flex tw-flex-col tw-overflow-hidden data-product-index2 data-product-idproduct-1> a hrefjavascript:void(0); classbtn_shop tw-block> div classtw-product-block tw-flex tw-flex-col tw-h-full> div class tw-relative tw-overflow-hidden tw-rounded-md> img class tw-w-full tw-aspect-square tw-object-cover tw-object-center tw-transition-transform tw-duration-500 group-hover:tw-scale-105 src./config/images/products/S343ea735ba544aaf9245832394d32f564.jpg_960x960q75.jpg_.webp altWhite Adhesive Vinyl Wallpaper /> div classtw-buttonAWishlist15 tw-absolute tw-flex tw-items-center tw-justify-center tw-gap-3 tw-transition-all tw-duration-300 tw-top-50% tw-left-50% tw-w-fit primary_color tw-rounded-50px tw-p-3 tw-flex-nowrap styletransform: translate(-50%, -50%);> a hrefjavascript:void(0); classbtn_shop buttonMainclass15 primary_text_color tw-text-white tw-rounded-full tw-w-12 tw-h-12 tw-flex tw-items-center tw-justify-center tw-text-xl tw-transition-colors tw-duration-300 idbtn_shop> i classmaterial-icons>shopping_cart_checkout/i> /a> /div> /div> div class tw-text-center tw-px-3 tw-py-4> h5 class text-base tw-font-medium tw-text-#0f2130 tw-mb-1 tw-capitalize>White Adhesive Vinyl Wallpaper/h5> div class tw-flex tw-justify-center tw-gap-2px tw-mb-1> span classstar> i classmaterial-icons>star/i> /span> span classstar> i classmaterial-icons>star/i> /span> span classstar> i classmaterial-icons>star/i> /span> span classstar> i classmaterial-icons>star/i> /span> span classstar> i classmaterial-icons>star/i> /span> /div> p class text-base tw-font-bold tw-text-black> span>$9.97/span> /p> /div> /div> /a> /div> /div> div classswiper-pagination tw-flex tw-justify-center tw-items-center tw-bottom-0> /div> /div> /div>/section>div class nAlaDFdv section-max-width tw-px-4 styleoverflow:hidden;> div classtw-w-full krctLPpT> div classtw-w-full> div classtw-border tw-border-solid tw-p-4 tw-rounded-6px wow animate__fadeIn tw-border-#e5e5e5 data-wow-duration.5s data-wow-delay1s> div classtw-grid md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-6 tw-items-center tw-justify-center> div classtw-w-full> div classtw-flex tw-items-center tw-justify-start tw-border-r tw-border-l-0 tw-border-t-0 tw-border-b-0 lg:tw-border-solid tw-border-#e5e5e5 tw-pr-4 tw-mb-3 lg:tw-mb-0> span classtw-text-2.5rem tw-me-3 tw-text-black > i classmaterial-icons>redeem/i> /span> div> h5 class text-md tw-text-black tw-font-normal>Wide Selection/h5> p class text-base tw-text-black tw-m-0>Weve Got Exactly What You Need/p> /div> /div> /div> div classtw-w-full> div classtw-flex tw-items-center tw-justify-start tw-border-r tw-border-l-0 tw-border-t-0 tw-border-b-0 lg:tw-border-solid tw-border-#e5e5e5 tw-pr-4 tw-mb-3 lg:tw-mb-0> span classtw-text-2.5rem tw-me-3 tw-text-black > i classmaterial-icons>local_shipping/i> /span> div> h5 class text-md tw-text-black tw-font-normal>Express Delivery/h5> p class text-base tw-text-black tw-m-0>Receive your order in just a few days/p> /div> /div> /div> div classtw-w-full> div classtw-flex tw-items-center tw-justify-start tw-border-r tw-border-l-0 tw-border-t-0 tw-border-b-0 lg:tw-border-solid tw-border-#e5e5e5 tw-pr-4 tw-mb-3 lg:tw-mb-0> span classtw-text-2.5rem tw-me-3 tw-text-black > i classmaterial-icons>attach_money/i> /span> div> h5 class text-md tw-text-black tw-font-normal>Exclusive Pricing/h5> p class text-base tw-text-black tw-m-0>We offer the lowest prices/p> /div> /div> /div> div classtw-w-full> div classtw-flex tw-items-center tw-justify-start tw-mb-3 lg:tw-mb-0> span classtw-text-2.5rem tw-me-3 tw-text-black> i classmaterial-icons>support/i> /span> div> h5 class text-md tw-text-black tw-font-normal>Excellent Service/h5> p class text-base tw-text-black tw-m-0>Call us: (855) 535-5033/p> /div> /div> /div> /div> /div> /div> /div>/div>div idproductContainer>/div>div styleoverflow:hidden;> div classtw-blog-container12 section-max-width nAlaDFdv krctLPpT tw-px-3 idblogSection> div class tw-mb-2> h2 class text-xl tw-text-center tw-text-black tw-font-bold>Latest Blog Posts/h2> /div> div classtw-flex tw-flex-col tw-gap-5> div classblog-entry active tw-bg-white tw-rounded-2xl tw-overflow-hidden tw-transition-all tw-duration-500 tw-shadow-none tw-h-165px data-index0> div classblog-entry-content tw-flex tw-flex-row tw-items-center tw-justify-between tw-gap-5 tw-border-t tw-border-r-0 tw-border-l-0 tw-border-b-0 tw-border-solid tw-border-black/50 tw-py-10 tw-pl-4 tw-transition-all tw-duration-500> div class tw-flex-2 tw-max-w-100% md:tw-max-w-45%> time classblog-date text-sm tw-text-gray-500 tw-block tw-mb-4>October 26, 2025/time> h3 class text-lg tw-font-bold tw-mb-4 tw-text-black tw-line-clamp-2>Importance of Quality Glass Products for Your Home/h3> div class text-sm tw-text-black tw-leading-relaxed tw-line-clamp-2 tw-mb-4>Glass is an essential material used in various aspects of home decor and construction. Its versatility and aesthetic appeal make it a popular choice for homeowners looking to enhance their living spaces.When it comes to selecting glass products for your home, quality should be a top priority. High-quality glass not only improves the overall look of your interiors but also offers durability and functionality.Whether you are considering glass windows, doors, or decorative pieces, investing in premium glass products can significantly elevate the ambiance of your home./div> a class button-primary text-sm tw-inline-block tw-px-4 tw-py-2 onclickwindow.location.hrefblog/glass-products-enhance-home-decor>Read More →/a> /div> div class tw-flex-1 tw-max-w-400px tw-min-h-300px tw-max-h-300px md:tw-pl-5> img src./config/images/blog_images/blog_690295a3cc7171.37435207.webp altImportance of Quality Glass Products for Your Home classtw-w-full tw-min-h-300px tw-max-h-300px tw-rounded-xl tw-object-cover /> /div> /div> /div> div classblog-entry tw-bg-white tw-rounded-2xl tw-overflow-hidden tw-transition-all tw-duration-500 tw-shadow-none tw-h-165px data-index1> div classblog-entry-content tw-flex tw-flex-row tw-items-center tw-justify-between tw-gap-5 tw-border-t tw-border-r-0 tw-border-l-0 tw-border-b-0 tw-border-solid tw-border-black/50 tw-py-10 tw-pl-4 tw-transition-all tw-duration-500> div class tw-flex-2 tw-max-w-100% md:tw-max-w-45%> time classblog-date text-sm tw-text-gray-500 tw-block tw-mb-4>October 15, 2025/time> h3 class text-lg tw-font-bold tw-mb-4 tw-text-black tw-line-clamp-2>Choosing the Right Paint Colors for Every Room/h3> div class text-sm tw-text-black tw-leading-relaxed tw-line-clamp-2 tw-mb-4>Selecting the perfect paint colors for each room in your home can be a challenging task. The color palette you choose can greatly impact the mood, ambiance, and overall aesthetics of your living space.Before picking a paint color, consider factors such as natural light exposure, room size, and existing furniture and decor. Experiment with color swatches and samples to find the ideal shades that complement your interior design style.From calming neutrals to bold statement hues, the right paint colors can transform your rooms into inviting and cozy retreats that reflect your personal taste and preferences.Dont be afraid to mix and match different colors to create visually appealing accents and focal points within your home.Remember, paint colors are an easy and affordable way to refresh and update your living spaces without undertaking major renovations./div> a class button-primary text-sm tw-inline-block tw-px-4 tw-py-2 onclickwindow.location.hrefblog/choosing-the-perfect-paint-colors>Read More →/a> /div> div class tw-flex-1 tw-max-w-400px tw-min-h-300px tw-max-h-300px md:tw-pl-5> img src./config/images/blog_images/blog_690295a476fc07.80620694.webp altChoosing the Right Paint Colors for Every Room classtw-w-full tw-min-h-300px tw-max-h-300px tw-rounded-xl tw-object-cover /> /div> /div> /div> div classblog-entry tw-bg-white tw-rounded-2xl tw-overflow-hidden tw-transition-all tw-duration-500 tw-shadow-none tw-h-165px data-index2> div classblog-entry-content tw-flex tw-flex-row tw-items-center tw-justify-between tw-gap-5 tw-border-t tw-border-r-0 tw-border-l-0 tw-border-b-0 tw-border-solid tw-border-black/50 tw-py-10 tw-pl-4 tw-transition-all tw-duration-500> div class tw-flex-2 tw-max-w-100% md:tw-max-w-45%> time classblog-date text-sm tw-text-gray-500 tw-block tw-mb-4>October 04, 2025/time> h3 class text-lg tw-font-bold tw-mb-4 tw-text-black tw-line-clamp-2>Innovative Wallpaper Trends to Enhance Your Walls/h3> div class text-sm tw-text-black tw-leading-relaxed tw-line-clamp-2 tw-mb-4>Wallpaper is a versatile design element that can add texture, pattern, and personality to your walls. With a wide range of options available, from traditional prints to modern graphics, wallpaper allows you to express your unique style and create a distinct ambiance in each room.Embrace the latest wallpaper trends, such as botanical motifs, geometric patterns, and metallic finishes, to give your walls a fresh and contemporary look.Consider using wallpaper as an accent wall to create a focal point or opt for subtle designs to add depth and dimension to smaller spaces.With innovative wallpaper materials like peel-and-stick options, you can easily update your walls without the hassle of traditional wallpaper installation.Transform your home with the transformative power of wallpaper and explore endless possibilities to customize your living spaces.From bold statement wallpapers to subtle textures, find the perfect wallpaper designs to reflect your personal style and elevate your interiors./div> a class button-primary text-sm tw-inline-block tw-px-4 tw-py-2 onclickwindow.location.hrefblog/enhancing-walls-with-innovative-wallpaper>Read More →/a> /div> div class tw-flex-1 tw-max-w-400px tw-min-h-300px tw-max-h-300px md:tw-pl-5> img src./config/images/blog_images/blog_690295a52b7df3.38909056.webp altInnovative Wallpaper Trends to Enhance Your Walls classtw-w-full tw-min-h-300px tw-max-h-300px tw-rounded-xl tw-object-cover /> /div> /div> /div> /div> /div>/div>footer classfooter43 p-0 py-4 py-lg-5 footer-background-color idfooter> div classsection-max-width px-3> div classrow mb-3 > div classcol-lg-4 col-md-4 col-6 > div classrow> h5 class text-md>SHOP MENU/h5> div classcol-lg-6 col-12> ul> li class> a classtext-base hrefindex.php>Welcome/a> /li> li class> a classtext-base hrefcontact>Contact Us/a> /li> li class> a classtext-base hrefterms>Terms/a> /li> li class> a classtext-base hrefprivacy>Privacy Assurance/a> /li> /ul> /div> /div> /div> div classcol-lg-4 col-md-4 col-6> div classrow> h5 class text-md>HELP/h5> ul> li> p> a class text-base hrefcontact>Contact Us/a> /p> /li> li> p> a class text-base hrefterms>Terms/a> /p> /li> li> p> a class text-base hrefprivacy>Privacy Assurance/a> /p> /li> /ul> /div> /div> div classcol-lg-4 col-md-4 col-12 company> h5 class text-md>Artful Reflections Wall Coverings/h5> ul> li class text-base> p>Modern Trial Commerce/p> /li> li class text-base> p class style word-break: break-all;>3009 Hawksdale Dr Unit #124, Las Vegas, Nevada, 89134 USA/p> /li> li class text-base> p class> a class hreftel:(855) 535-5033>(855) 535-5033/a> /p> /li> li class text-base> p class> a class href/cdn-cgi/l/email-protection#66151316160914122607141200130a1403000a0305120f09081511070a0a05091003140f0801154805090b style word-break: break-all;>span class__cf_email__ data-cfemail92e1e7e2e2fde0e6d2f3e0e6f4e7fee0f7f4fef7f1e6fbfdfce1e5f3fefef1fde4f7e0fbfcf5e1bcf1fdff>email protected/span>/a> /p> /li> li class text-base> p class>8 am to 4 pm | Mon - Fri/p> /li> /ul> /div> /div> div classrow > div classcol-lg-6 col-12 text-lg-start text-md-start text-center > div class> p class m-0 text-base>© 2026 Artful Reflections Wall Coverings. All Rights Reserved/p> /div> /div> div classcol-lg-6 col-12 text-lg-end text-md-end text-center> div classfooter-cc mt-2 mt-lg-0> div classfooter-cc > img classpe-2 src./config/images/payment/O7nDlDLfrEaS0MAW8nqQAyHsQRfKEFSy7HtJz16M.webp> img classpe-2 src./config/images/payment/BSSUD2leOqqOHvxDvZFhmaZjTOSmFFUlk5IQklL3.webp> /div> /div> /div> /div> /div>/footer> div classemailpop13 modal fade idmarketingPopup> div classmodal-dialog modal-lg> div classmodal-content styleborder:none;> div classmodal-header styleborder-bottom:none;> button typebutton idbtn2 classclosebtn text-md data-bs-dismissmodal aria-labelClose> span aria-hiddentrue stylecolor:#000;> i classmaterial-icons>close/i> /span> /button> /div> div classmodal-body p-0 > div classrightContainer > h1 classtitleContents text-xl>Subscribe for Exclusive Offers!/h1> p idbtn1 classparatext text-base>Sign up to receive updates on our latest products and special promotions./p> form classform idmarketingPopupForm> div classform-group inputmainiv> input typeemail classform-control emailinput text-base required idemail placeholderEnter your e-mail> span classtext-danger error-email text-base styledisplay: none;>Email/span> /div> button typesubmit idsaveButton classbutton-primary w-100 mt-2 text-sm styledisplay: flex;justify-content: center;align-items: center;padding: 12px;min-height: 40px;>Subscribe Now/button> /form> button classbuttonnothanks text-base data-bs-dismissmodal>No, Thanks/button> /div> /div> /div> /div>/div> div classmodal fade idquickViewModal tabindex-1 aria-labelledbyquickViewModalLabel aria-hiddentrue> div classmodal-dialog modal-lg> div classmodal-content > div classmodal-header> h5 classmodal-title text-center idquickViewModalLabel>/h5> button typebutton classbtn-close data-bs-dismissmodal aria-labelClose>/button> /div> div classmodal-body> div classrow idquickViewModalContent> /div> /div> /div> /div> /div> script data-cfasyncfalse src/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js>/script>script srchttps://cdn.jsdelivr.net/npm/bootstrap@5.1.0/dist/js/bootstrap.bundle.min.js>/script> script typetext/javascript src./config/js/include/index.js>/script> script typetext/javascript src./config/js/include/custom.js>/script> script typetext/javascript srchttps://cdnjs.cloudflare.com/ajax/libs/wow/1.1.2/wow.min.js>/script> script> new WOW().init(); /script> script srchttps://cdnjs.cloudflare.com/ajax/libs/gsap/1.19.1/TweenMax.min.js> /script> style>@import url(https://fonts.googleapis.com/css2?familyRoboto:ital,wght@0,100..900;1,100..900&displayswap);/style>style>@import url(https://fonts.googleapis.com/css2?familyOswald:wght@200..700&displayswap);/style>style> *{ font-family: Roboto, sans-serif; } h1, h2, h3, h4, h5, h6 { font-family: Oswald, sans-serif; }/style> div classproduct-notification5> div idProductNotificationBanner classproduct-notification-section > div classproduct-notification-product-image> img src./config/images/products/H51c533b19d00453ea7e60e43fb4d1a043.jpg_720x720q50.webp altCustom Abstract Texture Wallpaper /> /div> div classproduct-notification-product-title text-base> a classbig-font-weight text-base hrefproduct/custom-abstract-texture-wallpaper> span classsmall-font-weight text-base>Someone purchased/span>Custom Abstract Texture Wallpaper/a> /div> /div>/div> script> $(document).ready(function() { $(#loadingMask).fadeOut(); }); /script> script srchttps://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.3.4/owl.carousel.min.js>/script> script srchttps://cdnjs.cloudflare.com/ajax/libs/malihu-custom-scrollbar-plugin/3.1.5/jquery.mCustomScrollbar.concat.min.js>/script>script srcscript.js>/script>script srcconfig/js/site_custom.js>/script>script> function productNotification() { var payload { method: productNotification, } $.ajax({ url: config/function.php, type: POST, dataType: json, data: { payload: payload }, success: function(response) { console.log(response.dataresponse.dataresponse.data,response.data); $(#ProductNotificationBanner).html(response.data); $(#ProductNotificationBanner).show(); }, error: function(xhr, status, error) { console.error(xhr.responseText); } }); setTimeout(function() { $(#ProductNotificationBanner).hide(); }, 5000); } // Generate a random interval in milliseconds between min and max seconds function getRandomInterval(minSeconds, maxSeconds) { return Math.floor(Math.random() * (maxSeconds - minSeconds + 1) + minSeconds) * 1000; } // Recursive function to start and keep showing notifications at random intervals function showNotificationWithRandomIntervals() { // Show notification and calculate the next random interval productNotification(); // Schedule the next notification after a random time between 7 and 10 seconds var nextInterval getRandomInterval(12, 15); setTimeout(showNotificationWithRandomIntervals, nextInterval); } var initialInterval getRandomInterval(3, 7); setTimeout(showNotificationWithRandomIntervals, initialInterval); /script>script> const productsPerPage 6; let currentPage 1; let isLoading false; // Prevent multiple AJAX calls let paginationType number; loadProducts(paginationType none ? 1 : currentPage, false, paginationType none); function loadProducts(page 1, append false, fetchAll false) { if (isLoading) return; isLoading true; // Set loading state let requestData fetchAll ? { all: true,filename: index.php } : { page, limit: productsPerPage,filename: index.php }; // Get the current URL search parameters const urlParams new URLSearchParams(window.location.search); // Check if sort parameter exists or if you want to add all parameters if (urlParams.has(sort) || true) { // Remove || true if you only want to add when sort exists // Object to hold grouped parameters (for arrays) const groupedParams {}; // Group parameters that end with (array parameters) urlParams.forEach((value, key) > { // Check if this is an array parameter (ends with ) const isArrayParam key.endsWith(); const baseKey isArrayParam ? key.slice(0, -2) : key; if (isArrayParam) { // Initialize array if not exists if (!groupedParamsbaseKey) { groupedParamsbaseKey ; } // Add the value to the array groupedParamsbaseKey.push(value); } else { // For non-array parameters, just add the value if (!groupedParamskey) { groupedParamskey value; } } }); // Merge the grouped parameters into requestData Object.assign(requestData, groupedParams); } // Show the loading spinner inside the product section $(#loading-spinner).show(); $.ajax({ url: fetch_products.php, type: POST, data: requestData, success: function(response) { const data JSON.parse(response); $(.load-more-div).remove(); if (append) { $(.product-wrapper).append(data.html); } else { $(#productContainer).html(data.html); } console.log(page,page); // Hide the loading spinner $(#loading-spinner).hide(); if (!fetchAll) { currentPage page + 1; $(#load-more).attr(data-page, currentPage); } // Generate pagination numbers if pagination type is number // if (paginationType number) { // generatePaginationNumbers(page, data.totalPages); // } $(#productContainer).trigger(productsLoaded); if(page data.totalPages){ isLoading false; // Reset loading state } }, error: function(xhr, status, error) { console.error(AJAX Error:, error); // Hide the loading spinner in case of error $(#loading-spinner).hide(); isLoading false; // Reset loading state } }); } // Function to check if sort parameters exist in the URL function hasSortParameters() { const urlParams new URLSearchParams(window.location.search); // List of sort-related parameters you want to check const sortParams sort, order, sort_by, order_by; // Add any other sort params you use return sortParams.some(param > urlParams.has(param)); } if(number infinite_scroll){ // Infinite Scroll // Function to check if the product section is visible function isProductSectionInView() { const productWrapper $(.product-wrapper); if (productWrapper.length 0) return false; const windowHeight $(window).height(); const scrollTop $(window).scrollTop(); const elementOffset productWrapper.offset().top; const elementHeight productWrapper.outerHeight(); return scrollTop + windowHeight > elementOffset + elementHeight + 200; } // Scroll event to load more products when near the product section $(window).on(scroll, function() { if (isProductSectionInView()) { loadProducts(currentPage, true); } }); }else if(number load_button){ // Load More Button Click $(document).on(click, #load-more, function() { let nextPage $(this).attr(data-page) || 1; loadProducts(parseInt(nextPage), true); }); }else if(number number){ // function generatePaginationNumbers(currentPage, totalPages) { // const paginationContainer $(div classpagination-container>/div>); // const paginationList $(ul classpagination>/ul>); // // Add Previous button // if (currentPage > 1) { // paginationList.append(` // li classpage-item> // a href# classpage-link-btn page-link data-page${currentPage - 1}>Previous/a> // /li> // `); // } // // Add page numbers // for (let i 1; i totalPages; i++) { // const isActive i currentPage ? btn-primary : btn-secondary; // paginationList.append(` // li classpage-item> // a href# classpage-link-btn btn ${isActive} data-page${i}>${i}/a> // /li> // `); // } // // Add Next button // if (currentPage totalPages) { // paginationList.append(` // li classpage-item> // a href# classpage-link-btn page-link data-page${currentPage + 1}>Next/a> // /li> // `); // } // // Append pagination to the container // paginationContainer.append(paginationList); // $(#productContainer).append(paginationContainer); // } // Handle click events on pagination numbers $(document).on(click, .page-link-btn, function(e) { e.preventDefault(); const page $(this).data(page); loadProducts(page); }); } var quickViewProdId ; function ProductQuickView(index,id) { $(#quickViewModalContent).html(); $.ajax({ url: product_quick_view.php, type: POST, data: { productId: index}, success: function(response) { const data JSON.parse(response); $(#quickViewModalContent).html(data.html); $(#quickViewModal).modal(show); const $product $(`data-product-id${id}`); quickViewProdId id; initProduct($product,id); }, error: function(xhr, status, error) { console.error(AJAX Error:, error); } }); } // Clear modal content & remove product data on modal close $(#quickViewModal).on(hidden.bs.modal, function () { $(#quickViewModalContent).empty(); // Clear modal removeProductFromSessionStorage(quickViewProdId); // Remove product from storage quickViewProdId ; }); $(document).ready(function() { // Handle form submission $(#subscription-form).on(submit, function(e) { e.preventDefault(); // Prevent the default form submission // You can add form validation here if needed // Simulate an AJAX call (replace this with your actual AJAX call) // For demonstration, well just show the success message after a short delay setTimeout(function() { // Hide the form $(#subscription-form).hide(); // Show success message $(#success-message).show(); // Scroll to the newsletter section scrollToSection(#newsletter, 3); }, 500); }); // Robust scrolling function with retry capability function scrollToSection(selector, retriesLeft) { const element $(selector); if (element.length > 0 && element.is(:visible)) { const offset 100; // Adjust as needed const position element.offset().top - offset; $(html, body).stop(true).animate({ scrollTop: position }, { duration: 800, easing: swing, complete: function() { console.log(Successfully scrolled to section); } }); } else if (retriesLeft > 0) { console.log(Element not ready, retrying...); setTimeout(function() { scrollToSection(selector, retriesLeft - 1); }, 500); } else { console.error(Failed to scroll to section after multiple attempts); } } $(document).on(submit, #filterSortForm, function(event) { event.preventDefault(); // Prevent the default form submission // Use serializeArray() instead of serialize() to properly handle arrays var formDataArray $(this).serializeArray(); var formData $.param(formDataArray); // This properly handles arrays var newUrl window.location.pathname + ? + formData; // Change the URL without reloading the page history.pushState(null, , newUrl); isLoading false; currentPage 1; loadProducts(1,false,false); }); }); /script>script srchttps://cdn.jsdelivr.net/npm/@fingerprintjs/fingerprintjs@3/dist/fp.min.js>/script>script srchttps://unpkg.com/aos@2.3.1/dist/aos.js>/script>script>const fpPromise FingerprintJS.load();fpPromise.then(fp > fp.get()).then(result > { const visitorId result.visitorId; // Send visitorId to the server via AJAX fetch(store_visitor.php, { method: POST, headers: { Content-Type: application/json, }, body: JSON.stringify({ visitorId: visitorId }), }) .then(response > response.json()) .then(data > { console.log(data.message); // Success or error message }) .catch(error > { console.error(Error:, error); });});/script>script> /script>script>// Get all products data from session storagefunction getAllProductsData() { return JSON.parse(sessionStorage.getItem(productsData)) || {};}// Get specific product data by IDfunction getProductData(productId) { const products getAllProductsData(); return productsproductId || null;}// Use a structured approach:function updateProductSessionData(productId, data) { // Get existing products data or initialize empty object const productsData JSON.parse(sessionStorage.getItem(productsData)) || {}; // Initialize this products data if it doesnt exist if (!productsDataproductId) { productsDataproductId {}; } // Merge new data with existing data productsDataproductId { ...productsDataproductId, ...data }; // Save back to sessionStorage sessionStorage.setItem(productsData, JSON.stringify(productsData));}// Helper function to remove product from sessionStoragefunction removeProductFromSessionStorage(productKey) { // 1. Get current data const storedData sessionStorage.getItem(productsData); if (!storedData) return; try { // 2. Parse and verify structure const productsData JSON.parse(storedData); if (typeof productsData ! object || Array.isArray(productsData)) { throw new Error(Expected an object, got something else); } // 3. Delete the key if it exists if (productsDataproductKey) { delete productsDataproductKey; // 4. Save back to sessionStorage sessionStorage.setItem(productsData, JSON.stringify(productsData)); console.log(Removed:, productKey); // Debug log } } catch (e) { console.error(Error updating sessionStorage:, e); }}// Main document ready handler$(document).ready(function() { // Initialize each product $(.product-detail-section).each(function() { const $product $(this); const productId $product.data(product-id); // Initialize product-specific functionality initProduct($product, productId); });});/script>script> //fetch size options for each products var variantsArray ; $(document).ready(function() { var displayVariantType radio; // Remove any existing handlers first $(document).off(change, .proSize-ul inputtyperadio, .proSize-ul select, .proSize-ul inputtypetext); $(document).on(change, .proSize-ul inputtyperadio, .proSize-ul select, .proSize-ul inputtypetext, function() { console.log(Change event triggered for:, this.tagName, this.type); const $product $(this).closest(.product-detail-section); const productId $product.data(product-id); const productData getProductData(productId); if(displayVariantType dropdown){ var size_val $product.find(.proSize-ul select) .map(function() { var selectedVal $(this).find(option:selected).val(); return selectedVal && selectedVal ! ? selectedVal : null; }) .get() .filter(function(id) { return id ! null && id ! ; // Exclude null or empty IDs }) .join(-); var size_key $product.find(.proSize-ul select) .map(function() { var selectedOption $(this).find(option:selected); return selectedOption.length && selectedOption.val() ! ? selectedOption.attr(data-size) : null; }) .get() .filter(function(id) { return id ! null && id ! ; // Exclude null or empty IDs }) .join(-); }else if(displayVariantType counter){ var size_val $product.find(.proSize-ul inputtypetext).map(function() { return $(this).data(value); }).get().join( - ); var size_key $product.find(.proSize-ul inputtypetext).map(function() { return $(this).data(size); }).get().join(-); }else{ var size_val $product.find(.proSize-ul inputtyperadio:checked).map(function() { return $(this).val(); }).get().join( - ); var size_key $product.find(.proSize-ul inputtyperadio:checked).map(function() { return $(this).attr(data-size); }).get().join(-); } // Debug logging for dropdown values if(displayVariantType dropdown){ console.log(Dropdown change - size_val:, size_val); console.log(Dropdown change - size_key:, size_key); console.log(All dropdowns:, $product.find(.proSize-ul select).length); $product.find(.proSize-ul select).each(function(index) { var $select $(this); var selectedOption $select.find(option:selected); console.log(Dropdown + index + :, { selected value: selectedOption.val(), selected data-size: selectedOption.attr(data-size), has selection: selectedOption.length > 0 }); }); } updateProductSessionData(productId, { data_product_selected_size: size_val, data_product_selected_size_key: size_key }); $product.find(.pdt-button).find(button).prop(disabled,true); if(displayVariantType dropdown){ // Handle dropdowns var selectedId $(this).find(option:selected).data(id); $product.find(.proSize-ul select).find(option).removeAttr(disabled); }else{ // Collect selected variation IDs var selectedId $(this).attr(data-id); $product.find(.proSize-ul inputtyperadio).removeAttr(disabled); } // console.log(selectedId,selectedId); var prod_id_inner productData.id; var prod_index productData.index; sale_type productData.data_sale_type; sale_type parseInt(sale_type); console.log(sale_type); if(sale_type 1 && no yes){ $.ajax({ url: config/config.php, type: POST, data: { type: 9, prod_id_inner: prod_id_inner, prod_index:prod_index, variation_id: selectedId }, cache: false, success: function(result) { var response JSON.parse(result); if(response.length 0){ getSelectedVariationsAndPrice($product,productId); }else{ // response is the list of variation IDs to disable response.forEach(function(variationID) { // Find input fields with the matching data-id and disable them if(displayVariantType dropdown){ // Handle dropdowns $product.find(select optiondata-id + variationID + ) .prop(disabled, true) .prop(selected, false); }else{ // Collect selected variation IDs $product.find(inputdata-id + variationID + ) .prop(disabled, true) .prop(checked, false); } }); } } }); }else{ getSelectedVariationsAndPrice($product,productId); } }); $(document).off(change, .prod-optionstypecheckbox); $(document).on(change, .prod-optionstypecheckbox, function() { const $product $(this).closest(.product-detail-section); const productId $product.data(product-id); const productData getProductData(productId); const value $(this).attr(value); // Get group value const isChecked $(this).is(:checked); // Check if the clicked option is checked var currentPriceType $(this).attr(data-price-type); // Get the price type (fixed/percentage) var productPrice productData.data_product_price_variant; let price value; if (isChecked) { if (currentPriceType percentage) { price (price / 100) * parseFloat(productPrice); } var subTotalPrice parseFloat($product.find(.subtotal_price).text()); // Convert to float var pdtPrice subTotalPrice + parseFloat(price); // Ensure value is also a number $product.find(.subtotal_price).text(pdtPrice.toFixed(2)); if(parseInt($product.find(.qty).val()) > 1){ $product.find(.single_pdt_price).text( (parseInt($product.find(.qty).val()) * $product.find(.subtotal_price).text() * 1 + $product.find(.shipping_price).text() * 1).toFixed(2)); }else{ $product.find(.single_pdt_price).text(($product.find(.subtotal_price).text() * 1 + $product.find(.shipping_price).text() * 1).toFixed(2)); } updateProductSessionData(productId, { data_product_price: pdtPrice, data_total_price: pdtPrice, }); } else { var subTotalPrice parseFloat($product.find(.subtotal_price).text()); // Convert to float if (currentPriceType percentage) { price (price / 100) * parseFloat(productPrice); } var pdtPrice subTotalPrice - parseFloat(price); // Ensure value is also a number $product.find(.subtotal_price).text(pdtPrice.toFixed(2)); if(parseInt($product.find(.qty).val()) > 1){ $product.find(.single_pdt_price).text( (parseInt($product.find(.qty).val()) * $product.find(.subtotal_price).text() * 1 + $product.find(.shipping_price).text() * 1).toFixed(2)); }else{ $product.find(.single_pdt_price).text(($product.find(.subtotal_price).text() * 1 + $product.find(.shipping_price).text() * 1).toFixed(2)); } updateProductSessionData(productId, { data_product_price: pdtPrice, data_total_price: pdtPrice, }); } var optionsValue $product.find(.prod-optionstypecheckbox:checked, .prod-optionstyperadio:checked) .map(function() { return $(this).attr(data-value); }) .get() .join(,); updateProductSessionData(productId, { data_product_selected_option: optionsValue, }); }); let previousValues {}; $(document).off(change, .prod-optionstyperadio); $(document).on(change, .prod-optionstyperadio, function() { const $product $(this).closest(.product-detail-section); const productId $product.data(product-id); const productData getProductData(productId); var currentRadioValue $(this).val(); // The value of the newly selected radio button var groupName $(this).attr(name); // Get the name of the radio group (this groups them) var currentPriceType $(this).attr(data-price-type); // Get the price type (fixed/percentage) var productPrice productData.data_product_price_variant; // If there is a previous value for this group if (previousValuesgroupName ! undefined) { var previousRadioButton $product.find(inputtyperadioname + groupName + value + previousValuesgroupName + ); // If there was a previous selection, subtract its price if (previousRadioButton.length > 0) { var prevPrice parseFloat(previousRadioButton.val()); var prevPriceType previousRadioButton.attr(data-price-type); // Adjust subtotal based on the previous price type if (prevPriceType percentage) { prevPrice (prevPrice / 100) * parseFloat(productPrice); } var subTotalPrice parseFloat($product.find(.subtotal_price).text()); var pdtPrice subTotalPrice - parseFloat(prevPrice); // Subtract previous selected options price $product.find(.subtotal_price).text(pdtPrice.toFixed(2)); // Update subtotal price } } // Add the price of the newly selected radio button var currentPrice parseFloat($(this).val()); if (currentPriceType percentage) { currentPrice (currentPrice / 100) * parseFloat(productPrice); } var subTotalPrice parseFloat($product.find(.subtotal_price).text()); var pdtPrice subTotalPrice + parseFloat(currentPrice); // Add the new selected radio options price $product.find(.subtotal_price).text(pdtPrice.toFixed(2)); // Update subtotal price if(parseInt($product.find(.qty).val()) > 1){ $product.find(.single_pdt_price).text( (parseInt($product.find(.qty).val()) * $product.find(.subtotal_price).text() * 1 + $product.find(.shipping_price).text() * 1).toFixed(2)); }else{ $product.find(.single_pdt_price).text(($product.find(.subtotal_price).text() * 1 + $product.find(.shipping_price).text() * 1).toFixed(2)); } // Update session storage with the new price updateProductSessionData(productId, { data_product_price: pdtPrice, data_total_price: pdtPrice }); var optionsValue $(.prod-optionstypecheckbox:checked, .prod-optionstyperadio:checked) .map(function() { return $(this).attr(data-value); }) .get() .join(,); updateProductSessionData(productId, { data_product_selected_option: optionsValue, }); sessionStorage.setItem(data_product_selected_option, optionsValue); // Store the current selected radio button value to use as the previous value for next change previousValuesgroupName currentRadioValue; }); }); function fetchSizes($product, productId) { const productData getProductData(productId); var checksizeoption productData.sizeOption; var prod_id_inner productData.id; var prod_index productData.index; var displayVariantType radio; if (checksizeoption yes) { $.ajax({ url: config/config.php, type: POST, data: { type: 5, prod_id_inner: prod_id_inner, prod_index:prod_index }, cache: false, success: function(result) { console.log(AJAX result for dropdowns:, result); $product.find(p.proSize-ul).html(result); // Wait a bit for DOM to be ready, then set initial values setTimeout(function() { console.log(After populating dropdowns:); console.log(Total dropdowns found:, $product.find(.proSize-ul select).length); $product.find(.proSize-ul select).each(function(index) { var $select $(this); console.log(Dropdown + index + :, { html: $select.html(), selected value: $select.val(), options count: $select.find(option).length }); }); if(displayVariantType dropdown){ var firstDropdown $product.find(.proSize-ul select).first(); if(firstDropdown.length) { var firstOption firstDropdown.find(option:selected); if(firstOption.length) { var size_val firstOption.val(); var size_key firstOption.attr(data-size); updateProductSessionData(productId, { data_product_selected_size: size_val, data_product_selected_size_key: size_key, data_product_shipping: 0 }); } } } else if(displayVariantType counter){ var firstInput $product.find(.proSize-ul inputtypetext).first(); if(firstInput.length) { var size_val firstInput.data(value); var size_key firstInput.data(size); updateProductSessionData(productId, { data_product_selected_size: size_val, data_product_selected_size_key: size_key, data_product_shipping: 0 }); } } else { var firstRadio $product.find(.proSize-ul inputtyperadio:checked).first(); if(firstRadio.length) { var size_val firstRadio.val(); var size_key firstRadio.attr(data-size); updateProductSessionData(productId, { data_product_selected_size: size_val, data_product_selected_size_key: size_key, data_product_shipping: 0 }); } } // Trigger the change event only once for the first checked input if(displayVariantType dropdown){ const firstDropdown $product.find(.proSize-ul select).first(); if(firstDropdown.length) { firstDropdown.trigger(change); } }else if(displayVariantType counter){ var firstInput $product.find(.proSize-ul inputtypetext).first(); if(firstInput.length) { firstInput.trigger(change); } }else{ var firstRadio $product.find(.proSize-ul inputtyperadio:checked).first(); if(firstRadio.length) { firstRadio.trigger(change); } } }, 100); } }); }else{ $product.find(div.size-options-text).hide(); $product.find(div.size-opts).hide(); updateProductSessionData(productId, { data_product_selected_size: , data_product_selected_size_key: }); } } function priceFixesAccordingToBilling($product, productId) { const productData getProductData(productId); var bill_model productData.billingModel; if(bill_model 8){ $max_qty productData.trialMaxqty; $is_show_max_qty productData.trialMaxqty; }else{ $max_qty productData.maxQuantity; $is_show_max_qty productData.enableMaxqty; } var max_qty $max_qty; var is_show_max_qty $is_show_max_qty; $product.find(.pdt-button).find(button).prop(disabled,true); // Run Preloader $(#loadingMask).fadeIn(); if (bill_model 4 || bill_model 5 || bill_model 6 || bill_model 7) { var subtotal $(span.subtotal_price).html(); var shipping $(span.shipping_price).html(); var total $(span.single_pdt_price).html(); updateProductSessionData(productId, { data_product_price: subtotal, data_product_shipping: shipping, data_total_price: total, data_product_type: , }); } else { updateProductSessionData(productId, { data_product_type: , }); } $(#loadingMask).fadeOut(); let getPdtType $product.find(.pdt_type+bill_model+ .selectbox).val(); if (getPdtType undefined && bill_model 1) { getPdtType 1; } if(getPdtType 1 && is_show_max_qty > 0){ if(max_qty 1){ $product.find(.qty-col .increase).prop(disabled, true); } $product.find(.qty-col).css(display, flex); $product.find(.select-qty-text).css(display, block); }else{ $product.find(.qty-col).css(display, none); $product.find(.select-qty-text).css(display, none); } setTimeout(function(){ getSelectedVariationsAndPrice($product,productId); },2000); } function getSelectedVariationsAndPrice($product, productId) { const productData getProductData(productId); var displayVariantType radio; if(displayVariantType dropdown){ // Handle dropdowns var selectedIds $product.find(.proSize-ul select) .map(function() { return $(this).find(option:selected).attr(data-id); }) .get() .filter(function(id) { return id; // Exclude null or empty IDs }) .join(,); }else if(displayVariantType counter){ var selectedIds $product.find(.proSize-ul inputtypetext).map(function() { return $(this).data(id); }).get().join(,); }else{ // Collect selected variation IDs var selectedIds $product.find(.proSize-ul inputtyperadio:checked).map(function() { return $(this).attr(data-id); }).get().join(,); } var checksizeoption productData.sizeOption; var prod_id_inner productData.id; var prod_index productData.index; sale_type productData.data_sale_type; sale_type parseInt(sale_type); if(sale_type 1){ $.ajax({ url: config/config.php, type: POST, data: { type: 7, prod_id_inner: prod_id_inner, prod_index:prod_index, variation_ids: selectedIds }, cache: false, success: function(result) { var response JSON.parse(result); if(no yes && responsepdt_price > 0){ $product.find(.subtotal_old_price).show(); $product.find(span.subtotal_old_price_symbol).show(); $product.find(.subtotal_price).text(responsepdt_price); $product.find(.subtotal_old_price).text(responsepdt_old_price); }else{ $product.find(.subtotal_old_price).hide(); $product.find(span.subtotal_old_price_symbol).hide(); $product.find(.subtotal_price).text(responsepdt_old_price); responsepdt_price responsepdt_old_price; } $product.find(.subtotal_price).text(responsepdt_price); if(responsepdt_sku ! && responsepdt_sku ! null){ $product.find(.product-sku).text(responsepdt_sku); $product.find(.sku-col).show(); }else if((responsepdt_sku || responsepdt_sku null) && selectedIds ! ){ $product.find(.product-sku).text(); $product.find(.sku-col).hide(); } updateProductSessionData(productId, { data_product_price_variant: responsepdt_price, }); var subtotal parseFloat($product.find(.subtotal_price).text()); // Current subtotal price // Sum for checkboxes var selectedValuesSumCheckbox $product.find(.prod-optionstypecheckbox:checked).map(function () { var value parseFloat($(this).val()); // Get the value var priceType $(this).attr(data-price-type); // Get the price type (fixed/percentage) if (priceType percentage) { return (value / 100) * subtotal; // Calculate percentage of the subtotal } else { return value; // Fixed price } }).get().reduce(function (acc, value) { return acc + value; // Sum all the selected values }, 0); // Sum for radio buttons var selectedValuesSumRadio $product.find(.prod-optionstyperadio:checked).map(function () { var value parseFloat($(this).val()); // Get the value var priceType $(this).attr(data-price-type); // Get the price type (fixed/percentage) if (priceType percentage) { return (value / 100) * subtotal; // Calculate percentage of the subtotal } else { return value; // Fixed price } }).get().reduce(function (acc, value) { return acc + value; // Sum all the selected values }, 0); if(selectedValuesSumCheckbox > 0){ responsepdt_price (parseFloat(responsepdt_price) + parseFloat(selectedValuesSumCheckbox.toFixed(2))).toFixed(2); } if(selectedValuesSumRadio > 0){ responsepdt_price (parseFloat(responsepdt_price) + parseFloat(selectedValuesSumRadio.toFixed(2))).toFixed(2); } $product.find(.subtotal_price).text(responsepdt_price); if(parseInt($product.find(.qty).val()) > 1){ $product.find(.single_pdt_price).text( (parseInt($product.find(.qty).val()) * $product.find(.subtotal_price).text() * 1 + $product.find(.shipping_price).text() * 1).toFixed(2)); }else{ $product.find(.single_pdt_price).text(($product.find(.subtotal_price).text() * 1 + $product.find(.shipping_price).text() * 1).toFixed(2)); } updateProductSessionData(productId, { data_product_price: response.pdt_price, data_total_price : response.pdt_price }); $product.find(.pdt-button).find(button).prop(disabled,false); } }); }else{ var subtotal parseFloat($product.find(.subtotal_price).text()); // Current subtotal price updateProductSessionData(productId, { data_product_price_variant: subtotal, }); // Sum for checkboxes var selectedValuesSumCheckbox $product.find(.prod-optionstypecheckbox:checked).map(function () { var value parseFloat($(this).val()); // Get the value var priceType $(this).attr(data-price-type); // Get the price type (fixed/percentage) if (priceType percentage) { return (value / 100) * subtotal; // Calculate percentage of the subtotal } else { return value; // Fixed price } }).get().reduce(function (acc, value) { return acc + value; // Sum all the selected values }, 0); // Sum for radio buttons var selectedValuesSumRadio $product.find(.prod-optionstyperadio:checked).map(function () { var value parseFloat($(this).val()); // Get the value var priceType $(this).attr(data-price-type); // Get the price type (fixed/percentage) if (priceType percentage) { return (value / 100) * subtotal; // Calculate percentage of the subtotal } else { return value; // Fixed price } }).get().reduce(function (acc, value) { return acc + value; // Sum all the selected values }, 0); if(selectedValuesSumCheckbox > 0){ var currentPrice parseFloat(selectedValuesSumCheckbox); var subTotalPrice parseFloat($product.find(.subtotal_price).text()); var pdtPrice subTotalPrice + currentPrice; // Add the new selected radio options price $product.find(.subtotal_price).text(pdtPrice.toFixed(2)); // Update subtotal price if(parseInt($product.find(.qty).val()) > 1){ $product.find(.single_pdt_price).text( (parseInt($product.find(.qty).val()) * $product.find(.subtotal_price).text() * 1 + $product.find(.shipping_price).text() * 1).toFixed(2)); }else{ $product.find(.single_pdt_price).text(($product.find(.subtotal_price).text() * 1 + $product.find(.shipping_price).text() * 1).toFixed(2)); } // Update session storage with the new price updateProductSessionData(productId, { data_product_price: pdtPrice, data_total_price : pdtPrice }); } if(selectedValuesSumRadio > 0){ var currentPrice parseFloat(selectedValuesSumRadio); var subTotalPrice parseFloat($product.find(.subtotal_price).text()); var pdtPrice subTotalPrice + currentPrice; // Add the new selected radio options price $product.find(.subtotal_price).text(pdtPrice.toFixed(2)); // Update subtotal price if(parseInt($product.find(.qty).val()) > 1){ $product.find(.single_pdt_price).text( (parseInt($product.find(.qty).val()) * $product.find(.subtotal_price).text() * 1 + $product.find(.shipping_price).text() * 1).toFixed(2)); }else{ $product.find(.single_pdt_price).text(($product.find(.subtotal_price).text() * 1 + $product.find(.shipping_price).text() * 1).toFixed(2)); } // Update session storage with the new price updateProductSessionData(productId, { data_product_price: pdtPrice, data_total_price : pdtPrice }); } $product.find(.pdt-button).find(button).prop(disabled,false); } } function setSaleType($product, productId){ const productData getProductData(productId); var prod_id productData.data_product; var multiPrice productData.data_product_MultiPrice; var billmod productData.data_product_billing_model; if (billmod 4 || billmod 5 || billmod 6 || billmod 7) { if (billmod 4) { updateProductSessionData(productId, { data_sale_type: 2, }); var getid .pdt_type4; } if (billmod 5) { updateProductSessionData(productId, { data_sale_type: 1, }); var getid .pdt_type5; } if (billmod 6) { updateProductSessionData(productId, { data_sale_type: 2, }); var getid .pdt_type6; } if (billmod 7) { updateProductSessionData(productId, { data_sale_type: 1, }); var getid .pdt_type7; } //need to retreive which type of product is selected on page load and showing the plus minus button or dropdown var firstpdt $product.find(getid + option:first).val(); $product.find(.qty-col).css(display, flex); $product.find(.select-qty-text).css(display, block); // var isexectued; // for bill model 4,5,6,7 get the price and pass it to the next page $product.find(.selectbox).on(change, function() { var model_id $(this).val(); if (model_id 1) { updateProductSessionData(productId, { data_sale_type: 1, data_product_type: 1 }); } if (model_id 2) { updateProductSessionData(productId, { data_sale_type: 2, data_product_type: }); } if (model_id 3) { updateProductSessionData(productId, { data_sale_type: 3, data_product_type: }); } $.ajax({ url: config/config.php, type: POST, data: { type: 4, model_id: model_id, prod_id: prod_id, multiPrice: multiPrice, }, cache: false, success: function (data) { var response JSON.parse(data); var pdt_special_price parseFloat(response.pdt_special_price); var pdt_price parseFloat(response.pdt_price); var shipping_price parseFloat(response.shipping_price); if(no yes && pdt_special_price > 0){ $product.find(span.subtotal_old_price).show(); $product.find(span.subtotal_old_price_symbol).show(); var totalPrice pdt_special_price + shipping_price; $product.find(span.subtotal_price).html(pdt_special_price.toFixed(2)); $product.find(span.subtotal_old_price).html(pdt_price.toFixed(2)); $product.find(span.shipping_price).html(shipping_price.toFixed(2)); $product.find(span.single_pdt_price).html(totalPrice.toFixed(2)); updateProductSessionData(productId, { data_product_price: pdt_special_price, data_product_shipping: shipping_price, data_total_price : totalPrice }); }else{ $product.find(span.subtotal_old_price).hide(); $product.find(span.subtotal_old_price_symbol).hide(); var totalPrice pdt_price + shipping_price; $product.find(span.subtotal_price).html(pdt_price.toFixed(2)); $product.find(span.shipping_price).html(shipping_price.toFixed(2)); $product.find(span.single_pdt_price).html(totalPrice.toFixed(2)); updateProductSessionData(productId, { data_product_price: pdt_price, data_product_shipping: shipping_price, data_total_price : totalPrice }); } }, }); $product.find(.qty-col).css(display, flex); $product.find(.select-qty-text).css(display, block); //set if the product is ss or trl or cntnty if (model_id 1) { updateProductSessionData(productId, { data_sale_type: 1, }); } if (model_id 2) { updateProductSessionData(productId, { data_sale_type: 2, }); } if (model_id 3) { updateProductSessionData(productId, { data_sale_type: 3, }); } priceFixesAccordingToBilling($product, productId); }); } //set if the product is ss or trl or cntnty if (billmod 1) { updateProductSessionData(productId, { data_sale_type: 1, }); } else if (billmod 2 || billmod 8) { updateProductSessionData(productId, { data_sale_type: 2, }); } else if (billmod 3) { updateProductSessionData(productId, { data_sale_type: 3, }); } } function fetchOptions($product, productId) { const productData getProductData(productId); var prod_id_inner productData.id; var prod_index productData.index; $.ajax({ url: config/config.php, type: POST, data: { type: 8, prod_id_inner: prod_id_inner, prod_index:prod_index }, cache: false, success: function(result) { $product.find(p.proOption-ul).html(result); } }); } function handleQtyChange($product, productId, type) { var $qtyInput $product.find(.qty); const productData getProductData(productId); var bill_model productData.billingModel; if(bill_model 8){ $max_qty productData.trialMaxqty; }else{ $max_qty productData.maxQuantity; } //enable & disble qty in product & cart page depend on enableMaxqty key var max_qty $max_qty; let qty parseInt($qtyInput.val()); if (type increase) { qty++; } else if (type decrease && qty > 1) { qty--; } $qtyInput.val(qty); var billmodel productData.billingModel; $pdt_price parseFloat(productData.data_product_price); $tot_price parseFloat(productData.data_total_price); $pdt_qty parseFloat(qty); if (type increase) { $new_pdt_price $pdt_price * $pdt_qty if (qty max_qty) { $product.find(.qty-col .increase).attr(disabled, disabled); } if (qty > 1) { $product.find(.decrease).removeAttr(disabled); } }else{ $product.find(.qty-col .increase).removeAttr(disabled); $new_pdt_price $tot_price - $pdt_price; if (qty 1) { $product.find(.decrease).attr(disabled, disabled); } if (qty 2) { // $(.qty-col #decrease).css(display,none); $product.find(.decrease).prop(disabled, true); } } updateProductSessionData(productId, { data_total_price: $new_pdt_price.toFixed(2), data_pdt_qty: $pdt_qty, }); $product.find(.single_pdt_price).text($new_pdt_price.toFixed(2)); } function showErrorAttributes($product, productId){ const productData getProductData(productId); var not_selected {}; var displayVariantType radio; if(displayVariantType dropdown){ // Handle dropdowns $product.find(.proSize-ul select).each(function() { var name $(this).attr(name); if (!not_selectedname) { // If no value is selected in the dropdown if (!$(this).val() || $(this).val() ) { // Get the placeholder or label associated with the dropdown var placeholder $(this).find(option:first).val().split(:)0.trim(); not_selectedname placeholder || No selection; } } }); }else{ $product.find(.proSize-ul inputtyperadio).each(function() { var name $(this).attr(name); if (!not_selectedname) { // If the radio button is not checked and there are no checked radio buttons with the same name if (!$(this).prop(checked) && $product.find(inputname + name + :checked).length 0) { // Extract the text before the comma and trim whitespace var valueText $(this).val().split(:)0.trim(); not_selectedname valueText; } } }); } // Display name and value for each group for (var name in not_selected) { if (not_selected.hasOwnProperty(name)) { var errorMsg Please select the +not_selectedname+.; if(popup inline){ $product.find(.error-message-attr).append(div classerror-message stylefont-size:16px;>+errorMsg+/div>); }else if(popup popup){ $(#error_pop).append(errorMessageVariable.replace(errorMessageVariable, errorMsg)); } } } if(popup inline){ $product.find(.error-message).show(); }else if(popup popup){ $(#error_modal).show(); } } var shoppingCart ; function AddtoCart(productId) { // Scope all selectors to this specific product const $product $(`data-product-id${productId}`); const productData getProductData(productId); var enable_custom_checkout productData.enable_custom_checkout; var custom_checkout_link productData.custom_checkout_link; if(enable_custom_checkout yes){ window.location.href custom_checkout_link; return true; } $product.find(.error-message).remove(); var displayVariantType radio; if(productData.isProductAttributes > 0){ if(displayVariantType dropdown){ var selectedDropdowns $product.find(.proSize-ul select).filter(function() { return $(this).val() ! null && $(this).val() ! ; }); console.log(Validation - isProductAttributes:, productData.isProductAttributes); console.log(Validation - selectedDropdowns count:, selectedDropdowns.length); console.log(Validation - all dropdowns:, $product.find(.proSize-ul select).length); $product.find(.proSize-ul select).each(function(index) { console.log(Validation - Dropdown + index + value:, $(this).val()); }); if(productData.isProductAttributes ! selectedDropdowns.length){ showErrorAttributes($product,productId); return true; } }else{ if(productData.isProductAttributes ! $product.find(.proSize-ul inputtyperadio:checked).length){ showErrorAttributes($product,productId); return true; } } } let errorMessages ; $product.find(.proOption-ul inputdata-requiredtrue).each(function () { let name $(this).attr(name); // Check if this group has already been validated if (!$product.find(`inputname${name}:checked`).length) { if (!errorMessages.includes(name)) { errorMessages.push(name); } } }); if (errorMessages.length > 0) { $product.find(.error-message-opt).html(div classerror-message stylefont-size:16px;>Please select required options./span>) $product.find(.error-message).show(); return true; } var data_qty $product.find(.qty).val(); var singleProduct {}; var bill_mod productData.billingModel; var selected_size_key productData.data_product_selected_size_key; console.log(selected_size_key,selected_size_key); //Fill the product object with data if(selected_size_key ! && 0 0){ singleProduct.Id productData.data_product_id + - + selected_size_key.replace(/\s+/g, -); }else{ singleProduct.Id productData.data_product_id; } singleProduct.Image productData.data_product_link; singleProduct.Saletype productData.data_sale_type; singleProduct.SelectedSize productData.data_product_selected_size; singleProduct.SelectedOption productData.data_product_selected_option; //new condition for diffrent type of products singleProduct.Price productData.data_product_price; singleProduct.Ship productData.data_product_shipping; singleProduct.Rbllprice productData.data_product_rbllprice; singleProduct.billModel productData.billingModel; var prod_type productData.data_product_type; var selected_size productData.data_product_selected_size; if ((prod_type && selected_size ) || bill_mod 2 || bill_mod 8) { var pickedSize $product.find(inputnameprod-sizes:checked).val(); singleProduct.Name productData.data_product_title + + (pickedSize ? - + pickedSize : ); } else if (prod_type ! && selected_size ) { singleProduct.Name productData.data_product_title + (prod_type ? ( + prod_type + ) : ); } else if (prod_type && selected_size ! ) { singleProduct.Name productData.data_product_title + - + productData.data_product_selected_size; } else if (prod_type ! && selected_size ! ) { singleProduct.Name productData.data_product_title + ( + prod_type + ) - + productData.data_product_selected_size; } singleProduct.Alias productData.data_product_alias; singleProduct.Qty data_qty; singleProduct.Type prod_type; singleProduct.Total productData.data_total_price; singleProduct.Multiprice productData.data_product_MultiPrice; singleProduct.EnableMaxqty productData.data_product_enableMaxqty; singleProduct.StickyId $product.find(.product-sticky-id).val(); singleProduct.productType productData.data_product_type_1; singleProduct.digitalFile productData.data_product_digital_file; var flag 0; var productCart ; var tot_pdt_count 14; if (flag 0) { shoppingCart.push(singleProduct); sessionStorage.setItem(singleProduct.Id, JSON.stringify(singleProduct)); let items Object.keys(sessionStorage).filter(key > key.trim().match(/^product-/)); items.forEach(function(v, i) { var shopCart JSON.parse(sessionStorage.getItem(v)); productCart.push(shopCart); }); //console.log(productCart); var cartPdtArrNew productCart.filter(function(el) { return el ! null && el ! ; }); // Send the data to the server using fetch fetch(update_cart_session.php, { method: POST, headers: { Content-Type: application/json, }, body: JSON.stringify(cartPdtArrNew) }) .then(response > response.json()) .then(data > { window.location cart; }) .catch((error) > { console.error(Error:, error); }); console.log(shoppingCart); //return; } else { $product.find(.error-message-main).after(div classerror-message stylefont-size:16px;>Product is Already Added in The Cart/div>); $product.find(.error-message).show(); } } // Initialize a single products functionality function initProduct($product, productId) { const productData getProductData(productId); const variations productData.variations.variations || ; const variantTypeCount Object.keys(productData.variations.variations).length; updateProductSessionData(productId, { isProductAttributes: variantTypeCount }); var product_id productData.id; var billing_model productData.billingModel; $data_product productData.index; // If productData has a category array, pick a random category $data_product_category productData.category ? productData.categoryMath.floor(Math.random() * productData.category.length).replace(/'/g, ) : ; // Fallback if no category exists $data_product_title productData.name; $data_product_alias ; $priceMin productData.ssPrice; if (productData.straightSaleMultiPrice yes && productData.billingModel 1){ $priceMin productData.shop_option.shop_option1.option_price; }else if(productData.billingModel 2 || productData.billingModel 6 || productData.billingModel 7 || productData.billingModel 8){ $priceMin productData.trialPrice; }else if(productData.billingModel 3){ $priceMin productData.continuityPrice; } if (billing_model 1) { $data_product_price $priceMin ; } if (billing_model 2 || billing_model 8) { $data_product_price productData.trialShipping; } if (billing_model 3) { let cntntyprice productData.continuityPrice; let cntntyshipping productData.continuityShipping; $data_product_price_cont +cntntyprice + +cntntyshipping; $data_product_price $data_product_price_cont.toFixed(2); } if (billing_model 4) { $data_product_price productData.trialShipping; } if (billing_model 5) { $data_product_price $priceMin; } if (billing_model 6) { $data_product_price productData.trialShipping; } if (billing_model 7) { $data_product_price $priceMin; } $data_product_shipping productData.ssShipping; $data_product_rbllprice productData.trialRebillPrice; $data_product_trlshipping productData.trialShipping; $data_product_cntntyprice productData.continuityPrice; $data_product_cntntyshipping productData.continuityShipping; $data_product_billing_model productData.billingModel; $data_product_size_option productData.sizeOption; $data_product_MultiPrice productData.straightSaleMultiPrice; $data_product_id $product.find(.pdt-button).data(product-id); // First pass the PHP path to JavaScript (put this in your template/header) var phpImagesPath ./config/images; // Then in your JavaScript code: $data_product_link productData.image.startsWith(http://) || productData.image.startsWith(https://) ? productData.image : phpImagesPath + / + productData.image; $data_product_qty $product.find(.pdt-button).data(product-quantity); updateProductSessionData(productId, { data_product: $data_product, data_product_category: $data_product_category, data_product_title: $data_product_title, data_product_alias: $data_product_alias, data_product_price: $data_product_price, data_product_shipping: $data_product_shipping, data_product_rbllprice: $data_product_rbllprice, data_product_trlshipping: $data_product_trlshipping, data_product_cntntyprice: $data_product_cntntyprice, data_product_cntntyshipping: $data_product_cntntyshipping, data_product_billing_model: $data_product_billing_model, data_product_size_option: $data_product_size_option, data_product_MultiPrice: $data_product_MultiPrice, data_product_id: $data_product_id, data_product_link: $data_product_link, data_pdt_qty: $data_product_qty, data_total_price: $data_product_price, data_product: $data_product, data_product_price_variant: }); $product.find(.single_pdt_cat).text($data_product_category); // Replace ' in product_category items before checking product_cat (productData.product_category && $data_product_category && productData.product_category.some(cat > cat.replace(/'/g, ) $data_product_category)) ? $data_product_category : ; if(product_cat ! ){ $(.product-category-bd).text(product_cat); }else{ $(.product-category-bd-sp).hide(); } var bill_model productData.billingModel; var multiPrice productData.straightSaleMultiPrice; var prod_id productData.id; // fetch pricing for ss dropdown and pass it to the next page if (bill_model 1 && multiPrice no) { var subPrice1 $product.find(.subtotal_price).text() * 1; var shipPrice1 $product.find(.shipping_price).text() * 1; updateProductSessionData(productId, { data_product_price: subPrice1, data_total_price: subPrice1 + shipPrice1, }); } if(bill_model 8){ $max_qty productData.trialMaxqty; $is_show_max_qty productData.trialMaxqty; }else{ $max_qty productData.maxQuantity; $is_show_max_qty productData.enableMaxqty; } //enable & disble qty in product & cart page depend on enableMaxqty key var max_qty $max_qty; var is_show_max_qty $is_show_max_qty; var productType productData.productType; var digitalFile productData.digitalFile; updateProductSessionData(productId, { data_product_enableMaxqty: max_qty, data_product_type_1: productType, data_product_digital_file: digitalFile, }); if (is_show_max_qty > 0) { $product.find(.select-qty-text).css(display, block); $product.find(.qty-col).css(display, flex); } var b_model productData.billingModel; var pdt_id productData.id; if (b_model 1) { $product.find(.bill_model).html(One Time Sale); } if (b_model 4) { $product.find(.pdt_type4).show(); $product.find(.bill_model).hide(); } if (b_model 5) { $product.find(.pdt_type5).show(); $product.find(.bill_model).hide(); } if (b_model 6) { $product.find(.pdt_type6).show(); $product.find(.bill_model).hide(); } if (b_model 7) { $product.find(.pdt_type7).show(); $product.find(.bill_model).hide(); } priceFixesAccordingToBilling($product,productId); setSaleType($product,productId); updateProductSessionData(productId, { data_product_selected_option: , }); fetchSizes($product,productId); fetchOptions($product,productId); $product.find(.increase).on(click, function() { handleQtyChange($product, productId, increase); }); $product.find(.decrease).on(click, function() { handleQtyChange($product, productId, decrease); }); setTimeout(function(){ var $mainSlider $product.find(.main-slider); var $thumbnailSlider $product.find(.thumbnail-slider); // Initialize main slider with reference to THIS products thumbnail slider $mainSlider.slick({ slidesToShow: 1, slidesToScroll: 1, arrows: true, fade: true, asNavFor: $thumbnailSlider // Pass the jQuery object directly }); // Initialize thumbnail slider with reference to THIS products main slider $thumbnailSlider.slick({ slidesToShow: 4, slidesToScroll: 1, asNavFor: $mainSlider, // Pass the jQuery object directly dots: false, centerMode: false, focusOnSelect: true }); $product.find(data-fancyboxgallery).fancybox({}); },1000); } // Helper function to remove product from sessionStorage function removeProductFromSessionStorage(productKey) { // 1. Get current data const storedData sessionStorage.getItem(productsData); if (!storedData) return; try { // 2. Parse and verify structure const productsData JSON.parse(storedData); if (typeof productsData ! object || Array.isArray(productsData)) { throw new Error(Expected an object, got something else); } // 3. Delete the key if it exists if (productsDataproductKey) { delete productsDataproductKey; // 4. Save back to sessionStorage sessionStorage.setItem(productsData, JSON.stringify(productsData)); console.log(Removed:, productKey); // Debug log } } catch (e) { console.error(Error updating sessionStorage:, e); } } /script>script srchttps://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick.min.js>/script>script srchttps://cdnjs.cloudflare.com/ajax/libs/fancybox/3.5.7/jquery.fancybox.min.js>/script>/body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]