PageSourceSearch

https://ericspharmacy.com/static/dentario/js/custom/shortcodes.js

js ericspharmacy.com collected 2026-09-30 19:24:10 UTC 34,164 bytes, 995 lines download raw bytes

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

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.