PageSourceSearch

https://fshf.org/app/themes/fshf/js/scripts.js?ver=1.0.2

js fshf.org collected 2026-09-24 21:34:02 UTC 37,729 bytes, 1,085 lines download raw bytes

1jQuery(document).ready(function ($) {
2
3	/*
4	* config
5	*------------------------------*/
6	var screen = {
7		'window_width': $(window).width(),
8		'window_height': $(window).height(),
9		'document_width': $(document).width(),
10		'document_height': $(document).height()
11	};
12
13	var device = {
14		'tablet_land': 1024,  // landscape
15		'tablet_port': 768,  // portrait
16		'smartphone': 600  // smartphone
17	};
18
19	var device = {
20		'is_desktop': (screen.window_width > device.tablet_land) ? true : false,
21		'is_tablet_land': (screen.window_width <= device.tablet_land && screen.window_width >= device.tablet_port) ? true : false,
22		'is_tablet_port': (screen.window_width <= device.tablet_port && screen.window_width >= screen.smartphone) ? true : false,
23		'is_smartphone': (screen.window_width < device.tablet_port) ? true : false
24	};
25
26
27	/*
28	* fix header
29	*------------------------------*/
30	if (device.is_desktop)
31		fixHeader();
32	function fixHeader() {
33		$(window).scroll(function (e) {
34			var scroll = $(window).scrollTop();
35			if (scroll > 160) {
36				$('.site-header').addClass('fixed');
37			} else {
38				$('.site-header').removeClass('fixed');
39			}
40		});
41	}
42
43	/*
44	* search
45	*------------------------------*/
46	$('.search-icon').click(function () {
47		$(this).addClass('hidden');
48		$('.search-close').removeClass('hidden');
49		$('.site-header .search-form').fadeIn(100).find('.search-field').focus();
50	});
51
52	$('.search-close').click(function () {
53		$(this).addClass('hidden');
54		$('.search-icon').removeClass('hidden');
55		$('.site-header .search-form').fadeOut(100);
56	});
57
58	/*
59	* Menu
60	*------------------------------*/
61	if (device.is_desktop) {
62		$('.primary-menu>li').hover(
63			function () {
64				$('.site-header .sub-menu').hide();
65				$(this).find('.sub-menu').show();
66			},
67			function () {
68				$('.site-header .sub-menu').hide();
69				$('.primary-menu>li.current-menu-ancestor>ul').show();
70			}
71		);
72	}
73
74	// mobile menu
75	if (!device.is_desktop) {
76
77		$('#toggle-menu').click(function () {
78			$(this).toggleClass('on');
79			$('.mobile-header').toggleClass('on');
80			$('.mobile-header .menu-container').toggle();
81		});
82
83		$('.mobile-header li.menu-item-has-children>a').on('click', function (e) {
84			e.preventDefault();
85			$('.mobile-header .menu-item-has-children').removeClass('on');
86			$('.sub-menu').removeClass('on');
87			$(this).parent().toggleClass('on');
88			$(this).parent().find('.sub-menu').toggleClass('on');
89		});
90	}
91
92	/*
93	* Live match
94	*------------------------------*/
95	//initLiveMatch();
96	function initLiveMatch() {
97
98		$.get("http://app.fshf.org/json/live", function (data) {
99
100			var away_team = data[0]['away_team'];
101			var away_team_flag = data[0]['away_team_flag'];
102			var city = data[0]['city'];
103			var competition_name = data[0]['competition_name'];
104			var date = data[0]['date'];
105			var ft_result = data[0]['ft_result'];
106			var home_team = data[0]['home_team'];
107			var home_team_flag = data[0]['home_team_flag'];
108			var away_team_flag = data[0]['away_team_flag'];
109			var ht_result = data[0]['ht_result'];
110			var is_live = data[0]['is_live'];
111
112			var match_minute = data[0]['match_minute'];
113			var round_number = data[0]['round_number'];
114			var stadium = data[0]['stadium'];
115			var time = data[0]['time'];
116
117
118			var match_details_str = $('.live-match-link').attr('data-str');
119
120			$('.live-match .date').text(date);
121			$('.live-match .stadium').text(stadium);
122			$('.live-match .competition').text(competition_name);
123			$('.live-match .home-team-name').text(home_team);
124			$('.live-match .away-team-name').text(away_team);
125			$('.live-match .home-team-logo').attr('style', 'background-image:url(' + home_team_flag + ')');
126			$('.live-match .away-team-logo').attr('style', 'background-image:url(' + away_team_flag + ')');
127			$('.live-match .link').attr('href', 'http://' + window.location.hostname + '/garat/?query=info&match_id=' + data[0]['id']);
128
129			$('.live-match .score').text(ft_result);
130
131
132			$('.live-match .live-match-link').html('<a href="http://' + window.location.hostname + '/garat/?query=info&match_id=' + data[0]['id'] + '" style="color:#fff;">' + match_details_str + '</a>');
133
134		});
135	}
136
137	/*
138	* slick sliders
139	*------------------------------*/
140	var sliders = ['headline', 'home-news-slides', 'featured-products', 'match-slick', 'news-sli
140de', 'nm-addon-slider'];
141
142	$(sliders).each(function (key, value) {
143		slide_init('.' + value);
144	});
145
146	function slide_init(selector) {
147		var isAddonSlider = selector === '.nm-addon-slider';
148
149		$(selector).slick({
150			autoplay: true,
151			autoplaySpeed: 7000,
152			arrows: isAddonSlider ? false : (device.is_desktop),
153			dots: (device.is_desktop && selector != '.home-news-slides') ? true : false,
154			infinite: true,
155			speed: 300,
156			slidesToShow: 1,
157			adaptiveHeight: false,
158			fade: (selector != '.match-slick') ? true : false,
159			pauseOnHover: false,
160			pauseOnFocus: false,
161		}).find('.item').fadeIn(300);
162	}
163
164
165	$('.image-gallery').slick({
166		autoplay: true,
167		autoplaySpeed: 3000,
168		arrows: device.is_desktop ? true : false,
169		dots: device.is_desktop ? false : true,
170		infinite: true,
171		speed: 300,
172		slidesToShow: 1,
173		adaptiveHeight: false,
174		fade: true,
175		pauseOnHover: false,
176		pauseOnFocus: false,
177	}).find('.item').fadeIn(300);
178
179	$('.players-slide').slick({
180		autoplay: true,
181		autoplaySpeed: 3000,
182		arrows: true,
183		dots: false,
184		infinite: true,
185		speed: 300,
186		slidesToShow: 1,
187		adaptiveHeight: false,
188		fade: true,
189		pauseOnHover: false,
190		pauseOnFocus: false,
191	}).find('.item').fadeIn(300);
192
193	$('._sponsors_').slick({
194		autoplay: true,
195		autoplaySpeed: 3000,
196		arrows: false,
197		dots: true,
198		infinite: true,
199		speed: 300,
200		slidesToShow: 1,
201		adaptiveHeight: false,
202		fade: true,
203		pauseOnHover: false,
204		pauseOnFocus: false,
205	}).find('.item').fadeIn(300);
206
207	//partners
208	$('.slick-slides').slick({
209		arrows: false,
210		dots: false,
211		infinite: true,
212		speed: 300,
213		slidesToShow: 6,
214		slidesToScroll: 1,
215		autoplay: true,
216		pauseOnHover: false,
217		pauseOnHover: false,
218		responsive: [
219			{
220				breakpoint: 1024, settings: { slidesToShow: 3, slidesToScroll: 3, infinite: true, dots: true }
221			},
222			{ breakpoint: 600, settings: { slidesToShow: 2, slidesToScroll: 2 } },
223			{ breakpoint: 480, settings: { slidesToShow: 1, slidesToScroll: 1 } }
224		]
225	});
226
227	$('.euro-2025-slideshow').slick({
228		autoplay: true,
229		autoplaySpeed: 7000,
230		arrows: false,
231		dots: true,
232		infinite: true,
233		speed: 300,
234		slidesToShow: 1,
235		adaptiveHeight: false,
236		fade: true,
237		pauseOnHover: false,
238		pauseOnFocus: false,
239	}).find('.item').fadeIn(300);
240
241	/**
242	* Lazy load
243	*------------------------------*/
244	$('body').bind('post-load', lazy_load_init);
245	lazy_load_init();
246	function lazy_load_init() {
247		$('img[data-lazy-src]').bind('scrollin', { distance: 200 }, function () {
248			lazy_load_image(this);
249		});
250
251		//need to force load gallery images in Jetpack Carousel and give up lazy-loading otherwise images don't show up correctly
252		$('[data-carousel-extra]').each(function () {
253			$(this).find('img[data-lazy-src]').each(function () {
254				lazy_load_image(this);
255			});
256		});
257	}
258
259	function lazy_load_image(img) {
260		var $img = $(img),
261			src = $img.attr('data-lazy-src');
262
263		if (!src || 'undefined' === typeof (src))
264			return;
265
266		$img.unbind('scrollin') // remove event binding
267			.hide()
268			.removeAttr('data-lazy-src')
269			.attr('data-lazy-loaded', 'true');
270		img.src = src;
271		$img.fadeIn();
272	}
273
274	/**
275	* fix sidebar height
276	*------------------------------*/
277	if (device.is_desktop) {
278
279		//home
280		var home_left = $('.home-left').height();
281		$('.home-sidebar').height(home_left);
282
283		//global - inside pages
284		var content = $('.main-content');
285		var sidebar = $('.sidebar:not(.home-sidebar)');
286
287		// get content and sidebar height
288		var getContentHeight = content.outerHeight();
289		var getSidebarHeight = sidebar.outerHeight();
290
291		// check if content height is bigger than sidebar
292		if (getContentHeight > getSidebarHeight) {
293			sidebar.css('min-height', getContentHeight);
294		}
295
296		// check if sidebar height is bigger than content
297		if (getSidebarHeight > getContentHeight) {
298			content.css('min-height', getSidebarHeight);
299		}
300
301	}
302
303	/**
304	* nicescroll
305	*------------------------------*/
306	nicescroll();
307	function nicescroll() {
308		if (!device.is_smartphone) {
309			$('.nicescroll').niceScroll({
310				//cursorcolor: $(this).attr('data-cursor-color'),
311				cursorcolor: '#fff',
312				cursoropacitymin: 0.5,
313				railpadding: { top: 10, right: 3, left: 3, bottom: 10 },
314			});
315		}
316	}
317
318	/**
319	* Sroll to target element
320	*-----------------------------*/
321	function scrollTo(elem) {
322		$('html, body').animate({
323			scrollTop: $(elem).offset().top
324		}, 300);
325	}
326
327	/**
328	* Media Gallery
329	*------------------------------*/
330	$('.media-gallery').slick({
331		dots: false,
332		arrow: false,
333		infinite: false,
334		speed: 300,
335		slidesToShow: 1,
336		slidesToScroll: 1,
337		adaptiveHeight: ($('.main-content').length) ? true : false,
338		responsive: [
339			{
340				breakpoint: 1200,
341				settings: {
342					adaptiveHeight: true
343				}
344			},
345		]
346	});
347
348
349	$('._hover-preview')
350		.hover(
351			function () {
352				$(this).find('.preview').fadeIn(200);
353			},
354			function () {
355				$(this).find('.preview').fadeOut(200);
356			});
357
358	/**
359	* Contact form
360	*------------------------------*/
361	contact_form();
362	function contact_form() {
363
364		var i = 0;
365
366		var arrIndex = 0;
367		if (clang != 'sq')
368			arrIndex = 1;
369
370		$('.vfb-form-group').each(function (index, value) {
371
372			var label = $(this).find('label').text();
373			var submitText = $('button[type=submit]').text();
374			var label = label.split('|');
375
376			if (typeof submitText != 'undefined')
377				var submitText = submitText.split('|');
378
379			$(this).find('label').text(label[arrIndex]);
380
381
382			if (typeof submitText != 'undefined')
383				$('button[type=submit]').text(submitText[arrIndex]);
384
385			// placeholders
386
387			//text, url, textarea etc
388			//$(this).find('input[type=text], input[type=url], select, textarea').attr('placeholder', label[arrIndex]);
389
390			//submit
391			//if(typeof submitText != 'undefined')
392			// $(this).find('input[type=submit]').attr('value', submitText[arrIndex]);
393
394			// icons
395			var icon = $(this).find('input, textarea').val();
396
397			// $(this).find('div').append('<i class="fa '+icon+'"></i>');
398			$(this).find('input[type=text], input[type=url], textarea').removeAttr('value');
399
400			i++;
401		});
402	}
403
404	/*
405	* google docs viewer
406	*------------------------------*/
407	open_doc();
408	function open_doc() {
409		$(window).load(function () {
410			$('.gdoc').gdocsViewer({
411				height: 1095
412			});
413		});
414	}
415
416	/**
417	* Share
418	*------------------------------*/
419	share();
420	function share() {
421		$('.share a').on('click', function (event) {
422
423			event.preventDefault();
424
425			var _this = {
426				'platform': $(this).attr('data-platform'),
427				'link': $(this).attr('data-link'),
428				'media': $(this).attr('data-media')
429			}
430
431			var _platform = {
432				'facebook': 'https://www.facebook.com/sharer/sharer.php?u=',
433				'twitter': 'https://twitter.com/intent/tweet?text=',
434				'google': 'https://plus.google.com/share?url=',
435				'linkedin': 'https://www.linkedin.com/shareArticle?mini=true&url=',
436				'pinterest': 'https://pinterest.com/pin/create/button/?url={url}&media={media}'
437			}
438
439			var _window = {
440				'width': screen.window_width / 2,
441				'height': screen.window_height / 2,
442				'top': (screen.document_height / 2) / 2,
443				'left': (screen.document_width / 2) / 2,
444			}
445			if (_this.link.length) {
446				if ($.inArray(_this.platform, Object.keys(_platform)) !== -1) {
447					//check if is pinterest 
448					if (_this.platform == 'pinterest' && _this.media.length) {
449						_this.link = _platform[_this.platform]
450							.replace('{url}', _this.link)
451							.replace('{media}', _this.media);
452					} else {
453						_this.link = _platform[_this.platform] + _this.link;
454					}
455					_window = 'width=' + _window.width + ', height=' + _window.height + ', top=' + _window.top + ', left=' + _window.left;
456					//_window = window.open( _this.link, _this.platform, _window );
457					PopupCenter(_this.link, _this.platform, 600, 400);
458				}
459			}
460		});
461	}
462
463	function PopupCenter(url, title, w, h) {
464		var dualScreenLeft = window.screenLeft != undefined ? window.screenLeft : screen.left;
465		var dualScreenTop = window.screenTop != undefined ? window.screenTop : screen.top;
466
467		var width = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : screen.width;
468		var height = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : screen.height;
469
470		var left = ((width / 2) - (w / 2)) + dualScreenLeft;
471		var top = ((height / 2) - (h / 2)) + dualScreenTop;
472		var newWindow = window.open(url, title, 'scrollbars=yes, width=' + w + ', height=' + h + ', top=' 
472+ top + ', left=' + left);
473
474		if (window.focus) {
475			newWindow.focus();
476		}
477	}
478
479	/*
480	* tv_load_video
481	*------------------------------*/
482	tv_load_video();
483	function tv_load_video() {
484
485		NProgress.configure({ parent: '.expander' });
486
487		$('.tv-grid-items .inner').click(function (e) {
488
489			e.preventDefault();
490
491			var _this = $(this);
492			var post_id = _this.parent().data('post-id');
493
494			$('.grid-items .item').removeClass('expanded');
495			$('.expander').remove();
496			_this.parent().addClass('expanded');
497			_this.parent().append('<div class="expander"></div>');
498			scroll_to('.expander');
499
500			// start NProgress
501			NProgress.start();
502
503			// Use REST API instead of AJAX
504			fetch('/wp-json/fshf/v1/tv/video/' + post_id)
505				.then(response => response.json())
506				.then(data => {
507					$('.expander').html(renderVideoExpander(data));
508
509					// stop NProgress
510					NProgress.done();
511
512					// nicescroll
513					nicescroll();
514					close_expander();
515					share();
516				})
517				.catch(error => {
518					console.error('Error loading video:', error);
519					NProgress.done();
520				});
521		});
522	}
523
524	// Helper function to render video expander HTML
525	function renderVideoExpander(video) {
526		// Parse iframe to add autoplay params
527		let iframe = video.video;
528
529		// Extract src from iframe
530		const srcMatch = iframe.match(/src="([^"]+)"/);
531		if (srcMatch && srcMatch[1]) {
532			let src = srcMatch[1];
533
534			// Add query params
535			const params = {
536				controls: 1,
537				autoplay: 1,
538				hd: 1,
539				autohide: 0,
540				rel: 0
541			};
542
543			// Add params to URL
544			const separator = src.includes('?') ? '&' : '?';
545			const paramString = Object.entries(params).map(([k, v]) => `${k}=${v}`).join('&');
546			const newSrc = src + separator + paramString;
547
548			// Replace src in iframe
549			iframe = iframe.replace(src, newSrc);
550		}
551
552		// Add frameborder attribute
553		iframe = iframe.replace('></iframe>', ' frameborder="0"></iframe>');
554
555		return `
556			<div class="video-player grid-container">
557				<i class="fa fa-close close-expander"></i>
558				<div class="iframe-container col-lg-8 col-md-7 col-sm-7 col-xs-12 rmpl">
559					${iframe}
560				</div>
561				<div class="content nicescroll col-lg-4 col-md-5 col-sm-5 col-xs-12" data-cursor-color="#fff">
562					<span class="post-date">${video.date}</span>
563					<h2>${video.title}</h2>
564					<div class="post-content">
565						${video.content}
566						<div class="social-sharing share">
567							<span class="share-text"><i class="fa fa-share"></i> Share: </span>
568							<a href="#" data-platform="facebook" data-link="${video.video_url || ''}"><i class="fa fa-facebook"></i></a>
569							<a href="#" data-platform="twitter" data-link="${video.video_url || ''}"><i class="fa fa-twitter"></i></a>
570						</div>
571					</div>
572				</div>
573			</div>
574		`;
575	}
576
577
578
579
580
581	/*
582	* load_gallery
583	*------------------------------*/
584	load_gallery();
585	function load_gallery() {
586		$('.gallery-grid-items .item .inner').click(function (e) {
587			e.preventDefault();
588			var _this = $(this);
589			var post_id = _this.parent().data('post-id');
590
591			$('.gallery-grid-items .item').removeClass('expanded');
592			$('.expander').remove();
593			_this.parent().addClass('expanded');
594			_this.parent().append('<div class="expander"></div>');
595			scroll_to('.expander');
596
597			// Use REST API instead of AJAX
598			fetch('/wp-json/fshf/v1/gallery/item/' + post_id)
599				.then(response => response.json())
600				.then(data => {
601					$('.expander').html(renderGalleryExpander(data));
602
603					init_gallery_slider();
604					open_gallery();
605					gallery_preview();
606					nicescroll();
607					close_expander();
608					share();
609				})
610				.catch(error => {
611					console.error('Error loading gallery:', error);
612				});
613		});
614	}
615
616	// Helper function to render gallery expander HTML
617	function renderGalleryExpander(gallery) {
618		let imagesHtml = '';
619		let imgsJson = [];
620
621		if (gallery.images && gallery.images.length > 0) {
622			gallery.images.forEach((img, index) => {
623				imagesHtml += `<div class="_cover" style="background-image: url(${img.url});">
624					<button class="toggle-fullscreen open-gallery" data-gallery='${JSON.stringify(gallery.images)}'><i class="fa fa-search-plus"></i></button>
625				</div>`;
626				imgsJson.push({
627					src: img.url,
628					title: img.title || ''
629				});
630			});
631		}
632
633		return `
634			<div class="gallery-container grid-container col-xs-12 rmp">
635				<i class="fa fa-close close-expander"></i>
636				<div class="col-lg-8 col-md-7 col-sm-7 col-xs-12 rmp">
637					<div class="gallery-slider">
638						${imagesHtml}
639					</div>
640				</div>
641				<div class="content nicescroll col-lg-4 col-md-5 col-sm-5 col-xs-12" data-cursor-color="#fff">
642					<span class="post-date">${gallery.date}</span>
643					<h2>${gallery.title}</h2>
644					<div class="post-content">${gallery.content || ''}</div>
645				</div>
646			</div>
647		`;
648	}
649
650
651	function close_expander() {
652		$('.close-expander').click(function (e) {
653			$('li.expanded').removeClass('expanded');
654			$('.expander').remove();
655		});
656	}
657
658	/*
659	* scroll_to
660	* scroll to target element
661	*------------------------------*/
662	function scroll_to(element) {
663		var top = (device.is_desktop) ? 54 : 0;
664		$('html, body').animate({
665			scrollTop: $(element).offset().top - top
666		}, 200);
667	}
668
669	/*
670	* term_filter
671	*------------------------------*/
672	term_filter('tv_term_filter');
673
674	function term_filter(action) {
675		$('.fshf-tv.term-filter>li>a').click(function (e) {
676			e.preventDefault();
677			_this = $(this);
678			$('.term-filter>li>a').removeClass('current');
679			_this.addClass('current');
680			$('.grid-items').empty()
681			$('.preloader').show();
682			var term_id = _this.data('term-id');
683			$('.load-more').attr('data-term-id', term_id);
684			$('.load-more').hide();
685			$('.load-more').attr('data-page', 1); // Changed from offset to page
686			$('.load-more').attr('data-term-id', term_id);
687
688			// Use REST API instead of AJAX
689			fetch('/wp-json/fshf/v1/tv/videos?per_page=21&page=1&term_id=' + term_id)
690				.then(response => response.json())
691				.then(data => {
692					let html = '';
693					if (data.videos && data.videos.length > 0) {
694						data.videos.forEach(video => {
695							html += renderVideoItem(video);
696						});
697						$('.grid-items').empty().html(html);
698						if (data.total_pages > 1) {
699							$('.load-more').show();
700							$('.load-more').attr('data-page', 2);
701						}
702					}
703					$('.preloader').hide();
704					tv_load_video();
705				})
706				.catch(error => {
707					console.error('Error loading videos:', error);
708					$('.preloader').hide();
709				});
710		});
711	}
712
713	// Helper function to render video item HTML
714	function renderVideoItem(video) {
715		return `
716			<li class="item" data-post-id="${video.id}">
717				<div class="inner col-xs-12 rmp">
718					<img src="${video.thumbnail}" class="img-responsive">
719					<div class="_gallery-preview">${video.title}</div>
720					<div class="icon-post-format video"></div>
721				</div>
722			</li>
723		`;
724	}
725
726	// Helper function to render gallery item HTML
727	function renderGalleryItem(gallery) {
728		return `
729			<li class="item" data-post-id="${gallery.id}" style="overflow: hidden;">
730				<div class="inner col-xs-12 rmp">
731					<div class="image-container">
732						<img src="${gallery.thumbnail}" class="img-responsive">
733					</div>
734					<div class="icon-post-format"></div>
735					<div class="_gallery-preview">${gallery.title}
736						<span class="total"><i class="fa fa-camera"></i> ${gallery.count}</span>
737					</div>
738				</div>
739			</li>
740		`;
741	}
742
743	/*
744	* load more
745	*------------------------------*/
746	load_more();
747	function load_more() {
748		$('.load-more').click(function (e) {
749			e.preventDefault();
750			_this = $(this);
751			_this.addClass('loading');
752			var page = parseInt(_this.attr('data-page')) || 1;
753			var next_page = page + 1;
754			var post_type = _this.attr('data-post-type');
755			var term_id = _this.attr('data-term-id') || '';
756
757			if (post_type === 'tv') {
758				// Use REST API for TV videos
759				const url = `/wp-json/fshf/v1/tv/videos?per_page=21&page=${page}&term_id=${term_id}`;
760
761				fetch(url)
762					.then(response => response.json())
763					.then(data => {
764						_this.removeClass('loading');
765
766						if (data.videos && data.videos.length > 0) {
767							let html = '';
768							data.videos.forEach(video => {
769								html += renderVideoItem(video);
770							});
771							$('.grid-items').append(html);
772
773							// Update page number for next load
774							_this.attr('data-page', next_page);
775
776							// Hide load more button if no more pages
777							if (data.current_page >= data.total_pages) {
778								_this.hide();
779							}
780
781							tv_load_video();
782						} else {
783							_this.hide();
784						}
785					})
786					.catch(error => {
787						console.error('Error loading more videos:', error);
788						_this.removeClass('loading');
789					});
790			} else if (post_type === 'gallery') {
791				// Use REST API for gallery
792				const url = `/wp-json/fshf/v1/gallery/items?per_page=21&page=${page}&term_id=${term_id}`;
793
794				fetch(url)
795					.then(response => response.json())
796					.then(data => {
797						_this.removeClass('loading');
798
799						if (data.galleries && data.galleries.length > 0) {
800							let html = '';
801							data.galleries.forEach(gallery => {
802								html += renderGalleryItem(gallery);
803							});
804							$('.grid-items').append(html);
805
806							// Update page number for next load
807							_this.attr('data-page', next_page);
808
809							// Hide load more button if no more pages
810							if (data.current_page >= data.total_pages) {
811								_this.hide();
812							}
813
814							load_gallery();
815							gallery_preview();
816						} else {
817							_this.hide();
818						}
819					})
820					.catch(error => {
821						console.error('Error loading more galleries:', error);
822						_this.removeClass('loading');
823					});
824			} else {
825				// Keep old AJAX for other post types if any
826				var offset = _this.attr('data-offset');
827				var increment = parseInt(offset) + 12;
828				_this.attr('data-offset', increment);
829
830				$.ajax({
831					url: ajax_url,
832					type: 'POST',
833					data: {
834						action: 'load_more',
835						post_type: post_type,
836						offset: offset,
837						term_id: term_id
838					},
839					success: function (res) {
840						_this.removeClass('loading');
841						try {
842							var post_count = $.parseJSON(res).post_count;
843							if (post_count < 1)
844								$('.load-more').hide();
845
846						} catch (error) {
847							$('.grid-items').append(res);
848						}
849					}
850				});
851			}
852		});
853	}
854	function init_gallery_slider() {
855		$('.gallery-slider').slick({
856			autoplay: true,
857			autoplaySpeed: 2000,
858			arrows: true,
859			dots: false,
860			infinite: true,
861			speed: 300,
862			slidesToShow: 1,
863			adaptiveHeight: false,
864			fade: true,
865			pauseOnHover: true,
866			pauseOnFocus: true,
867		}).find('.item').fadeIn(300);
868	}
869
870	/*
871	* magnific popup - media gallery
872	*------------------------------*/
873	open_gallery();
874	function open_gallery() {
875		$('.open-gallery').click(function (e) {
876			e.preventDefault();
877			var items = $(this).attr('data-gallery');
878
879			items = $.parseJSON(items);
880			$.magnificPopup.open({
881				items: items,
882				gallery: {
883					enabled: true
884				},
885				type: 'image',
886				mainClass: 'mfp-fade',
887			});
888		});
889	}
890
891	gallery_preview();
892	function gallery_preview() {
893		// $('.gallery-grid-items .item').hover(
894		//        function(){
895		//            $(this).find('._gallery-preview').fadeIn(300);
896		//        },
897		//         function(){
898		//            $(this).find('._gallery-preview').fadeOut(300);
899		//        }
900		//    );
901	}
902
903	/*
904	* Accordions
905	*------------------------------*/
906	$('button.accordion').click(function () {
907		if ($(this).hasClass('active')) {
908			$(this).removeClass('active');
909			$(this).parent().find('.panel.active').slideUp(200);
910		} else {
911			$(this).addClass('active');
912			$(this).parent().find('.panel').slideDown(200);
913		}
914	});
915
916	/*
917	* Prevent copy paste
918	*------------------------------*/
919	//prevent copy-paste
920	// if(typeof is_loggedin !='undefined' && !is_loggedin)
921	// 	_preventCopy();
922
923	function _preventCopy() {
924
925		//disable right click
926		jQuery(window).on('contextmenu', function () {
927			return false;
928		});
929
930		//disable [cut, copy, paste]
931		jQuery(window).bind('cut copy paste', function (e) {
932			e.preventDefault();
933		});
934
935		//disable selection
936		//jQuery(window).disableSelection();
937
938		//disable ctr+u
939		document.onkeydown = function (e) {
940			if (e.ctrlKey &&
941				(e.keyCode === 67 ||
942					e.keyCode === 86 ||
943					e.keyCode === 85 ||
944					e.keyCode === 117)) {
945				return false;
946			} else {
947				return true;
948			}
949		};
950	}
951
952	/*
953	* fix blocks height
954	*------------------------------*/
955	if (device.is_desktop || device.is_tablet_land || device.is_tablet_port) {
956		//players
957		$('.players .group.list').matchHeight();
958
959		//sitemap menu
960		$('.footer-menu>li').matchHeight();
961
962		//table legend
963		//$('.single table.legend').height($('table.ranking').height() - 35);
964
965		//$('.home-articles .metadata').matchHeight();
966
967
968	}
969	$('.assembly-team').matchHeight();
970	/*
971	* table tr link
972	*------------------------------*/
973	tr_link();
974	function tr_link() {
975		$('tr').click(function (e) {
976			var href = $(this).attr('data-href');
977			if (typeof href != 'undefined')
978				window.location = $(this).data('href');
979		});
980	}
981
982	/*
983	* translate shop fields(number, name)
984	*------------------------------*/
985	if (clang == 'en') {
986		$('.wccpf_fields_table label[for=numer]').text('Number');
987		$('.wccpf_fields_table label[for=emer]').text('Name');
988	}
989
990	/*
991	* Newsletter form - populate country select list
992	*-------------------------------------------------*/
993	$('.country-select-list').empty().append('<option value="AF">Afghanistan</option><option value="AX">Åland Islands</option><option value="AL">Albania</option><option value="DZ">Algeria</option><option value="AS">American Samoa</option><option value="AD">Andorra</option><option value="AO">Angola</option><option value="AI">Anguilla</option><option value="AQ">Antarctica</option><option value="AG">Antigua and Barbuda</option><option value="AR">Argentina</option><option value="AM">Armenia</option><option value="AW">Aruba</option><option value="AU">Australia</option><option value="AT">Austria</option><option value="AZ">Azerbaijan</option><option value="BS">Bahamas</option><option value="BH">Bahrain</option><option value="BD">Bangladesh</option><option value="BB">Barbados</option><option value="BY">Belarus</option><option value="BE">Belgium</option><option value="BZ">Belize</option><option value="BJ">Benin</option><option value="BM">Bermuda</option><option value="BT">Bhutan</option><option value="BO">Bolivia, Plurinational State of</option><option value="BQ">Bonaire, Sint Eustatius and Saba</option><option value="BA">Bosnia and Herzegovina</option><option value="BW">Botswana</option><option value="BV">Bouvet Island</option><option value="BR">Brazil</option><option value="IO">British Indian Ocean Territory</option><option value="BN">Brunei Darussalam</option><option value="BG">Bulgaria</option><option value="BF">Burkina Faso</option><option value="BI">Burundi</option><option value="KH">Cambodia</option><option value="CM">Cameroon</option><option value="CA">Canada</option><option value="CV">Cape Verde</option><option value="KY">Cayman Islands</option><option value="CF">Central African Republic</option><option value="TD">Chad</option><option value="CL">Chile</option><option value="CN">China</option><option value="CX">Christmas Island</option><option value="CC">Cocos (Keeling) Islands</option><option value="CO">Colombia</option><option value="KM">Comoros</option><option value="CG">Congo</option><option value="CD">Congo, the Democratic Republic of the</option><option value="CK">Cook Islands</option><option value="CR">Costa Rica</option><option value="CI">Côte d&#39;Ivoire</option><option value="HR">Croatia</option><option value="CU">Cuba</option><option value="CW">Curaçao</option><option value="CY">Cyprus</option><option value="CZ">Czech Republic</option><option value="DK">Denmark</option><option value="DJ">Djibouti</option><option value="DM">Dominica</option><option value="DO">Dominican Republic</option><option value="EC">Ecuador</option><option value="EG">Egypt</option><option value="SV">El Salvador</option><option value="GQ">Equatorial Guinea</option><option value="ER">Eritrea</option><option value="EE">Estonia</option><option value="ET">Ethiopia</option><option value="FK">Falkland Islands (Malvinas)</option><option value="FO">Faroe Islands</option><option value="FJ">
993Fiji</option><option value="FI">Finland</option><option value="FR">France</option><option value="GF">French Guiana</option><option value="PF">French Polynesia</option><option value="TF">French Southern Territories</option><option value="GA">Gabon</option><option value="GM">Gambia</option><option value="GE">Georgia</option><option value="DE">Germany</option><option value="GH">Ghana</option><option value="GI">Gibraltar</option><option value="GR">Greece</option><option value="GL">Greenland</option><option value="GD">Grenada</option><option value="GP">Guadeloupe</option><option value="GU">Guam</option><option value="GT">Guatemala</option><option value="GG">Guernsey</option><option value="GN">Guinea</option><option value="GW">Guinea-Bissau</option><option value="GY">Guyana</option><option value="HT">Haiti</option><option value="HM">Heard Island and McDonald Islands</option><option value="VA">Holy See (Vatican City State)</option><option value="HN">Honduras</option><option value="HK">Hong Kong</option><option value="HU">Hungary</option><option value="IS">Iceland</option><option value="IN">India</option><option value="ID">Indonesia</option><option value="IR">Iran, Islamic Republic of</option><option value="IQ">Iraq</option><option value="IE">Ireland</option><option value="IM">Isle of Man</option><option value="IL">Israel</option><option value="IT">Italy</option><option value="JM">Jamaica</option><option value="JP">Japan</option><option value="JE">Jersey</option><option value="JO">Jordan</option><option value="KZ">Kazakhstan</option><option value="KE">Kenya</option><option value="KI">Kiribati</option><option value="KP">Korea, Democratic People&#39;s Republic of</option><option value="KR">Korea, Republic of</option><option value="KW">Kuwait</option><option value="KG">Kyrgyzstan</option><option value="LA">Lao People&#39;s Democratic Republic</option><option value="LV">Latvia</option><option value="LB">Lebanon</option><option value="LS">Lesotho</option><option value="LR">Liberia</option><option value="LY">Libya</option><option value="LI">Liechtenstein</option><option value="LT">Lithuania</option><option value="LU">Luxembourg</option><option value="MO">Macao</option><option value="MK">Macedonia, the former Yugoslav Republic of</option><option value="MG">Madagascar</option><option value="MW">Malawi</option><option value="MY">Malaysia</option><option value="MV">Maldives</option><option value="ML">Mali</option><option value="MT">Malta</option><option value="MH">Marshall Islands</option><option value="MQ">Martinique</option><option value="MR">Mauritania</option><option value="MU">Mauritius</option><option value="YT">Mayotte</option><option value="MX">Mexico</option><option value="FM">Micronesia, Federated States of</option><option value="MD">Moldova, Republic of</option><option value="MC">Monaco</option><option value="MN">Mongolia</option><option value="ME">Montenegro</option><option value="MS">Montserrat</option><option value="MA">Morocco</option><option value="MZ">Mozambique</option><option value="MM">Myanmar</option><option value="NA">Namibia</option><option value="NR">Nauru</option><option value="NP">Nepal</option><option value="NL">Netherlands</option><option value="NC">New Caledonia</option><option value="NZ">New Zealand</option><option value="NI">Nicaragua</option><option value="NE">Niger</option><option value="NG">Nigeria</option><option value="NU">Niue</option><option value="NF">Norfolk Island</option><option value="MP">Northern Mariana Islands</option><option value="NO">Norway</option><option value="OM">Oman</option><option value="PK">Pakistan</option><option value="PW">Palau</option><option value="PS">Palestinian Territory, Occupied</option><option value="PA">Panama</option><option value="PG">Papua New Guinea</option><option value="PY">Paraguay</option><option value="PE">Peru</option><option value="PH">Philippines</option><option value="PN">Pitcairn</option><option value="PL">Poland</option><option value="PT">Portugal</option><option value="PR">Puerto Rico</option><option value="QA">Qatar</option><option value="RE">Réunion</option><option value="RO">Romania</option><option value="RU">Russian Federation</option><option value="RW">Rwanda</option><option value="BL">Saint Barthélemy</option><option value="SH">Saint Helena, Ascension and Tristan da Cunha</option><option value="KN">Saint Kitts and Nevis</option><option value="LC">Saint Lucia</option><option value="MF">Saint Martin (French part)</option><option value="PM">Saint Pierre and Miquelon</option><option value="VC">Saint Vincent and the Grenadines</option><option value="WS">Samoa</option><option value="SM">San Marino</option><option value="ST">Sao Tome and Principe</option><option value="SA">Saudi Arabia</option><option value="SN">Senegal</option><option value="RS">Serbia</option><option value="SC">Seychelles</option><option value="SL">Sierra Leone</option><option value="SG">Singapore</option><option value="SX">Sint Maarten (Dutch part)</option><option value="SK">Slovakia</option><option value="SI">Slovenia</option><option value="SB">Solomon Islands</option><option value="SO">Somalia</option><option value="ZA">South Africa</option><option value="GS">South Georgia and the South Sandwich Islands</option><option value="SS">South Sudan</option><option value="ES">Spain</option><option value="LK">Sri Lanka</option><option value="SD">Sudan</option><option value="SR">Suriname</option><option value="SJ">Svalbard and Jan Mayen</option><option value="SZ">Swaziland</option><option value="SE">Sweden</option><option value="CH">Switzerland</option><option value="SY">Syrian Arab Republic</option><option value="TW">Taiwan, Province of China</option><option value="TJ">Tajikistan</option><option value="TZ">Tanzania, United Republic of</option><option value="TH">Thailand</option><option value="TL">Timor-Leste</option><option value="TG">Togo</option><option value="TK">Tokelau</option><option value="TO">Tonga</option><option value="TT">Trinidad and Tobago</option><option value="TN">Tunisia</option><option value="TR">Turkey</option><option value="TM">Turkmenistan</option><option value="TC">Turks and Caicos Islands</option><option value="TV">Tuvalu</option><option value="UG">Uganda</option><option value="UA">Ukraine</option><option value="AE">United Arab Emirates</option><option value="GB">United Kingdom</option><option value="US">United States</option><option value="UM">United States Minor Outlying Islands</option><option value="UY">Uruguay</option><option value="UZ">Uzbekistan</option><option value="VU">Vanuatu</option><option value="VE">Venezuela, Bolivarian Republic of</option><option value="VN">Viet Nam</option><option value="VG">Virgin Islands, British</option><option value="VI">Virgin Islands, U.S.</option><option value="WF">Wallis and Futuna</option><option value="EH">Western Sahara</option><option value="YE">Yemen</option><option value="ZM">Zambia</option><option value="ZW">Zimbabwe</option>');
994
995	//vfb datepicker, add placeholder
996	$('.vfb-date-picker').attr('placeholder', 'dd/mm/yyyy');
997	$('.vfb-date-picker').attr('readonly', true);
998	$('.vfb-date-picker').datepicker({
999		changeMonth: true,
1000		changeYear: true,
1001		yearRange: '1940:2017'
1002	});
1003
1004	//translate input errors "required field"
1005	if (clang == 'sq') {
1006		$('.visual-form-builder').on('submit', function (e) {
1007			setTimeout(function () {
1008				$('.vfb-error').empty().append('Fushe e detyruar');
1009			}, 10);
1010		});
1011	}
1012
1013	$(window).scroll(function () {
1014		var scroll = $(window).scrollTop();
1015		if (scroll > 400) {
1016			$('.gotoTop').show();
1017		} else {
1018			$('.gotoTop').hide();
1019		}
1020	});
1021
1022	$('.gotoTop').click(function () {
1023		$("html, body").animate({ scrollTop: 0 }, 300);
1024	});
1025
1026
1027	$('.prevent_default, .prevent_default a').click(function (e) {
1028		e.preventDefault();
1029	});
1030
1031
1032	$('[wccpf-type="number"]').keyup(function (e) {
1033		var number = $(this).val();
1034		if (number < 0) {
1035			$(this).val('');
1036		}
1037		if (number.length > 2) {
1038			number = number.substring(1, 3);
1039			$(this).val(number);
1040		}
1041	});
1042
1043	$('[wccpf-type="text"]').keyup(function (e) {
1044		var str = $(this).val();
1045		if (str.length > 10) {
1046			str = str.substring(1, 11);
1047			$(this).val(str);
1048		}
1049	});
1050
1051	if (typeof AOS != 'undefined') {
1052		AOS.init();
1053	}
1054
1055	$('.prohibited-items .item .img-container').matchHeight();
1056	$('.prohibited-items .item').matchHeight();
1057
1058	//euro 2025
1059	$('.js-waiting-list-btn').click(function (e) {
1060		e.preventDefault();
1061
1062		const email = $('#waiting-list-email').val();
1063
1064		$.ajax({
1065			url: ajax_url,
1066			type: 'POST',
1067			data: {
1068				action: 'save_waiting_list',
1069				email: email
1070			},
1071			success: function (response) {
1072				const $responseElement = $('.js-response');
1073				$responseElement.show().text(response.data.message);
1074
1075				if (response.success) {
1076					$responseElement.removeClass('error').addClass('success');
1077				} else {
1078					$responseElement.removeClass('success').addClass('error');
1079				}
1080			}
1081		});
1082	});
1083
1084
1085});// document ready

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.