1document.addEventListener("DOMContentLoaded", () => { 2 3 const reviews = [ 4 { 5 img: "/img/review/w-4.jpg", 6 alt: "Ann Germien Photo", 7 text: "I've been an RSH Web Services customer for the last 4 years and totally satisfied. Great plans, prices and user-friendly cPanel, What else I can ask for", 8 name: "<img src='/images/5-star-s.png' alt='Honest Reviews' width='68' height='49' class='pr-2'>Ann Germien", 9 url: "https://rshweb.com/web-site-reviews#germien" 10 }, 11 { 12 img: "/img/review/m-2.jpg", 13 alt: "William Photo", 14 text: "I have nothing but great things to say about my experience with RSH Web Services. Tech support has been there when I need it ", 15 name: "<img src='/images/5-star-s.png' alt='William Flanagan Honest Review' width='68' height='49' class='pr-2'>William Flanagan", 16 url: "https://rshweb.com/web-site-reviews#flanagan" 17 }, 18 { 19 img: "/img/review/w-2.jpg", 20 alt: "Melissa Gibney Photo", 21 text: "The support very good, we don't have any kind of complaint. Like usual, every doubt we had, every question we put is immediately considered and resolved", 22 name: "<img src='/images/5-star-s.png' alt=' Honest Review' width='68' height='49' class='pr-2'>Melissa Gibney", 23 url: "https://rshweb.com/web-site-reviews#gibney" 24 }, 25 { 26 img: "/img/review/m-5.jpg", 27 alt: "Sheikh Abu bkkor Photo", 28 text: "I had a fantastic experience with RSH Web Services. Their team is highly professional and delivered a unique website tailored to my needs", 29 name: "<img src='/images/5-star-s.png' alt='Sheikh Abu bkkor Honest Review' width='68' height='49' class='pr-2'>Sheikh Abu bkkor", 30 url: "https://maps.app.goo.gl/2dFU5ZW1gh5kxSZL8" 31 }, 32 { 33 img: "/img/review/w-6.jpg", 34 alt: "Design Bazar Photo", 35 text: "RSH Web Service offers excellent support! Fast, reliable, and filled with professionalism. Highly recommended!", 36 name: "<img src='/images/5-star-s.png' alt='Design Bazar Honest Review' width='68' height='49' class='pr-2'>Design Bazar", 37 url: "https://maps.app.goo.gl/9j7zFi9s4gQNuLED6" 38 }, 39 { 40 img: "/img/review/w-1.jpg", 41 alt: "PR Lewis Photo", 42 text: "Very courteous responds appropriately and in a timely manner. Very easy to work with and is very helpful", 43 name: "<img src='/images/5-star-s.png' alt='PR Lewis Honest Review' width='68' height='49' class='pr-2'>PR Lewis", 44 url: "https://maps.app.goo.gl/eLRVFUhx68oHqwpUA" 45 }, 46 { 47 img: "/img/review/m-8.jpg", 48 alt: "William Flanagan Photo", 49 text: "I have a very good experience with RSH Web Services, they help with our WordPress problem", 50 name: "<img src='/images/5-star-s.png' alt='William Flanagan Honest Review' width='68' height='49' class='pr-2'>William Flanagan", 51 url: "https://maps.app.goo.gl/AMQz8tqshWmNjzHZ9" 52 }, 53 { 54 img: "/img/review/m-6.jpg", 55 alt: "River Designs Photo", 56 text: "Fantastic service! Always willing to help and point me in the right direction. Covers all my hosting needs!", 57 name: "<img src='/images/5-star-s.png' alt='River Designs Honest Review' width='68' height='49' class='pr-2'>River Designs", 58 url: "https://maps.app.goo.gl/uj74MKSxdBxAhA639" 59 }, 60 { 61 img: "/img/review/m-3.jpg", 62 alt: "Brian Harris Photo", 63 text: "Excellent customer service, very responsive and delightful to work with. Thank you once more.", 64 name: "<img src='/images/5-star-s.png' alt='Brian Harris Honest Review' width='68' height='49' class='pr-2'>Brian Harris", 65 url: "https://maps.app.goo.gl/av3VfScdcg5NaTRg9" 66 }, 67 { 68 img: "/img/review/m-4.jpg", 69 alt: "Thomas Sharp Photo", 70 text: "RSH Web Services handled all of our web hosting needs promptly and efficiently. They are courteous and very...", 71 name: "<img src='/images/5-star-s.png' alt='Thomas Sharp Honest Review' width='68' height='49' class='pr-2'>Thomas Sharp", 72 url: "https://maps.app.goo.gl/AcuUZrXxPr4BCnfn9" 73 }, 74 { 75 img: "/img/review/m-7.jpg", 76 alt: "Rob Hobbs Photo", 77 text: "Have had hosting with RSH Web Services for the past 8 years. Always top service, performance, and prices.", 78 name: "<img src='/images/5-star-s.png' alt='Rob Hobbs Honest Review' width='68' height='49' class='pr-2'>Rob Hobbs", 79 url: "https://maps.app.goo.gl/TuztY3cPZr8fMF19A" 80 }, 81 { 82 img: "/img/review/w-3.jpg", 83 alt: "Liz Page Photo",
84 text: "RSH Web Services offers reliable and efficient solutions for businesses. Their customer support is responsive, and their services are competitively priced", 85 name: "<img src='/images/5-star-s.png' alt='Liz Page Honest Review' width='68' height='49' class='pr-2'>Liz Page", 86 url: "https://maps.app.goo.gl/khSPHbkkdvVPYM3n7" 87 }, 88 { 89 img: "/img/review/m-1.jpg", 90 alt: "Jean-c Lachavanne Photo", 91 text: "RSH Excellent Web Service is incredibly supportive and always provides outstanding communication. Highly recommend their services", 92 name: "<img src='/images/5-star-s.png' alt='Jean-c Lachavanne Honest Review' width='68' height='49' class='pr-2'>Jean-c Lachavanne", 93 url: "https://maps.app.goo.gl/khSPHbkkdvVPYM3n7" 94 } 95 ]; 96 97 let current = Math.floor(Math.random() * reviews.length); 98 const imgEl = document.getElementById("review-img"); 99 const textEl = document.getElementById("review-text"); 100 const nameEl = document.getElementById("review-name"); 101 const sectionEl = document.getElementById("review-section"); 102 const cardEl = document.getElementById("review-card"); 103 104 let intervalId; 105 let firstLoad = true; 106 107 function preloadImage(src) { 108 const img = new Image(); 109 img.src = src; 110 } 111 112 function showReview(index) { 113 const review = reviews[index]; 114 115 if (!imgEl || !textEl || !nameEl || !sectionEl) { 116 console.warn("One or more review elements not found in DOM."); 117 return; 118 } 119 120 if (firstLoad) { 121 imgEl.src = review.img; 122 imgEl.alt = review.alt; 123 textEl.textContent = `"${review.text}"`; 124 nameEl.innerHTML = `<a href="${review.url}" target="_blank">${review.name}</a>`; 125 sectionEl.classList.add("fade-in"); 126 firstLoad = false; 127 128 const next = (index + 1) % reviews.length; 129 preloadImage(reviews[next].img); 130 console.log("Image src set to:", imgEl.src); 131 return; 132 } 133 134 sectionEl.classList.remove("fade-in"); 135 sectionEl.classList.add("fade-out"); 136 137 setTimeout(() => { 138 imgEl.src = review.img; 139 imgEl.alt = review.alt; 140 textEl.textContent = `"${review.text}"`; 141 nameEl.innerHTML = `<a href="${review.url}" target="_blank">${review.name}</a>`; 142 143 sectionEl.classList.remove("fade-out"); 144 sectionEl.classList.add("fade-in"); 145 146 const next = (index + 1) % reviews.length; 147 preloadImage(reviews[next].img); 148 console.log("Image src updated to:", imgEl.src); 149 }, 800); 150 } 151 152 function startRotation() { 153 intervalId = setInterval(() => { 154 current = (current + 1) % reviews.length; 155 showReview(current); 156 }, 6000); 157 } 158 159 function stopRotation() { 160 clearInterval(intervalId); 161 } 162 163 if (cardEl) { 164 cardEl.addEventListener("mouseenter", stopRotation); 165 cardEl.addEventListener("mouseleave", startRotation); 166 } 167 168 showReview(current); 169 startRotation(); 170}); 171 172document.addEventListener("DOMContentLoaded", () => { 173 const e = document.querySelectorAll(".scroll-fade"), 174 t = e => e.classList.add("is-visible"), 175 o = new IntersectionObserver(e => { 176 e.forEach(e => { 177 if (e.isIntersecting) { 178 t(e.target); 179 o.unobserve(e.target); 180 } 181 }) 182 }, { threshold: .1, rootMargin: "50px" }); 183 e.forEach(n => { 184 n.getBoundingClientRect().top < window.innerHeight + 50 && n.getBoundingClientRect().bottom > -50 ? t(n) : o.observe(n) 185 }), 186 setTimeout(() => e.forEach(t), 500) 187}); 188 189function initMathCaptcha() { 190 const a = Math.floor(Math.random() * 12) + 3; 191 const b = Math.floor(Math.random() * 10) + 2; 192 const questionEl = document.getElementById('mathQuestion'); 193 const inputEl = document.getElementById('mathAnswer'); 194 const msgEl = document.getElementById('mathMsg'); 195 196 questionEl.textContent = `${a} + ${b} = ?`; 197 const correct = a + b; 198 199 function check() { 200 if (Number(inputEl.value) === correct) { 201 msgEl.style.color = '#2e7d32'; 202 msgEl.textContent = 'Correct!'; 203 // enable submit / proceed 204 } else { 205 msgEl.textContent = 'Wrong â try again'; 206 } 207 } 208 209 inputEl.oninput = check; 210 inputEl.focus(); 211} 212 213document.addEventListener('DOMContentLoaded', function () { 214 215 const sections = document.querySelectorAll('.fade-section'); 216 217 const observer = new IntersectionObserver((entries) => {
218 entries.forEach(entry => { 219 if (entry.isIntersecting) { 220 entry.target.classList.add('visible'); 221 } 222 }); 223 }, { 224 threshold: 0.15 225 }); 226 227 sections.forEach(section => { 228 observer.observe(section); 229 }); 230 231});
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.