PageSourceSearch

https://www.orecchioacerbo.it/wp-content/plugins/trx_utils/shortcodes/theme.shortcodes.js

js orecchioacerbo.it collected 2026-10-02 12:30:19 UTC 37,989 bytes, 1,088 lines download raw bytes

1// Document ready actions for shortcodes
2jQuery(document).ready(function(){
3	"use strict";
4	setTimeout(function() {
5		booklovers_sc_animation();
6	}, 600);
7});
8
9
10// Resize actions
11jQuery(window).resize(function(){
12	"use strict";
13	booklovers_sc_sliders_resize();
14});
15
16
17// Animation
18function booklovers_sc_animation() {
19	jQuery('[data-animation^="animated"]:not(.animated)').each(function() {
20		"use strict";
21		if (jQuery(this).offset().top < jQuery(window).scrollTop() + jQuery(window).height())
22			jQuery(this).addClass(jQuery(this).data('animation'));
23	});
24}
25
26
27// Shortcodes init
28function booklovers_sc_init(container) {
29
30	// Accordion
31	if (container.find('.sc_accordion:not(.inited)').length > 0) {
32		container.find(".sc_accordion:not(.inited)").each(function () {
33			"use strict";
34			var init = jQuery(this).data('active');
35			if (isNaN(init)) init = 0;
36			else init = Math.max(0, init);
37			jQuery(this)
38				.addClass('inited')
39				.accordion({
40					active: init,
41					heightStyle: "content",
42					header: "> .sc_accordion_item > .sc_accordion_title",
43					create: function (event, ui) {
44						"use strict";
45						booklovers_init_shortcodes(ui.panel);
46						if (window.booklovers_init_hidden_elements) booklovers_init_hidden_elements(ui.panel);
47						ui.header.each(function () {
48							"use strict";
49							jQuery(this).parent().addClass('sc_active');
50						});
51					},
52					activate: function (event, ui) {
53						"use strict";
54						booklovers_init_shortcodes(ui.newPanel);
55						if (window.booklovers_init_hidden_elements) booklovers_init_hidden_elements(ui.newPanel);
56						ui.newHeader.each(function () {
57							"use strict";
58							jQuery(this).parent().addClass('sc_active');
59						});
60						ui.oldHeader.each(function () {
61							"use strict";
62							jQuery(this).parent().removeClass('sc_active');
63						});
64					}
65				});
66		});
67	}
68
69	// Blogger: style Polaroid
70	if (container.find('.sc_blogger.layout_polaroid .photostack:not(.inited)').length > 0) {
71		container.find(".sc_blogger.layout_polaroid .photostack:not(.inited)").each(function () {
72			"use strict";
73			var obj = jQuery(this);
74			var id = obj.attr('id');
75			if (id == undefined) {
76				id = 'photostack_'+Math.random();
77				id = id.replace('.', '');
78				obj.attr('id', id);
79			}
80			setTimeout(function() {
81				"use strict";
82				obj.addClass('inited').parent().height("auto");
83				new Photostack( obj.get(0), {
84					callback: function( item ) {
85					}
86				} );
87			}, 10);
88		});
89	}
90
91	// Blogger: Scroll horizontal
92	if (container.find('.sc_blogger .sc_scroll_horizontal .sc_scroll_wrapper:not(.inited)').length > 0) {
93		container.find(".sc_blogger .sc_scroll_horizontal .sc_scroll_wrapper:not(.inited)").each(function () {
94			"use strict";
95			var obj = jQuery(this);
96			var width = 0;
97			obj.find('.isotope_item').each(function(){
98				"use strict";
99				width += jQuery(this).outerWidth();
100			});
101			obj.addClass('inited').width(width);
102		});
103	}
104
105	// Form
106	if (container.find('.sc_form:not(.inited) form').length > 0) {
107		container.find(".sc_form:not(.inited) form").each(function() {
108			"use strict";
109			jQuery(this).addClass('inited');
110			jQuery(this).submit(function(e) {
111				"use strict";
112				booklovers_sc_form_validate(jQuery(this));
113				e.preventDefault();
114				return false;
115			});
116			if (jQuery(this).find('.js__datepicker').length > 0) {
117				jQuery(this).find('.js__datepicker').pickadate({
118					// Work-around for some mobile browsers clipping off the picker.
119					onOpen: function() {
120						"use strict";
121						jQuery('pre').css('overflow', 'hidden');
122						},
123					onClose: function() {
124						"use strict";
125						jQuery('pre').css('overflow', '');
126					},
127					monthsShort: [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'June', 'July', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec' ],
128					showMonthsShort: true,
129					format: 'dd.mm.yyyy',
130					formatSubmit: 'yyyy-mm-dd',
131					min: true
132				});
133			}
134			if (jQuery(this).find('.js__timepicker').length > 0) {
135				jQuery(this).find('.js__timepicker').pickatime();
136			}
137		});
138	}
139
140	//Countdown
141	if (container.find('.sc_countdown:not(.inited)').length > 0) {
142		container.find('.sc_countdown:not(.inited)')
143			.each(function () {
144				"use strict";
145				jQuery(this).addClass('inited');
146				var id = jQuery(this).attr('id');
147				var curDate = new Date(); 
148				var curDateTimeStr = curDate.getFullYear()+'-'+(curDate.getMonth()<9 ? '0' : '')+(curDate.getMonth()+1)+'-'+(curDate.getDate()<10 ? '0' : '')+curDate.getDate()
149					+' '+(curDate.getHours()<10 ? '0' : '')+curDate.getHours()+':'+(curDate.getMinutes()<10 ? '0' : '')+curDate.getMinutes()+':'+(curDate.getSeconds()<10 ? '0' : '')+curDate.getSeconds(); 
150				var interval = 1;	//jQuery(this).data('interval');
151				var endDateStr = jQuery(this).data('date');
152				var endDateParts = endDateStr.split('-');
153				var endTimeStr = jQuery(this).data('time');
154				var endTimeParts = endTimeStr.split(':');
155				if (endTimeParts.length < 3) endTimeParts[2] = '00';
156				var endDateTimeStr = endDateStr+' '+endTimeStr;
157				if (curDateTimeStr < endDateTimeStr) {
158					jQuery(this).find('.sc_countdown_placeholder').countdown({
159						until: new Date(endDateParts[0], endDateParts[1]-1, endDateParts[2], endTimeParts[0], endTimeParts[1], endTimeParts[2]), 
160						tickInterval: interval,
161						onTick: booklovers_countdown
162					}); 
163				} else {
164					jQuery(this).find('.sc_countdown_placeholder').countdown({
165						since: new Date(endDateParts[0], endDateParts[1]-1, endDateParts[2], endTimeParts[0], endTimeParts[1], endTimeParts[2]), 
166						tickInterval: interval,
167						onTick: booklovers_countdown
168					}); 
169				}
170			});
171	}
172
173	// Emailer form
174	if (container.find('.sc_emailer:not(.inited)').length > 0) {
175		container.find(".sc_emailer:not(.inited)")
176			.addClass('inited')
177			.on('click', '.sc_emailer_button', function(e) {
178				"use strict";
179				var form = jQuery(this).parents('form');
180				var parent = jQuery(this).parents('.sc_emailer');
181				if (parent.hasClass('sc_emailer_opened')) {
182					if (form.length>0 && form.find('input').val()!='') {
183						var group = jQuery(this).data('group');
184						var email = form.find('input').val();
185						var regexp = new RegExp(BOOKLOVERS_STORAGE['email_mask']);
186						if (!regexp.test(email)) {
187							form.find('input').get(0).focus();
188							booklovers_message_warning(BOOKLOVERS_STORAGE['strings']['email_not_val
188id']);
189						} else {
190							jQuery.post(BOOKLOVERS_STORAGE['ajax_url'], {
191								action: 'emailer_submit',
192								nonce: BOOKLOVERS_STORAGE['ajax_nonce'],
193								group: group,
194								email: email
195							}).done(function(response) {
196								"use strict";
197								var rez = {};
198								try {
199									rez = JSON.parse(response);
200								} catch (e) {
201									rez = { error: BOOKLOVERS_STORAGE['ajax_error'] };
202									console.log(response);
203								}
204								if (rez.error === '') {
205									booklovers_message_info(BOOKLOVERS_STORAGE['strings']['email_confirm'].replace('%s', email));
206									form.find('input').val('');
207								} else {
208									booklovers_message_warning(rez.error);
209								}
210							});
211						}
212					} else
213						form.get(0).submit();
214				} else {
215					parent.addClass('sc_emailer_opened');
216				}
217				e.preventDefault();
218				return false;
219			});
220	}
221	
222	// Googlemap init
223	if (container.find('.sc_googlemap:not(.inited)').length > 0) {
224		container.find('.sc_googlemap:not(.inited)')
225			.each(function () {
226				"use strict";
227				if (jQuery(this).parents('div:hidden,article:hidden').length > 0) return;
228				var map = jQuery(this).addClass('inited');
229				var map_id		= map.attr('id');
230				var map_zoom	= map.data('zoom');
231				var map_style	= map.data('style');
232				var map_markers = [];
233				map.find('.sc_googlemap_marker').each(function() {
234					"use strict";
235					var marker = jQuery(this);
236					map_markers.push({
237						point:			marker.data('point'),
238						address:		marker.data('address'),
239						latlng:			marker.data('latlng'),
240						description:	marker.data('description'),
241						title:			marker.data('title')
242					});
243				});
244				booklovers_googlemap_init( jQuery('#'+map_id).get(0), {style: map_style, zoom: map_zoom, markers: map_markers});
245			});
246	}
247
248	// Infoboxes
249	if (container.find('.sc_infobox.sc_infobox_closeable:not(.inited)').length > 0) {
250		container.find('.sc_infobox.sc_infobox_closeable:not(.inited)')
251			.addClass('inited')
252			.on('click', function () {
253				"use strict";
254				jQuery(this).slideUp();
255			});
256	}
257
258	// Popup links
259	if (container.find('.sc_popup_link:not(.inited)').length > 0) {
260		container.find('.sc_popup_link:not(.inited)').each(function() {
261			var popup_id = jQuery(this).attr('href');
262			jQuery(this)
263				.addClass('inited')
264				.magnificPopup({
265					type: 'inline',
266					removalDelay: 500,
267					midClick: true,
268					callbacks: {
269						beforeOpen: function () {
270							this.st.mainClass = 'mfp-zoom-in';
271						},
272						open: function() {
273							"use strict";
274							booklovers_init_shortcodes(jQuery(popup_id));
275							if (window.booklovers_init_hidden_elements) booklovers_init_hidden_elements(jQuery(popup_id));
276						},
277						close: function() {}
278					}
279				});
280		});
281	}
282
283	// Recent news widget and sc
284	if (container.find('.sc_recent_news_header_category_item_more:not(.inited)').length > 0) {
285		container.find('.sc_recent_news_header_category_item_more:not(.inited)').each(function() {
286			"use strict";
287			jQuery(this)
288				.addClass('inited')
289				.on('click', function(e) {
290					"use strict";
291					jQuery(this).toggleClass('opened').find('.sc_recent_news_header_more_categories').slideToggle();
292					e.preventDefault();
293					return false;
294				});
295		});
296	}
297
298	// Search form
299	if (container.find('.search_wrap:not(.inited)').length > 0) {
300		container.find('.search_wrap:not(.inited)').each(function() {
301			"use strict";
302			jQuery(this)
303				.addClass('inited')
304				.on('click', '.search_submit', function(e) {
305					"use strict";
306					var search_wrap = jQuery(this).parents('.search_wrap');
307					if (!search_wrap.hasClass('search_state_fixed')) {
308						if (search_wrap.hasClass('search_state_opened')) {
309							if (search_wrap.find('.search_field').val() != '')
310								search_wrap.find('form').get(0).submit();
311							else
312								search_wrap.removeClass('search_state_opened').addClass('search_state_closed').find('.search_results').fadeOut();
313						} else
314							search_wrap.removeClass('search_state_closed').addClass('search_state_opened').find('.search_field').get(0).focus();
315					} else {
316						if (search_wrap.find('.search_field').val() != '')
317							search_wrap.find('form').get(0).submit();
318						else {
319							search_wrap.find('.search_field').val('');
320							search_wrap.find('.search_results').fadeOut();
321						}
322					}
323					e.preventDefault();
324					return false;
325				})
326				.on('click', '.search_results_close', function(e) {
327					"use strict";
328					jQuery(this).parent().fadeOut();
329					e.preventDefault();
330					return false;
331				})
332				.on('click', '.search_more', function(e) {
333					"use strict";
334					if (jQuery(this).parents('.search_wrap').find('.search_field').val() != '')
335						jQuery(this).parents('.search_wrap').find('form').get(0).submit();
336					e.preventDefault();
337					return false;
338				});
339			if (jQuery(this).hasClass('search_ajax')) {
340				var ajax_timer = null;
341				jQuery(this).find('.search_field').keyup(function(e) {
342					"use strict";
343					var search_field = jQuery(this);
344					var s = search_field.val();
345					if (ajax_timer) {
346						clearTimeout(ajax_timer);
347						ajax_timer = null;
348					}
349					if (s.length >= BOOKLOVERS_STORAGE['ajax_search_min_length']) {
350						ajax_timer = setTimeout(function() {
351							"use strict";
352							jQuery.post(BOOKLOVERS_STORAGE['ajax_url'], {
353								action: 'ajax_search',
354								nonce: BOOKLOVERS_STORAGE['ajax_nonce'],
355								text: s
356							}).done(function(response) {
357								"use strict";
358								clearTimeout(ajax_timer);
359								ajax_timer = null;
360								var rez = {};
361								try {
362									rez = JSON.parse(response);
363								} catch (e) {
364									rez = { error: BOOKLOVERS_STORAGE['ajax_error'] };
365									console.log(response);
366								}
367								if (rez.error === '') {
368									search_field.parents('.search_ajax').find('.search_results_content').empty().append(rez.data);
369									search_field.parents('.search_ajax').find('.search_results').fadeIn();
370								} else {
371									booklovers_message_warning(BOOKLOVERS_STORAGE['strings']['search_error']);
372								}
373							});
374						}, BOOKLOVERS_STORAGE['ajax_search_delay']);
375					}
376				});
377			}
378		});
379	}
380
381	
382	// Section Pan init
383	if (container.find('.sc_pan:not(.inited_pan)').length > 0) {
384		container.find('.sc_pan:not(.inited_pan)')
385			.each(function () {
386				"use strict";
387				if (jQuery(this).parents('div:hidden,article:hidden').length > 0) return;
388				var pan = jQuery(this).addClass('inited_pan');
389				var cont = pan.parent();
390				cont.mousemove(function(e) {
391					"use strict";
392					var anim = {};
393					var tm = 0;
394					var pw = pan.width(), ph = pan.height();
395					var cw = cont.width(), ch = cont.height();
396					var coff = cont.offset();
397					if (pan.hasClass('sc_pan_vertical'))
398						pan.css('top', -Math.floor((e.pageY - coff.top) / ch * (ph-ch)));
399					if (pan.hasClass('sc_pan_horizontal'))
400						pan.css('left', -Math.floor((e.pageX - coff.left) / cw * (pw-cw)));
401				});
402				cont.mouseout(function(e) {
403					"use strict";
404					pan.css({'left': 0, 'top': 0});
405				});
406			});
407	}
408
409	// Scroll
410	if (container.find('.sc_scroll:not(.inited)').length > 0) {
411		container.find('.sc_scroll:not(.inited)')
412			.each(function () {
413				"use strict";
414				if (jQuery(this).parents('div:hidden,article:hidden').length > 0) return;
415				BOOKLOVERS_STORAGE['scroll_init_counter'] = 0;
416				booklovers_sc_init_scroll_area(jQuery(this));
417			});
418	}
419
420
421	// Swiper Slider
422	if (container.find('.sc_slider_swiper:not(.inited)').length > 0) {
423		container.find('.sc_slider_swiper:not(.inited)')
424			.each(function () {
425				"use strict";
426				if (jQuery(this).parents('div:hidden,article:hidden').length > 0) return;
427				//if (jQuery(this).parents('.isotope_wrap:not(.inited)').length > 0) return;
428				jQuery(this).addClass('inited');
429				booklovers_sc_slider_autoheight(jQuery(this));
430				if (jQuery(this).parents('.sc_slider_pagination_area').length > 0) {
431					jQuery(this).parents('.sc_slider_pagination_area').find('.sc_slider_pagination .post_item').eq(0).addClass('active');
432				}
433				var id = jQuery(this).attr('id');
434				if (id == undefined) {
435					id = 'swiper_'+Math.random();
436					id = id.replace('.', '');
437					jQuery(this).attr('id', id);
438				}
439				jQuery(this).addClass(id);
440				jQuery(this).find('.slides .swiper-slide').css('position', 'relative');
441				var width = jQuery(this).width();
442				if (width == 0) width = jQuery(this).parent().width();
443				var spv = jQuery(this).data('slides-per-view');
444				if (spv == undefined) spv = 1;
445				var min_width = jQuery(this).data('slides-min-width');
446				if (min_width == undefined) min_width = 50;
447				if (width / spv < min_width) spv = Math.max(1, Math.floor(width / min_width));
448				var space = jQuery(this).data('slides-space');
449				if (space == undefined) space = 0;
450				if (BOOKLOVERS_STORAGE['swipers'] === undefined) BOOKLOVERS_STORAGE['swipers'] = {};
451				BOOKLOVERS_STORAGE['swipers'][id] = new Swiper('.'+id, {
452					calculateHeight: !jQuery(this).hasClass('sc_slider_height_fixed'),
453					resizeReInit: true,
454					autoResize: true,
455					loop: true,
456					grabCursor: true,
457			        nextButton: jQuery(this).hasClass('sc_slider_controls') ? '#'+id+' .sc_slider_next' : false,
458			        prevButton: jQuery(this).hasClass('sc_slider_controls') ? '#'+id+' .sc_slider_prev' : false,
459					pagination: jQuery(this).hasClass('sc_slider_pagination') ? '#'+id+' .sc_slider_pagination_wrap' : false,
460				    paginationClickable: true,
461					autoplay: jQuery(this).hasClass('sc_slider_noautoplay') ? false : (isNaN(jQuery(this).data('interval')) ? 7000 : jQuery(this).data('interval')),
462					autoplayDisableOnInteraction: false,
463					initialSlide: 0,
464					slidesPerView: spv,
465					loopedSlides: spv,
466					spaceBetween: space,
467					speed: 600,
468					// Autoheight on start
469					onFirstInit: function (slider){
470						"use strict";
471						var cont = jQuery(slider.container);
472						if (!cont.hasClass('sc_slider_height_auto')) return;
473						var li = cont.find('.swiper-slide').eq(1);
474						var h = li.data('height_auto');
475						if (h > 0) {
476							var pt = parseInt(li.css('paddingTop')), pb = parseInt(li.css('paddingBottom'));
477							li.height(h);
478							cont.height(h + (isNaN(pt) ? 0 : pt) + (isNaN(pb) ? 0 : pb));
479							cont.find('.swiper-wrapper').height(h + (isNaN(pt) ? 0 : pt) + (isNaN(pb) ? 0 : pb));
480						}
481					},
482					// Autoheight on slide change
483					onSlideChangeStart: function (slider){
484						"use strict";
485						var cont = jQuery(slider.container);
486						if (!cont.hasClass('sc_slider_height_auto')) return;
487						var idx = slider.activeIndex;
488						var li = cont.find('.swiper-slide').eq(idx);
489						var h = li.data('height_auto');
490						if (h > 0) {
491							var pt = parseInt(li.css('paddingTop')), pb = parseInt(li.css('paddingBottom'));
492							li.height(h);
493							cont.height(h + (isNaN(pt) ? 0 : pt) + (isNaN(pb) ? 0 : pb));
494							cont.find('.swiper-wrapper').height(h + (isNaN(pt) ? 0 : pt) + (isNaN(pb) ? 0 : pb));
495						}
496					},
497					// Change current item in 'full' or 'over' pagination wrap
498					onSlideChangeEnd: function (slider, dir) {
499						"use strict";
500						var cont = jQuery(slider.container);
501						if (cont.parents('.sc_slider_pagination_area').length > 0) {
502							var li = cont.parents('.sc_slider_pagination_area').find('.sc_slider_pagination .post_item');
503							var idx = slider.activeIndex > li.length ? 0 : slider.activeIndex-1;
504							booklovers_sc_change_active_pagination_in_slider(cont, idx);
505						}
506					}
507				});
508				
509				jQuery(this).data('settings', {mode: 'horizontal'});		// VC hook
510				
511				var curSlide = jQuery(this).find('.slides').data('current-slide');
512				if (curSlide > 0)
513					BOOKLOVERS_STORAGE['swipers'][id].slideTo(curSlide-1);
514
515				booklovers_sc_prepare_slider_navi(jQuery(this));
516
517			});
518			
519		// Check slides per view
520		booklovers_sc_sliders_resize();
521	}
522
523	//Skills init
524	if (container.find('.sc_skills_item:not(.inited)').length > 0) {
525		booklovers_sc_init_skills(container);
526		jQuery(window).scroll(function () { booklovers_sc_init_skills(container); });
527	}
528	//Skills type='arc' init
529	if (container.find('.sc_skills_arc:not(.inited)').length > 0) {
530		booklovers_sc_init_skills_arc(container);
531		jQuery(window).scroll(function () { booklovers_sc_init_skills_arc(container); });
532	}
533
534	// Tabs
535	if (container.find('.sc_tabs:not(.inited):not(.no_jquery_ui),.tabs_area:not(.inited)').length > 0) {
536		container.find('.sc_tabs:not(.inited):not(.no_jquery_ui),.tabs_area:not(.inited)').each(function () {
537			"use strict";
538			var init = jQuery(this).data('active');
539			if (isNaN(init)) init = 0;
540			else init = Math.max(0, init);
541			jQuery(this)
542				.addClass('inited')
543				.tabs({
544					active: init,
545					show: {
546						effect: 'fadeIn',
547						duration: 300
548					},
549					hide: {
550						effect: 'fadeOut',
551						duration: 300
552					},
553					create: function (event, ui) {
554						"use strict";
555						booklovers_init_shortcodes(ui.panel);
556						if (window.booklovers_init_hidden_elements) booklovers_init_hidden_elements(ui.panel);
557					},
558					activate: function (event, ui) {
559						"use strict";
560						booklovers_init_shortcodes(ui.newPanel);
561						if (window.booklovers_init_hidden_elements) booklovers_init_hidden_elements(ui.newPanel);
562					}
563				});
564		});
565	}
566	if (container.find('.sc_tabs.no_jquery_ui:not(.inited)').length > 0) {
567		container.find('.sc_tabs.no_jquery_ui:not(.inited)').each(function () {
568			"use strict";
569			jQuery(this)
570				.addClass('inited')
571				.on('click', '.sc_tabs_titles li a', function(e) {
572					"use strict";
573					if (!jQuery(this).parent().hasClass('sc_tabs_active')) {
574						var id_act = jQuery(this).parent().siblings('.sc_tabs_active').find('a').attr('href');
575						var id = jQuery(this).attr('href');
576						jQuery(this).parent().addClass('sc_tabs_active').siblings().removeClass('sc_tabs_active');
577						jQuery(id_act).fadeOut(function() {
578							"use strict";
579							jQuery(id).fadeIn(function() {
580								"use strict";
581								booklovers_init_shortcodes(jQuery(this));
582								if (window.booklovers_init_hidden_elements) booklovers_init_hidden_elements(jQuery(this));
583							});
584						});
585					}
586					e.preventDefault();
587					return false;
588				});
589			jQuery(this).find('.sc_tabs_titles li').eq(0).addClass('sc_tabs_active');
590			jQuery(this).find('.sc_tabs_content').eq(0).fadeIn(function() {
591				"use strict";
592				booklovers_init_shortcodes(jQuery(this));
593				if (window.booklovers_init_hidden_elements) booklovers_init_hidden_elements(jQuery(this));
594			});
595		});
596	}
597
598	// Toggles
599	if (container.find('.sc_toggles .sc_toggles_title:not(.inited)').length > 0) {
600		container.find('.sc_toggles .sc_toggles_title:not(.inited)')
601			.addClass('inited')
602			.on('click', function () {
603				"use strict";
604				jQuery(this).toggleClass('ui-state-active').parent().toggleClass('sc_active');
605				jQuery(this).parent().find('.sc_toggles_content').slideToggle(300, function () { 
606					"use strict";
607					booklovers_init_shortcodes(jQuery(this).parent().find('.sc_toggles_content')); 
608					if (window.booklovers_init_hidden_elements) booklovers_init_hidden_elements(jQuery(this).parent().find('.sc_toggles_content'));
609				});
610			});
611	}
612
613	//Zoom
614	if (container.find('.sc_zoom:not(.inited)').length > 0) {
615		container.find('.sc_zoom:not(.inited)')
616			.each(function () {
617				"use strict";
618				if (jQuery(this).parents('div:hidden,article:hidden').length > 0) return;
619				jQuery(this).addClass('inited');
620				jQuery(this).find('img').elevateZoom({
621					zoomType: "lens",
622					lensShape: "round",
623					lensSize: 200,
624					lensBorderSize: 4,
625					lensBorderColour: '#ccc'
626				});
627			});
628	}
629
630}
631
632
633
634// Scrolled areas
635function booklovers_sc_init_scroll_area(obj) {
636	"use strict";
637
638	// Wait for images loading
639	if (!booklovers_check_images_complete(obj) && BOOKLOVERS_STORAGE['scroll_init_counter']++ < 30) {
640		setTimeout(function() { booklovers_sc_init_scroll_area(obj); }, 200);
641		return;
642	}
643
644	// Start init scroll area
645	obj.addClass('inited');
646
647	var id = obj.attr('id');
648	if (id == undefined) {
649		id = 'scroll_'+Math.random();
650		id = id.replace('.', '');
651		obj.attr('id', id);
652	}
653	obj.addClass(id);
654
655	var parent_obj = obj.parent();
656	var parent_id  = parent_obj.attr('id');
657	if (parent_id == undefined) {
658		parent_id = 'scroll_wrap_'+Math.random();
659		parent_id = parent_id.replace('.', '');
660		parent_obj.attr('id', parent_id);
661	}
662	parent_obj.addClass(parent_id);
663
664	var bar = obj.find('#'+id+'_bar');
665	if (bar.length > 0 && !bar.hasClass(id+'_bar')) {
666		bar.addClass(id+'_bar');
667	}
668	
669	// Correct wrapper width (if scroll dir = horizontal)
670	if (obj.hasClass('sc_scroll_horizontal')) {
671		obj.find('.sc_scroll_wrapper > .sc_scroll_slide').css('width', 'auto');
672		obj.find('.sc_scroll_wrapper').css('width', obj.find('.sc_scroll_wrapper > .sc_scroll_slide').width()+10);
673		obj.find('.sc_scroll_wrapper > .sc_scroll_slide').css('width', '100%')
674	}
675
676	// Init Swiper with scroll plugin
677	if (BOOKLOVERS_STORAGE['swipers'] === undefined) BOOKLOVERS_STORAGE['swipers'] = {};
678	BOOKLOVERS_STORAGE['swipers'][id] = new Swiper('.'+id, {
679		calculateHeight: false,
680		resizeReInit: true,
681		autoResize: true,
682		freeMode: true,
683		freeModeFluid: true,
684		grabCursor: true,
685		mode: obj.hasClass('sc_scroll_vertical') ? 'vertical' : 'horizontal',
686		direction: obj.hasClass('sc_scroll_vertical') ? 'vertical' : 'horizontal',
687		slidesPerView: obj.hasClass('sc_scroll') ? 'auto' : 1,
688        nextButton: parent_obj.hasClass('sc_scroll_controls') ? '#'+parent_id+' .sc_scroll_next' : false,
689        prevButton: parent_obj.hasClass('sc_scroll_controls') ? '#'+parent_id+' .sc_scroll_prev' : false,
690        scrollbar: '.'+id+'_bar',
691        scrollbarHide: true,
692	})
693	
694	// VC hook
695	obj.data('settings', {mode: 'horizontal'});
696}
697
698
699// Slider navigation
700function booklovers_sc_prepare_slider_navi(slider) {
701	"use strict";
702	var navi = null;
703	
704/*
705	// Prev / Next
706	navi = slider.find('> .sc_slider_controls_wrap, > .sc_scroll_controls_wrap');
707	if (navi.length == 0) navi = slider.siblings('.sc_slider_controls_wrap,.sc_scroll_controls_wrap');
708	if (navi.length > 0) {
709		navi.on('click', '.sc_slider_prev,.sc_scroll_prev', function(e) {
710			var swiper = jQuery(this).parents('.swiper-slider-container');
711			if (swiper.length == 0) swiper = jQuery(this).parents('.sc_slider_controls_wrap,.sc_scroll_controls_wrap').siblings('.swiper-slider-container');
712			var id = swiper.attr('id');
713			BOOKLOVERS_STORAGE['swipers'][id].slidePrev();
714			e.preventDefault();
715			return false;
716		})
717        .on('click', '.sc_slider_next,.sc_scroll_next', function(e){
718			var swiper = jQuery(this).parents('.swiper-slider-container');
719			if (swiper.length == 0) swiper = jQuery(this).parents('.sc_slider_controls_wrap,.sc_scroll_controls_wrap').siblings('.swiper-slider-container');
720			var id = swiper.attr('id');
721			BOOKLOVERS_STORAGE['swipers'][id].slideNext();
722			e.preventDefault();
723			return false;
724		});
725	}
726*/
727	// Pagination with slide's title
728	navi = slider.siblings('.sc_slider_pagination');
729	if (navi.length > 0) {
730		navi.on('click', '.post_item', function(e){
731			var swiper = jQuery(this).parents('.sc_slider_pagination_area').find('.swiper-slider-container');
732			var id = swiper.attr('id');
733			BOOKLOVERS_STORAGE['swipers'][id].slideTo(jQuery(this).index()+1);
734			e.preventDefault();
735			return false;
736		});
737	}
738}
739
740// Sliders: Pagination
741function booklovers_sc_change_active_pagination_in_slider(slider, idx) {
742	"use strict";
743	var pg = slider.parents('.sc_slider_pagination_area').find('.sc_slider_pagination');
744	if (pg.length==0) return;
745	pg.find('.post_item').removeClass('active').eq(idx).addClass('active');
746	var h = pg.height();
747	var off = pg.find('.active').offset().top - pg.offset().top;
748	var off2 = pg.find('.sc_scroll_wrapper').offset().top - pg.offset().top;
749	var h2  = pg.find('.active').height();
750	if (off < 0) {
751		pg.find('.sc_scroll_wrapper').css({'transform': 'translate3d(0px, 0px, 0px)', 'transition-duration': '0.3s'});
752	} else if (h <= off+h2) {
753		pg.find('.sc_scroll_wrapper').css({'transform': 'translate3d(0px, -'+(Math.abs(off2)+off-h/4)+'px, 0px)', 'transition-duration': '0.3s'});
754	}
755}
756
757// Sliders: Autoheight
758function booklovers_sc_slider_autoheight(slider) {
759	"use strict";
760	if (slider.hasClass('.sc_slider_height_auto')) {
761		slider.find('.swiper-slide').each(function() {
762			"use strict";
763			if (jQuery(this).data('height_auto') == undefined) {
764				jQuery(this).attr('data-height_auto', jQuery(this).height());
765			}
766		});
767	}
768}
769
770// Sliders: Resize
771function booklovers_sc_sliders_resize() {
772	"use strict";
773	var slider = arguments[0]!==undefined ? arguments[0] : '.sc_slider_swiper.inited';
774	var resize = arguments[1]!==undefined ? arguments[1] : true;
775
776	jQuery(slider).each(function() {
777		"use strict";
778		var id = jQuery(this).attr('id');
779		var width = jQuery(this).width();
780		var last_width = jQuery(this).data('last-width');
781		if (isNaN(last_width)) last_width = 0;
782		
783		// Change slides_per_view
784		if (last_width==0 || last_width!=width) {
785			var spv = jQuery(this).data('slides-per-view');
786			if (spv == undefined) spv = 1;
787			var min_width = jQuery(this).data('slides-min-width');
788			if (min_width == undefined) min_width = 50;
789			if (width / spv < min_width) spv = Math.max(1, Math.floor(width / min_width));
790			jQuery(this).data('last-width', width);
791			if (BOOKLOVERS_STORAGE['swipers'][id].params.slidesPerView != spv) {
792				BOOKLOVERS_STORAGE['swipers'][id].params.slidesPerView = spv;
793				BOOKLOVERS_STORAGE['swipers'][id].params.loopedSlides = spv;
794				//BOOKLOVERS_STORAGE['swipers'][id].reInit();
795			}
796		}
797		
798		// Resize slider
799		if ( resize && !jQuery(this).hasClass('sc_slider_height_fixed') ) {
800			var h = 0;
801			if ( jQuery(this).find('.swiper-slide > img').length > 0 ) {
802				jQuery(this).find('.swiper-slide > img').each(function() {
803					"use strict";
804					if (jQuery(this).height() > h) h = jQuery(this).height();
805				});
806				jQuery(this).height(h);
807			} else if ( jQuery(this).find('.swiper-slide').css('backgroundImage')!='none' ) {
808				h = Math.floor(width/16*9);
809				jQuery(this).height(h).find('.swiper-slide').height(h);
810			}
811		}
812	});
813	
814	// Resize slider pagination area
815	jQuery('.sc_slider_pagination_area').each(function() {
816		"use strict";
817		var h = jQuery(this).find('.sc_slider').height();
818		if (h) {
819			jQuery(this).height(h);
820			jQuery(this).find('.sc_slider_pagination').height(h);
821			jQuery(this).find('.sc_slider_pagination .sc_scroll_vertical').height(h);
822		}
823	});
824}
825
826
827// Skills init
828function booklovers_sc_init_skills(container) {
829	"use strict";
830	if (arguments.length==0) var container = jQuery('body');
831	var scrollPosition = jQuery(window).scrollTop() + jQuery(window).height();
832
833	container.find('.sc_skills_item:not(.inited)').each(function () {
834		"use strict";
835		var skillsItem = jQuery(this);
836		var scrollSkills = skillsItem.offset().top;
837		if (scrollPosition > scrollSkills) {
838			skillsItem.addClass('inited');
839			var skills = skillsItem.parents('.sc_skills').eq(0);
840			var type = skills.data('type');
841			var total = (type=='pie' && skills.hasClass('sc_skills_compact_on')) ? skillsItem.find('.sc_skills_data .pie') : skillsItem.find('.sc_skills_total').eq(0);
842			var start = parseInt(total.data('start'));
843			var stop = parseInt(total.data('stop'));
844			var maximum = parseInt(total.data('max'));
845			var startPercent = Math.round(start/maximum*100);
846			var stopPercent = Math.round(stop/maximum*100);
847			var ed = total.data('ed');
848			var duration = parseInt(total.data('duration'));
849			var speed = parseInt(total.data('speed'));
850			var step = parseInt(total.data('step'));
851			if (type == 'bar') {
852				var dir = skills.data('dir');
853				var count = skillsItem.find('.sc_skills_count').eq(0);
854				if (dir=='horizontal')
855					count.css('width', startPercent + '%').animate({ width: stopPercent + '%' }, duration);
856				else if (dir=='vertical')
857					count.css('height', startPercent + '%').animate({ height: stopPercent + '%' }, duration);
858				booklovers_sc_animate_skills_counter(start, stop, speed-(dir!='unknown' ? 5 : 0), step, ed, total);
859			} else if (type == 'counter') {
860				booklovers_sc_animate_skills_counter(start, stop, speed - 5, step, ed, total);
861			} else if (type == 'pie') {
862				var steps = parseInt(total.data('steps'));
863				var bg_color = total.data('bg_color');
864				var border_color = total.data('border_color');
865				var cutout = parseInt(total.data('cutout'));
866				var easing = total.data('easing');
867				var options = {
868					segmentShowStroke: false,
869					segmentStrokeColor: border_color,
870					segmentStrokeWidth: 1,
871					percentageInnerCutout : cutout,
872					animationSteps: steps,
873					animationEasing: easing,
874					animateRotate: true,
875					animateScale: false,
876				};
877				var pieData = [];
878				total.each(function() {
879					"use strict";
880					var color = jQuery(this).data('color');
881					var stop = parseInt(jQuery(this).data('stop'));
882					var stopPercent = Math.round(stop/maximum*100);
883					pieData.push({
884						value: stopPercent,
885						color: color
886					});
887				});
888				if (total.length == 1) {
889					booklovers_sc_animate_skills_counter(start, stop, Math.round(1500/steps), step, ed, total);
890					pieData.push({
891						value: 100-stopPercent,
892						color: bg_color
893					});
894				}
895				var canvas = skillsItem.find('canvas');
896				canvas.attr({width: skillsItem.width(), height: skillsItem.width()}).css({width: skillsItem.width(), height: skillsItem.height()});
897				new Chart(canvas.get(0).getContext("2d")).Doughnut(pieData, options);
898			}
899		}
900	});
901}
902
903// Skills counter animation
904function booklovers_sc_animate_skills_counter(start, stop, speed, step, ed, total) {
905	"use strict";
906	start = Math.min(stop, start + step);
907	total.text(start+ed);
908	if (start < stop) {
909		setTimeout(function () {
910			booklovers_sc_animate_skills_counter(start, stop, speed, step, ed, total);
911		}, speed);
912	}
913}
914
915// Skills arc init
916function booklovers_sc_init_skills_arc(container) {
917	"use strict";
918	if (arguments.length==0) var container = jQuery('body');
919	container.find('.sc_skills_arc:not(.inited)').each(function () {
920		var arc = jQuery(this);
921		arc.addClass('inited');
922		var items = arc.find('.sc_skills_data .arc');
923		var canvas = arc.find('.sc_skills_arc_canvas').eq(0);
924		var legend = arc.find('.sc_skills_legend').eq(0);
925		var w = Math.round(arc.width() - legend.width());
926		var c = Math.floor(w/2);
927		var o = {
928			random: function(l, u){
929				"use strict";
930				return Math.floor((Math.random()*(u-l+1))+l);
931			},
932			diagram: function(){
933				"use strict";
934				var r = Raphael(canvas.attr('id'), w, w),
935					hover = Math.round(w/2/items.length),
936					rad = hover,
937					step = Math.round(((w-20)/2-rad)/items.length),
938					stroke = Math.round(w/9/items.length),
939					speed = 400;
940				
941				
942				r.circle(c, c, Math.round(w/2)).attr({ stroke: 'none', fill: BOOKLOVERS_STORAGE['theme_skin_bg_color'] ? BOOKLOVERS_STORAGE['theme_skin_bg_color'] : '#ffffff' });
943				
944				var title = r.text(c, c, arc.data('caption')).attr({
945					font: Math.round(rad*0.75)+'px "'+BOOKLOVERS_STORAGE['theme_font']+'"',
946					fill: BOOKLOVERS_STORAGE['theme_skin_color'] ? BOOKLOVERS_STORAGE['theme_skin_color'] : '#909090'
947				}).toFront();
948				
949				rad -= Math.round(step/2);
950
951				r.customAttributes.arc = function(value, color, rad){
952					"use strict";
953					var v = 3.6 * value,
954						alpha = v == 360 ? 359.99 : v,
955						rand = o.random(91, 240),
956						a = (rand-alpha) * Math.PI/180,
957						b = rand * Math.PI/180,
958						sx = c + rad * Math.cos(b),
959						sy = c - rad * Math.sin(b),
960						x = c + rad * Math.cos(a),
961						y = c - rad * Math.sin(a),
962						path = [['M', sx, sy], ['A', rad, rad, 0, +(alpha > 180), 1, x, y]];
963					return { path: path, stroke: color }
964				}
965				
966				items.each(function(i){
967					"use strict";
968					var t = jQuery(this), 
969						color = t.find('.color').val(),
970						value = t.find('.percent').val(),
971						text = t.find('.text').text();
972					
973					rad += step;
974					var z = r.path().attr({ arc: [value, color, rad], 'stroke-width': stroke });
975					
976					z.mouseover(function(){
977						"use strict";
978						this.animate({ 'stroke-width': hover, opacity: .75 }, 1000, 'elastic');
979						if (Raphael.type != 'VML') //solves IE problem
980							this.toFront();
981						title.stop().animate({ opacity: 0 }, speed, '>', function(){
982							this.attr({ text: (text ? text + '\n' : '') + value + '%' }).animate({ opacity: 1 }, speed, '<');
983						});
984					}).mouseout(function(){
985						"use strict";
986						this.stop().animate({ 'stroke-width': stroke, opacity: 1 }, speed*4, 'elastic');
987						title.stop().animate({ opacity: 0 }, speed, '>', function(){
988							title.attr({ text: arc.data('caption') }).animate({ opacity: 1 }, speed, '<');
989						});	
990					});
991					
992				});
993				
994			}
995		}
996		o.diagram();
997	});
998}
999
1000
1001// Countdown update
1002function booklovers_countdown(dt) {
1003	"use strict";
1004	var counter = jQuery(this).parent();
1005	for (var i=3; i<dt.length; i++) {
1006		var v = (dt[i]<10 ? '0' : '') + dt[i];
1007		counter.find('.sc_countdown_item').eq(i-3).find('.sc_countdown_digits span').addClass('hide');
1008		for (var ch=v.length-1; ch>=0; ch--) {
1009			counter.find('.sc_countdown_item').eq(i-3).find('.sc_countdown_digits span').eq(ch+(i==3 && v.length<3 ? 1 : 0)).removeClass('hide').text(v.substr(ch, 1));
1010		}
1011	}
1012}
1013
1014
1015// Contact form handlers
1016function booklovers_sc_form_validate(form){
1017	"use strict";
1018	var url = form.attr('action');
1019	if (url == '') return false;
1020	form.find('input').removeClass('error_fields_class');
1021	var error = false;
1022	var form_custom = form.data('formtype')=='form_custom';
1023	if (!form_custom) {
1024		error = booklovers_form_validate(form, {
1025			error_message_show: true,
1026			error_message_time: 4000,
1027			error_message_class: "sc_infobox sc_infobox_style_error",
1028			error_fields_class: "error_fields_class",
1029			exit_after_first_error: false,
1030			rules: [
1031				{
1032					field: "username",
1033					min_length: { value: 1,	 message: BOOKLOVERS_STORAGE['strings']['name_empty'] },
1034					max_length: { value: 60, message: BOOKLOVERS_STORAGE['strings']['name_long'] }
1035				},
1036				{
1037					field: "email",
1038					min_length: { value: 7,	 message: BOOKLOVERS_STORAGE['strings']['email_empty'] },
1039					max_length: { value: 60, message: BOOKLOVERS_STORAGE['strings']['email_long'] },
1040					mask: { value: BOOKLOVERS_STORAGE['email_mask'], message: BOOKLOVERS_STORAGE['strings']['email_not_valid'] }
1041				},
1042				{
1043					field: "subject",
1044					min_length: { value: 1,	 message: BOOKLOVERS_STORAGE['strings']['subject_empty'] },
1045					max_length: { value: 100, message: BOOKLOVERS_STORAGE['strings']['subject_long'] }
1046				},
1047				{
1048					field: "message",
1049					min_length: { value: 1,  message: BOOKLOVERS_STORAGE['strings']['text_empty'] },
1050					max_length: { value: BOOKLOVERS_STORAGE['contacts_maxlength'], message: BOOKLOVERS_STORAGE['strings']['text_long'] }
1051				}
1052			]
1053		});
1054	}
1055	if (!error && url!='#') {
1056		jQuery.post(url, {
1057			action: "send_form",
1058			nonce: BOOKLOVERS_STORAGE['ajax_nonce'],
1059			type: form.data('formtype'),
1060			data: form.serialize()
1061		}).done(function(response) {
1062			"use strict";
1063			var rez = {};
1064			try {
1065				rez = JSON.parse(response);
1066			} catch (e) {
1067				rez = { error: BOOKLOVERS_STORAGE['ajax_error'] };
1068				console.log(response);
1069			}
1070			var result = form.find(".result").toggleClass("sc_infobox_style_error", false).toggleClass("sc_infobox_style_success", false);
1071			if (rez.error === '') {
1072				form.get(0).reset();
1073				result.addClass("sc_infobox_style_success").html(BOOKLOVERS_STORAGE['strings']['send_complete']);
1074				var return_url = form.find('input[name="return_url"]');
1075				if (return_url.length > 0 && return_url.val()!='') {
1076					setTimeout(function() {
1077						"use strict";
1078						window.location.href = return_url.val();
1079					}, 3300);
1080				}
1081			} else {
1082				result.addClass("sc_infobox_style_error").html(BOOKLOVERS_STORAGE['strings']['send_error'] + ' ' + rez.error);
1083			}
1084			result.fadeIn().delay(3000).fadeOut();
1085		});
1086	}
1087	return !error;
1088}

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.