PageSourceSearch

https://www.fernhill.ie/website/functions.104.js

js fernhill.ie collected 2026-10-08 07:51:48 UTC 21,449 bytes, 519 lines download raw bytes

1$(document).ready( function() {
2
3    $(document).ajaxStop(function() {
4		//moveSortFilter()
5		wrapProductNavigationItems()
6		horizontalWebshopProductsFilterScripts()
7    });
8
9	if(typeof $.scrollTo !== 'undefined'){
10		$.extend($.scrollTo.defaults, {
11			offset: {top:-150}
12		});
13	}
14
15});
16
17let scrollPos = window.pageYOffset,
18	headerTop = document.querySelector('.placeholder-header'),
19	contentTop = document.querySelector('.placeholder-content_top'),
20	contentTopHeight = contentTop.getBoundingClientRect().height,
21	productNavigation = false,
22	productNavigationFixed = false,
23	productNavigationPosition,
24	productNavigationHeight = 0,
25	productNavigationChildren,
26	productNavigationChildrenWrapper = document.createElement('div'),
27	footerWidth,
28	footerCollapseBlocks,
29	addCloseMenuButton = document.createElement('div'),
30	moveShortDesc,
31	moveOrderBtn,
32	moveWishlistBtn,
33	moveUSPList,
34	moveStock,
35	wrapProductTabs,
36	wrapProductTabsWrap = document.createElement('div'),
37	addSliderBlocks,
38	addSliderTarget,
39	addSliderTargetChildren,
40	addSliderTargetWidth,
41	addSliderToSlide,
42	addSliderBlock,
43	addSliderBlockWidth,
44	addSliderCurrentLeft,
45	addSliderMaxLeft = 0,
46	addSliderPrev = document.createElement('div'),
47	addSliderNext = document.createElement('div'),
48	xDown,
49	yDown,
50	moveSortSelectLabel,
51	moveSortSelectSelect,
52	moveSortSelectWrap = document.createElement('div'),
53	moveSortSelectTitle = document.createElement('div'),
54	moveSortSelectTitleH3 = document.createElement('h3'),
55	moveSortSelectTitleA = document.createElement('a'),
56	moveSortSelectContent = document.createElement('div'),
57	filterBlocks,
58	moveClearLink,
59	getClearLinks,
60	getClearText,
61	filterPricesTitle = document.createElement('div'),
62	orderBtnOffset
63
64window.addEventListener('scroll', function() {
65	scrollPos = this.pageYOffset
66	if(scrollPos > 1) {
67		headerTop.classList.add('small-header')
68		contentTop.classList.add('small-header')
69	} else {
70		headerTop.classList.remove('small-header')
71		contentTop.classList.remove('small-header')
72	}
73
74	if(productNavigation === true) {
75		productNavigationPosition = document.querySelector('.product-navigation-container').getBoundingClientRect().y
76		if(productNavigationPosition > contentTopHeight) {
77			document.querySelector('.product-navigation-container .page-information').classList.remove('fixed')
78		} else {
79			document.querySelector('.product-navigation-container .page-information').classList.add('fixed')
80		}
81	}
82
83	if(document.querySelector('.webshop-product #sticky-addtocart')) {
84		orderBtnOffset = document.querySelector('.webshop-product #product-info-left #order-button').getBoundingClientRect().top
85
86		if(orderBtnOffset < contentTop.getBoundingClientRect().height) {
87			document.querySelector('.webshop-product #sticky-addtocart').classList.add('shown')
88		} else {
89			document.querySelector('.webshop-product #sticky-addtocart').classList.remove('shown')
90		}
91	}
92})
93
94if(scrollPos > 1) {
95	headerTop.classList.add('small-header')
96	contentTop.classList.add('small-header')
97
98	if(document.querySelector('.webshop-product #sticky-addtocart')) {
99		orderBtnOffset = document.querySelector('.webshop-product #product-info-left #order-button').getBoundingClientRect().top
100
101		if(orderBtnOffset < contentTop.getBoundingClientRect().height) {
102			document.querySelector('.webshop-product #sticky-addtocart').classList.add('shown')
103		} else {
104			document.querySelector('.webshop-product #sticky-addtocart').classList.remove('shown')
105		}
106	}
107}
108
109let addFilterButton = document.createElement('div'),
110	setProNavHeight
111
112function createFilterButton() {
113
114	setProNavHeight = document.querySelector('.product-navigation-container').getBoundingClientRect().height
115
116	addFilterButton.classList.add('mobile-filter-button')
117	addFilterButton.innerHTML = '<div class="btn"><i class="fa fa-filter"></i> Filter</div>'
118
119	addFilterButton.onclick = function () {
120		if (document.querySelector('.horizontal_webshop_products_filter').classList.contains('open-filter')) {
121			document.querySelector('.horizontal_webshop_products_filter').classList.remove('open-filter')
122			document.querySelector('.horizontal_webshop_products_filter').classList.add('close-filter')
123			document.querySelector('#container').classList.remove('no-scroll')
124		} else {
125			document.querySelector('.horizontal_webshop_products_filter').classList.add('open-filter')
126			document.querySelector('.horizontal_webshop_products_filter').classList.remove('close-filter')
127			document.querySelector('#container').classList.add('no-scroll')
128		}
129	}
130
131	document.addEventListener('click', function (e) {
132		target = e.target
133		if (target.getAttribute('class') !== null) {
134			if (target.getAttribute('class').includes('horizontal_webshop_products_filter')) {
135				document.querySelector('.horizontal_webshop_products_filter').classList.remove('open-filter')
136				document.querySelector('.horizontal_webshop_products_filter').classList.add('close-filter')
137				document.querySelector('#container').classList.remove('no-scroll')
138			}
139		}
140	})
141
142	document.querySelector('.product-navigation-container').setAttribute('style', 'he
142ight:' + setProNavHeight + 'px;')
143	document.querySelector('.product-navigation-container .page-information .page-information-wrapper').prepend(addFilterButton)
144}
145
146wrapProductNavigationItems()
147
148function wrapProductNavigationItems() {
149	if(document.querySelector('.horizontal_webshop_products_filter')) {
150		if (!document.querySelector('.horizontal_webshop_products_filter').classList.contains('close-filter') && !document.querySelector('.horizontal_webshop_products_filter').classList.contains('open-filter')) {
151			document.querySelector('#container').classList.remove('no-scroll')
152		}
153	}
154	if (document.querySelector('.product-navigation-container')) {
155		productNavigation = true
156		productNavigationHeight = document.querySelector('.product-navigation-container').getBoundingClientRect().height
157
158		document.querySelector('.product-navigation-container').setAttribute('style', 'height:' + productNavigationHeight + 'px;')
159
160		productNavigationChildren = document.querySelectorAll('.product-navigation-container .page-information > *')
161		productNavigationChildrenWrapper.classList.add('page-information-wrapper')
162		if(!document.querySelector('.product-navigation-container .page-information-wrapper')) {
163			productNavigationChildrenWrapper.innerHTML = ''
164
165			productNavigationChildren.forEach(function (elem) {
166				productNavigationChildrenWrapper.appendChild(elem)
167			})
168		}
169		document.querySelector('.product-navigation-container .page-information').appendChild(productNavigationChildrenWrapper)
170		createFilterButton()
171	}
172}
173
174if(document.querySelector('.placeholder-content_top')) {
175	if(document.querySelector('.placeholder-content_top .sticky-menu-btn')) {
176		document.querySelector('.placeholder-content_top .sticky-menu-btn').addEventListener('click', function() {
177			if(document.querySelector('#custom-toolbar').classList.contains('open-menu')) {
178				document.querySelector('#custom-toolbar').classList.remove('open-menu')
179				document.querySelector('#custom-toolbar').classList.add('close-menu')
180			} else {
181				document.querySelector('#custom-toolbar').classList.add('open-menu')
182				document.querySelector('#custom-toolbar').classList.remove('close-menu')
183			}
184		})
185	}
186	if(document.querySelector('.placeholder-content_top .sticky-search-btn')) {
187		document.querySelector('.placeholder-content_top .sticky-search-btn').addEventListener('click', function() {
188			if(document.querySelector('.placeholder-content_top .block_type_search_box_2').classList.contains('open-src')) {
189				document.querySelector('.placeholder-content_top .block_type_search_box_2').classList.remove('open-src')
190			} else {
191				document.querySelector('.placeholder-content_top .block_type_search_box_2').classList.add('open-src')
192			}
193		})
194	}
195	if(document.querySelector('.placeholder-content_top .block_type_login_box .login-link-element')) {
196		document.querySelector('.placeholder-content_top .block_type_login_box .login-link-element').addEventListener('click', function(e) {
197			e.preventDefault()
198			if(document.querySelector('.placeholder-content_top .block_type_login_box .show-login').classList.contains('shown')) {
199				document.querySelector('.placeholder-content_top .block_type_login_box .show-login').classList.remove('shown')
200			} else {
201				document.querySelector('.placeholder-content_top .block_type_login_box .show-login').classList.add('shown')
202			}
203		})
204	}
205}
206
207let wrapSubmenu = document.createElement('div'),
208	wrapSubmenuUl
209
210if(document.querySelector('.placeholder-content_top .sticky-menu-main #item_93 .submenu')) {
211	wrapSubmenu.classList.add('submenu-in')
212	wrapSubmenuUl = document.querySelector('.placeholder-content_top .sticky-menu-main #item_93 .submenu > ul')
213	wrapSubmenu.appendChild(wrapSubmenuUl)
214	document.querySelector('.placeholder-content_top .sticky-menu-main #item_93 .submenu').appendChild(wrapSubmenu)
215	document.querySelector('.placeholder-content_top .sticky-menu-main').addEventListener('mouseenter',maxSubmenu)
216	maxSubmenu()
217}
218
219function maxSubmenu() {
220	let contentTopHeight = document.querySelector('.placeholder-content_top').getBoundingClientRect().height,
221		windowHeight = window.innerHeight,
222		submenuMaxHeight = windowHeight - contentTopHeight
223	document.querySelector('.placeholder-content_top .sticky-menu-main #item_93 .submenu-in > ul').setAttribute('style','max-height:' + submenuMaxHeight + 'px;')
224}
225
226if(document.querySelector('.pages-page .page_columns')) {
227	document.querySelector('body').classList.add('has-blocks')
228	document.querySelector('.pages-page').classList.add('has-blocks')
229	if(document.querySelector('.content-google-map')) {
230		document.querySelector('.content-google-map').parentElement.classList.add('full-width')
231	}
232}
233
234horizontalWebshopProductsFilterScripts()
235
236function horizontalWebshopProductsFilterScripts() {
237
238	filterBlocks = document.querySelectorAll('.horizontal_webshop_products_filter .block-content .product-specs-block')
239
240	filterBlocks.forEach( function(filter) {
241		moveClearLink = filter.querySelector('.ps-block-clear')
242		if(filter.classList.contains('prices-slider')) {
243			filterPricesTitle.classList.add('ps-block-title')
244			filterPricesTitle.innerHTML = '<h3><a href="#">Price</a></h3>'
245			filter.querySelector('.in').prepend(filterPricesTitle)
246		}
247		filter.classList.add('checkbox')
248		if(moveClearLink !== null) {
249			filter.querySelector('.ps-block-content').appendChild(moveClearLink)
250		}
251		filter.querySelector('.ps-block-title').addEventListener('click', function() {
252			if(this.parentElement.querySelector('.ps-block-content').getAttribute('style') === undefined) {
253				if (this.parentElement.querySelector('.ps-block-content').getAttribute('style') !== '') {
254					filterBlocks.forEach(function (filtercontent) {
255						if (filtercontent.querySelector('.ps-block-content').getAttribute('style') !== 'display:none') {
256							filtercontent.querySelector('.ps-block-content').setAttribute('style', 'display:none;')
257						}
258					})
259				} else {
260					this.parentElement.querySelector('.ps-block-content').setAttribute('style', 'display:none;')
261				}
262			}
263		})
264	})
265
266	getClearLinks = document.querySelectorAll('.horizontal_webshop_products_filter .block-content .ps-block-clear a')
267
268	getClearLinks.forEach( function(link) {
269		getClearText = link.innerText
270		if(getClearText.includes('(') && getClearText.includes(')')) {
271			link.classList.add('show')
272		}
273	})
274}
275
276if(document.querySelector('.webshop-product #product-info-left')) {
277	if(document.querySelector('.webshop-product #product-info-left #short-desc')) {
278		moveShortDesc = document.querySelector('.webshop-product #product-info-left #short-desc')
279		document.querySelector('.webshop-product #product-info-left .prices').before(moveShortDesc)
280	}
281	if(document.querySelector('.webshop-product #product-info-left #order-button')) {
282		moveOrderBtn = document.querySelector('.webshop-product #product-info-left #order-button')
283		document.querySelector('.webshop-product #product-info-left #product-options li[class="quantity"]').appendChild(moveOrderBtn)
284		if(document.querySelector('.webshop-product #product-info-left #wishlist-bottom')) {
285			moveWishlistBtn = document.querySelector('.webshop-product #product-info-left #wishlist-bottom')
286			document.querySelector('.webshop-product #product-info-left #product-options li[class="quantity"]').appendChild(moveWishlistBtn)
287		}
288	}
289	if(document.querySelector('.webshop-product #product-info-left #usp-list')) {
290		moveUSPList = document.querySelector('.webshop-product #product-info-left #usp-list')
291		if(document.querySelector('.webshop-product #product-info-left .linked_products')) {
292			document.querySelector('.webshop-product .linked_products').before(moveUSPList)
293		} else if(document.querySelector('.webshop-product .special-text')) {
294			document.querySelector('.webshop-product .special-text').before(moveUSPList)
295		}
296	}
297	if(document.querySelector('.webshop-product #product-info-left .stock_indication')) {
298		moveStock = document.querySelectorAll('.webshop-product #product-info-left .stock_indication')
299		if(moveStock[1] !== undefined) {
300			document.querySelector('.webshop-product #product-info-left .page-title').after(moveStock[1])
301		}
302	}
303}
304
305if(document.querySelector('.product-tab.fixed')) {
306	wrapProductTabsWrap.classList.add('product-tab-wrapper')
307	document.querySelector('.product-tab.fixed').before(wrapProductTabsWrap)
308
309	wrapProductTabs = document.querySelectorAll('.product-tab.fixed')
310
311	wrapProductTabs.forEach( function(tab) {
312		tab.querySelector('.tab-title').addEventListener('click', function() {
313			if(this.parentElement.classList.contains('shown')) {
314				this.parentElement.classList.remove('shown')
315			} else {
316				this.parentElement.classList.add('shown')
317			}
318		})
319		document.querySelector('.product-tab-wrapper').appendChild(tab)
320	})
321	document.querySelector('.product-tab-wrapper').firstElementChild.classList.add('shown')
322}
323
324if(document.querySelector('.placeholder-footer')) {
325	if (document.querySelector('.placeholder-footer .block_type_subscribeform')) {
326		footerWidth = document.querySelector('body').getBoundingClientRect().width
327		document.querySelector('.placeholder-footer .block_type_subscribeform > .wrap').setAttribute('style','width:'+footerWidth+'px; flex: 0 0 '+footerWidth+'px;')
328	}
329	if (document.querySelector('.placeholder-footer .footer-collapse-block')) {
330		footerCollapseBlocks = document.querySelectorAll('.footer-collapse-block')
331
332		footerCollapseBlocks.forEach(function (block) {
333			block.querySelector('.block-title').addEventListener('click', function () {
334				if (this.parentElement.classList.contains('shown')) {
335					this.parentElement.classList.remove('shown')
336				} else {
337					this.parentElement.classList.add('shown')
338				}
339			})
340		})
341	}
342}
343
344if(document.querySelector('#product-info-left .linked_products.not_orderable')) {
345	const elem = document.querySelector('#product-info-left .linked_products.not_orderable')
346	addSliderTarget = elem
347	addSliderToSlide = elem.querySelector('.webshop_products')
348	addSliderBlock = elem.querySelector('.webshop_products .product')
349	makeBlockSlider(addSliderTarget, addSliderToSlide, addSliderBlock)
350}
351
352if(document.querySelector('.content-add-slider')) {
353	addSliderBlocks = document.querySelectorAll('.content-add-slider')
354
355	addSliderBlocks.forEach( function(elem) {
356		if(elem.classList.contains('block_type_webshop_popularcategories') || elem.classList.contains('block_type_webshop_categories') || elem.classList.contains('block_type_webshop_popularfeaturedproducts') || elem.classList.contains('block_type_webshop_featuredproducts')) {
357			addSliderTarget = elem
358			addSliderToSlide = elem.querySelector('.webshop_products')
359			addSliderBlock = elem.querySelector('.webshop_products .product')
360			makeBlockSlider(addSliderTarget, addSliderToSlide, addSliderBlock)
361		} else if(elem.classList.contains('block_type_newsitems')) {
362			addSliderTarget = elem
363			addSliderToSlide = elem.querySelector('.block-content')
364			addSliderBlock = elem.querySelector('.block-content > div')
365			makeBlockSlider(addSliderTarget, addSliderToSlide, addSliderBlock)
366		}
367	})
368}
369
370function makeBlockSlider(target,toslide,block) {
371
372	addSliderCurrentLeft = 0
373
374	toslide.setAttribute('data-slide-left',0)
375
376	addSliderPrev.className = 'slide-prev'
377	addSliderPrev.innerHTML = '<i class="fa fa-angle-left"></i>'
378	addSliderNext.className = 'slide-next'
379	addSliderNext.innerHTML = '<i class="fa fa-angle-right"></i>'
380
381	target.querySelector('.wrap').append(addSliderPrev.cloneNode(true),addSliderNext.cloneNode(true))
382	target.querySelector('.slide-prev').addEventListener('click', function() { showPrevBlock() })
383	target.querySelector('.slide-next').addEventListener('click', function() { showNextBlock() })
384
385	function showPrevBlock() {
386		addSliderBlockWidth = block.getBoundingClientRect()
387		if(addSliderCurrentLeft > 0) {
388			addSliderCurrentLeft = toslide.getAttribute('data-slide-left') - addSliderBlockWidth.width
389			toslide.setAttribute('style', 'left: -' + addSliderCurrentLeft + 'px;')
390			toslide.setAttribute('data-slide-left',addSliderCurrentLeft)
391		}
392	}
393
394	function showNextBlock() {
395		addSliderBlockWidth = block.getBoundingClientRect()
396		addSliderTargetWidth = toslide.getBoundingClientRect()
397		addSliderTargetChildren = toslide.children.length - Math.round(addSliderTargetWidth.width / addSliderBlockWidth.width)
398		addSliderMaxLeft = (addSliderTargetChildren * addSliderBlockWidth.width) + (addSliderBlockWidth.width / 2)
399		addSliderCurrentLeft = parseInt(toslide.getAttribute('data-slide-left')) + addSliderBlockWidth.width
400		if(addSliderCurrentLeft < addSliderMaxLeft) {
401			toslide.setAttribute('style', 'left: -' + addSliderCurrentLeft + 'px;')
402			toslide.setAttribute('data-slide-left',addSliderCurrentLeft)
403		}
404		console.log(addSliderCurrentLeft,addSliderMaxLeft,addSliderTargetChildren)
405	}
406
407	target.addEventListener('touchstart', handleTouchStart, {passive: true});
408	target.addEventListener('touchmove', handleTouchMove, {passive: true});
409
410	function getTouches(evt) {
411		return evt.touches ||             // browser API
412			evt.originalEvent.touches; // jQuery
413	}
414
415	function handleTouchStart(evt) {
416		const firstTouch = getTouches(evt)[0];
417		xDown = firstTouch.clientX;
418		yDown = firstTouch.clientY;
419	}
420
421	function handleTouchMove(evt) {
422		if (!xDown || !yDown) { return; }
423
424		var xUp = evt.touches[0].clientX, yUp = evt.touches[0].clientY, xDiff = xDown - xUp, yDiff = yDown - yUp;
425
426		if (Math.abs(xDiff) > Math.abs(yDiff)) {/*most significant*/
427			if (xDiff > 0) {
428				//left
429				showNextBlock()
430			} else {
431				//right
432				showPrevBlock()
433			}
434		} else {
435			if (yDiff > 0) {
436				/* up swipe */
437			} else {
438				/* down swipe */
439			}
440		}
441		/* reset values */
442		xDown = null
443		yDown = null
444	}
445}
446
447window.addEventListener('load', function() {
448	addCloseMenuButton.innerHTML = '<i class="fa fa-times"></i>'
449	addCloseMenuButton.setAttribute('id','close-menu')
450
451	addCloseMenuButton.addEventListener('click', function() {
452		document.querySelector('#custom-toolbar').classList.remove('open-menu')
453		document.querySelector('#custom-toolbar').classList.add('close-menu')
454	})
455
456	document.querySelector('#custom-toolbar').addEventListener('click', function() {
457		this.classList.remove('open-menu')
458		this.classList.add('close-menu')
459	})
460
461	document.querySelector('#custom-toolbar .block_type_navigation').prepend(addCloseMenuButton)
462})
463
464let windowHeight,
465    footerPosition,
466    footerInScreen = false,
467    addElfsight = document.createElement('script'),
468    uspPdpPosition = 0,
469    uspPdpPositionInScreen = false,
470    checkoutRightPosition = 0,
471    checkoutRightPositionInScreen = false
472
473window.addEventListener('scroll', function() {
474    windowHeight = window.outerHeight
475    footerPosition = document.querySelector('footer').getBoundingClientRect().y
476    if(document.querySelector('.webshop-product #product-info-left')){
477        uspPdpPosition = document.querySelector('#product-info-left').getBoundingClientRect().y
478    }
479    if(document.querySelector('#one-page-checkout #checkout-right')){
480        checkoutRightPosition = document.querySelector('#checkout-right').getBoundingClientRect().y
481    }
482
483    addElfsight.setAttribute('src', 'https://apps.elfsight.com/p/platform.js')
484    addElfsight.setAttribute('defer', '')
485
486    if(footerPosition < windowHeight && footerInScreen === false) {
487        footerInScreen = true
488        document.querySelector('head').appendChild(addElfsight)
489    }
490
491    if (uspPdpPosition < windowHeight && uspPdpPositionInScreen === false){
492        uspPdpPositionInScreen = true
493        if(document.querySelector('#product-info-left')){
494            document.querySelector('#product-info-left').innerHTML += '<div class="elfsight-app-c43271ab-0972-4fec-a4fc-55f9a2efc0af"></div>';
495        }
496        document.querySelector('head').appendChild(addElfsight)
497    }
498
499    if (checkoutRightPosition < windowHeight && checkoutRightPositionInScreen === false){
500        checkoutRightPositionInScreen = true
501        if(document.querySelector('#checkout-right')){
502            document.querySelector('#checkout-right').innerHTML += '<div class="elfsight-app-c43271ab-0972-4fec-a4fc-55f9a2efc0af"></div>';
503        }
504        document.querySelector('head').appendChild(addElfsight)
505    }
506})
507
508window.addEventListener('resize', maxSubmenu)
509
510let getAllColumns
511
512if(document.querySelector('.column > .in')) {
513	getAllColumns = document.querySelectorAll('.column > .in')
514	getAllColumns.forEach( function(column) {
515		if(column.children.length < 1) {
516			column.parentElement.remove()
517		}
518	})
519}

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.