PageSourceSearch

https://rshweb.com/js/rsh-web.js

js rshweb.com collected 2026-09-26 08:32:32 UTC 9,132 bytes, 231 lines download raw bytes

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.