PageSourceSearch

https://civilweek-vivere.it/wp-content/plugins/eventON/assets/js/eventon_functions.js?ver=4.6.3

js civilweek-vivere.it collected 2026-10-06 20:16:53 UTC 41,488 bytes, 1,431 lines download raw bytes

1/*
2 * Javascript: EventON functions for all calendars
3 * @version: 4.6.1
4 */
5(function($){
6
7	// Calendar function s
8		$.fn.evo_cal_functions = function(O){
9			el = this;
10			switch(O.action){
11				// load shortcodes inside calendar data
12				case 'load_shortcodes':
13					return el.find('.evo_cal_data').data('sc');		
14				break;
15				case 'update_json':
16					//console.log(O.json);
17					el.find('.evo_cal_events').data('events', O.json);		
18				break;
19				case 'update_shortcodes':
20					//console.log(O.SC);
21					el.find('.evo_cal_data').data( 'sc', O.SC );
22				break;
23			}
24		};
25
26	// access page GLOBALS
27		$.fn.evo_get_global = function(opt){
28			var defaults = { S1:'', S2:''};
29			var OPT = $.extend({}, defaults, opt);
30
31			var BUS = $('#evo_global_data').data('d');
32
33			if(!(OPT.S1 in BUS)) return false;
34			if(!(OPT.S2 in BUS[OPT.S1])) return false;
35			return BUS[OPT.S1][OPT.S2];
36		}
37		$.fn.evo_get_txt = function(opt){
38			var defaults = { V:''}
39			var OPT = $.extend({}, defaults, opt);
40
41			var BUS = $('#evo_global_data').data('d');
42			//console.log(BUS);
43			if(!('txt' in BUS)) return false;
44			if(!(OPT.V in BUS.txt)) return false;
45			return BUS.txt[OPT.V];
46		}
47		$.fn.evo_get_cal_def = function(opt){
48			var defaults = { V:''}
49			var OPT = $.extend({}, defaults, opt);
50
51			var BUS = $('#evo_global_data').data('d');
52			if(!('cal_def' in BUS)) return false;
53			if(!(OPT.V in BUS.cal_def)) return false;
54			return BUS.cal_def[OPT.V];
55		}
56
57		// return dms translates values from global data
58		// added 4.0
59		$.fn.evo_get_dms_vals = function(opt){
60			// type = d, d1,d3, m, m3
61			// V = 0-x
62			var defaults = { type:'d', V:''}
63			var OPT = $.extend({}, defaults, opt);
64
65			var BUS = $('#evo_global_data').data('d');			
66			if(!('dms' in BUS)) return false;
67			if(!(OPT.type in BUS.dms)) return false;
68
69			return BUS.dms[ OPT.type ][ OPT.V ];
70			
71		}
72
73	// GENERAL AJAX ACCESS + 4.1.2
74		$.fn.evo_admin_get_ajax = function(opt){
75  			var defs = {
76  				'lightbox_key':'', // same as lightbox class
77  				'lightbox_loader': true,
78  				'load_new_content': true,
79  				'load_new_content_id': '', // @since 4.3.5
80  				'hide_lightbox':false,	// @since 4.3.5
81  				'hide_message':2000,	// @since 4.3.5
82  				'ajaxdata':{
83  					'load_lbcontent':'',
84  					'load_new_content':''
85  				},
86  				'uid':'',
87  				'end':'admin', // admin or client
88  				'loader_el':'',
89  				'ajax_type':'ajax',
90  				'ajax_action':'',
91  			}
92
93  			var el = $(this);
94  			var OO = $.extend({}, defs, opt);
95  			
96  			var ajaxdata = OO.ajaxdata;
97
98  			// passing nonce
99  			ajaxdata['nn'] = ( OO.end == 'client' ) ? evo_general_params.n : evo_admin_ajax_handle.postnonce; 
100
101  			// uid use ajax_action as backup
102  				if( OO.uid == '' && OO.ajax_action != '') OO.uid = OO.ajax_action;
103
104  			LB = false;
105  			if( OO.lightbox_key != '') LB = $('body').find('.evo_lightbox.'+ OO.lightbox_key);
106
107
108  			var returnvals = '';
109
110  			// process action value
111  			if( 'a' in ajaxdata ) ajaxdata['action'] = ajaxdata.a;
112
113  			// add uid into ajax data
114  			ajaxdata['uid'] = OO.uid;
115
116  			// ajax url processing 
117  				var ajax_url = el.evo_get_ajax_url({a: OO.ajax_action, e: OO.end, type: OO.ajax_type});
118
119  			//console.log(ajaxdata);
120  			//console.log(ajax_url);
121			$.ajax({
122				beforeSend: function(){
123					$('body').trigger('evo_ajax_beforesend_' + OO.uid ,[ OO, el ]);
124					if( LB && OO.lightbox_loader){
125						LB.find('.ajde_popup_text').addClass( 'evoloading loading');
126						LB.find('.evolb_content').addClass( 'evoloading loading');
127					}
128					if( OO.loader_el){
129						$( OO.loader_el ).addClass('evoloading loading');
130					}
131				},
132				type: 'POST',
133				url: ajax_url,
134				data: ajaxdata,
135				dataType:'json',
136				success:function(data){	
137					//return;			
138					//console.log(OO);
139					if( LB ){
140						// show message
141							if( 'msg' in data && data.msg != '' && LB){
142								LB.evo_lightbox_show_msg({'type': data.status, 
143									'message':data.msg, 
144									hide_lightbox: OO.hide_lightbox,	
145									hide_message: OO.hide_message
146								});
147							}							
148
149						// populate content
150						if( OO.ajaxdata.load_lbcontent || OO.ajaxdata.load_new_content || OO.load_new_content ){
151							// populate a specific dom element with content
152							if( OO.load_new_content_id != '' ){
153								$('body').find('#'+OO.load_new_content_id ).replaceWith( data.content );
154							}else{
155								LB.evo_lightbox_populate_content({content: data.content});
156							}							
157						}					
158					}else{
159						// populate content
160						if( OO.ajaxdata.load_lbcontent || OO.ajaxdata.load_new_content || OO.load_new_content ){
161							// populate a specific dom element inside with content 
162							if( OO.load_new_content_id != '' ){
163								$('body').find('#'+OO.load_new_content_id ).html( data.content );
164							}							
165						}
166					}
167
168					// for SP content @since 4.5.2
169						if( 'sp_content' in data){
170							$("body").find('#evops_content').html( data.sp_content);
171						}
172					// SP footer content @since 4.5.2
173						if( 'sp_content_foot' in data){
174							$("body").find('.evosp_foot').html( data.sp_content_foot);
175						}
176					// process trumbowyg editors
177						$('body').trigger('evo_elm_load_interactivity');
178
179					//console.log(OO);
180					$('body').trigger('evo_ajax_success_' + OO.uid,[ OO, data , el]);	
181
182				},complete:function(){
183					$('body').trigger('evo_ajax_complete_' + OO.uid ,[ OO , el ]);
184					if( LB && OO.lightbox_loader){
185						LB.find('.ajde_popup_text').removeClass( 'evoloading loading');
186						LB.find('.evolb_content').removeClass( 'evoloading loading');
187					}
188					if( OO.loader_el){
189						$( OO.loader_el ).removeClass('evoloading loading');
190					}
191				}
192			});	
193		}
194
195		// submit forms via ligtbox
196		// @since 4.2.2		@updated 4.3.5
197		$.fn.evo_ajax_lightbox_form_submit = function(opt){
198			var defs = {
199  				'lightbox_key':'', // lightbox class
200  				'lightbox_loader': true, // show lightbox loading animations
201  				'uid':'',
202  				'end':'admin', // admin or client
203  				'hide_lightbox':false,
204  				'hide_message':false,
205  				'load_new_content':false,
206  				'load_new_content_id':'',
207  				'ajax_type':'ajax',
208  				'ajax_action':'',
209  			}
210
211  			var OO = $.extend({}, defs, opt);
212  			const el = this;
213
214  			const form = this.closest('form');
215  			var LB = false;
216  			if( OO.lightbox_key != '') LB = $('body').find('.evo_lightbox.'+ OO.lightbox_key);
217
218  			if( LB) LB.evo_lightbox_hide_msg();
219
220  			//console.log(OO);
221
222  			var ajax_url = el.evo_get_ajax_url({a: OO.ajax_action, e: OO.end, type: OO.ajax_type});
223
224			form.ajaxSubmit({
225				beforeSubmit: function(opt, xhr){
226					$('body').trigger('evo_ajax_beforesend_' + OO.uid ,[ OO , xhr, opt]); // 4.4.2
227					if( LB && OO.lightbox_loader) LB.evo_lightbox_start_inloading();
228				},
229				dataType: 	'json',	
230				url: ajax_url,	type: 	'POST',
231				success:function(data){
232
233					$('body').trigger('evo_ajax_success_' + OO.uid,[ OO, data, el ]);	
234
235					if( data.status == 'good'){
236						if(LB && 'msg' in data){
237							LB.evo_lightbox_show_msg({'type': 'good', 
238								'message':data.msg, 
239								hide_lightbox: OO.hide_lightbox,
240								hide_message: OO.hide_message
241							});
242						}
243
244						// populate specific element
245						if( OO.load_new_content && OO.load_new_content_id != ''){
246							$('body').find('#'+OO.load_new_content_id ).replaceWith( data.content );
247						}else{
248							// populate current lightbox
249							if( OO.load_new_content ) LB.evo_lightbox_populate_content({content: data.content});
250						}
251						
252						
253						// if ajax data pass dom content to be replaced with run through each and replace - @4.2.3
254						if( 'refresh_dom_content' in data ){
255							$.each(data.refresh_dom_content, function(domid, content){
256								$('body').find('#'+ domid).replaceWith( content);
257							});
258						}
259
260					}else{
261						LB.evo_lightbox_show_msg({'type': 'bad', 'message':data.msg});
262					}
263				},
264				complete:function(){	
265					$('body').trigger('evo_ajax_complete_' + OO.uid ,[ OO ]);
266					$('body').trigger('evo_ajax_form_complete_' + OO.uid ,[ OO , form]);
267					if( LB && OO.lightbox_loader) LB.evo_lightbox_stop_inloading();	
268				}
269			});
270		}
271
272	// LIGHTBOX version 4.2
273		// @version 4.2
274		$('body').on('click','.evolb_trigger', function(event){
275			if( event !== undefined ){
276				event.preventDefault();
277				event.stopPropagation();
278			}
279			
280			$(this).evo_lightbox_open($(this).data('lbvals'));
281		});
282		$('body').on('click','.evolb_close_btn', function (){
283			const LB = $(this).closest('.evo_lightbox');
284			LB.evo_lightbox_close();
285		});
286
287		// @since 4.2.2
288		$('body').on('click','.evolb_trigger_save, .evo_submit_form', function(event){
289			if( event !== undefined ){
290				event.preventDefault();
291				event.stopPropagation();
292			}
293			$(this).evo_ajax_lightbox_form_submit( $(this).data('d') );
294		});
295
296		$('body').on('click','.evo_trigger_ajax_run', function(event){
297			if( event !== undefined ){
298				event.preventDefault();
299				event.stopPropagation();
300			}
301			$(this).evo_admin_get_ajax( $(this).data('d') );
302		});
303		// @since 4.3.3
304		$('body').on('evo_lightbox_trigger', function(event, data){
305			$('body').evo_lightbox_open(data);
306		});
307
308		$.fn.evo_lightbox_open = function (opt){
309			var defaults = { 
310				'uid':'',
311				't':'', //title
312				'lbc':'',// * lightbox class - REQUIRED
313				'lbac':'',// ligthbox additional class 4.6
314				'lbsz':'',// lightbox size = mid small
315				'content':'',// passed on dynamic content
316				'content_id' :'',// id to get dynamic content from page
317				'ajax':'no',// use ajax to load content yes no
318				'ajax_url':'',
319				'd':'', // data object for ajax
320				'end':'admin',// admin or client end
321				'other_data':'',
322				'lightbox_loader': false,
323				'preload_temp_key': 'init', // 4.6
324				'load_new_content': true, // @since 4.3.5
325				'lb_padding': 'evopad30', // @4.3.5
326				'ajax_action':'', // @4.4 pass on ajax endpoint action key
327				'ajax_type':'ajax', // @4.4 ajax type, ajax, rest or endpoint
328			};
329
330			var OO = $.extend({}, defaults, opt);
331
332			const fl_footer = OO.end == 'client' ? '<div class="evolb_footer"></div>' :'';
333
334			// create lightbox HTML
335			var html = '<div class="evo_lightbox '+OO.lbc+' '+OO.end+' '+OO.lbac+'" data-lbc="'+OO.lbc+'"><div class="evolb_content_in"><div class="evolb_content_inin"><div class="evolb_box '+OO.lbc+' '+OO.lbsz +'"><div class="evolb_header"><a class="evolb_backbtn" style="display:none"><i class="fa fa-angle-left"></i></a><p class="evolb_title">' + OO.t + '</p><span class="evolb_close_btn evolbclose "><i class="fa fa-xmark"><i></span></div><div class="evolb_content '+ OO.lb_padding +'"></div><p class="message"></p>'+fl_footer+'</div></div></div></div>';
336
337			$('#evo_lightboxes').append( html );			
338
339			//console.log(OO);
340			
341			LIGHTBOX = $('.evo_lightbox.'+ OO.lbc);
342
343			// Open lightbox on page
344				setTimeout( function(){ 
345					$('#evo_lightboxes').show();
346					LIGHTBOX.addClass('show');	
347					$('body').addClass('evo_overflow');
348					$('html').addClass('evo_overflow');
349				},300);
350
351			// show loading animation
352			LIGHTBOX.evo_lightbox_show_open_animation(OO);
353
354			//return;
355				
356			// Load content
357			// dynamic content within the site
358				if(OO.content_id != ''){					
359					var content = $('#'+ OO.content_id ).html();					
360					LIGHTBOX.find('.evolb_content').html( content);
361				}
362			// load passed on content
363				if(OO.content != ''){
364					LIGHTBOX.find('.evolb_content').html( OO.content);
365				}
366
367			// run ajax to load content for the lightbox inside
368				if( OO.ajax == 'yes' && OO.d != ''){
369
370					var D = {};
371					D = OO.d;
372
373					LB.evo_admin_get_ajax({
374						ajaxdata: D, 
375						ajax_action: OO.ajax_action,
376						ajax_type: OO.ajax_type,
377						lightbox_key: OO.lbc,
378						uid: ( OO.uid != '' ) ? OO.uid : OO.d.uid,
379						end: OO.end,
380						lightbox_loader: OO.lightbox_loader,
381						load_new_content: OO.load_new_content,
382					});
383				}
384
385			// load content from a AJAX file			
386				if( OO.ajax_url != ''){
387					$.ajax({
388						beforeSend: function(){},
389						url:	OO.ajax_url,
390						success:function(data){
391							LIGHTBOX.find('.evolb_content').html( data);							
392						},complete:function(){}
393					});
394				}
395			
396			$('body').trigger('evo_lightbox_processed', [ OO, LIGHTBOX]);
397		}
398
399		$.fn.evo_lightbox_close = function (opt){
400			LB = this;
401			var defaults = { 
402				'delay':500, 
403				'remove_from_dom':true,
404			};
405
406			if( !(LB.hasClass('show')) ) return;
407
408			var OO = $.extend({}, defaults, opt);
409
410			var hide_delay = parseInt( OO.delay);
411
412			complete_close = (LB.parent().find('.evo_lightbox.show').length == 1)? true: false;
413
414			if( hide_delay > 500){
415				setTimeout( function(){ 
416					LB.removeClass('show');
417				}, ( hide_delay - 500  ) );
418			}else{
419				LB.removeClass('show');
420			}
421			
422			setTimeout( function(){ 
423				if(complete_close){
424					$('body').removeClass('evo_overflow');
425					$('html').removeClass('evo_overflow');
426				}
427				// remove lightbox HTML from DOM
428				if( OO.remove_from_dom) LB.remove();
429			}, hide_delay);	
430		}
431
432
433		// Other LB functions
434			$.fn.evo_lightbox_populate_content = function(opt){
435				LB = this;
436				var defaults = { 
437					'content':'',
438				}; var OO = $.extend({}, defaults, opt);
439				LB.find('.evolb_content').html( OO.content );
440			}
441			$.fn.evo_lightbox_start_inloading = function(opt){
442				LB = this;
443				LB.find('.evolb_content').addClass('loading');
444			}
445			$.fn.evo_lightbox_stop_inloading = function(opt){
446				LB = this;
447				LB.find('.evolb_content').removeClass('loading');
448			}
449			$.fn.evo_lightbox_show_msg = function(opt){
450				LB = this;
451				var defaults = { 
452					'type':'good',
453					'message':'',
454					'hide_message': false,// hide message after some time pass time or false
455					'hide_lightbox': false, // hide lightbox after some time of false
456				}; var OO = $.extend({}, defaults, opt);
457				LB.find('.message').removeClass('bad good').addClass( OO.type ).html( OO.message ).fadeIn();
458
459				if( OO.hide_message ) setTimeout(function(){  LB.evo_lightbox_hide_msg() }, OO.hide_message );
460
461				if( OO.hide_lightbox ) LB.evo_lightbox_close({ delay: OO.hide_lightbox });
462			}
463			$.fn.evo_lightbox_hide_msg = function(opt){
464				LB = this;
465				LB.find('p.message').hide();
466			}
467
468
469			// add preload animations to lightbox u4.6
470			$.fn.evo_lightbox_show_open_animation = function(opt){
471				LB = this;
472				var defaults = { 
473					'animation_type':'initial', // animation type initial or saving
474					'preload_temp_key': 'init', // 4.6 passed on preload template key
475					'end':'admin',
476				};
477				var OO = $.extend({}, defaults, opt);
478
479				if( OO.animation_type == 'initial'){
480
481					passed_data = OO.end == 'admin' ? evo_admin_ajax_handle: evo_general_params;
482
483					html = passed_data.html.preload_general;
484					if( OO.preload_temp_key != 'init') html = passed_data.html[ OO.preload_temp_key ];
485					LB.find('.evolb_content').html( html );
486				}
487
488				if( OO.animation_type == 'saving')
489					LB.find('.evolb_content').addClass('loading');
490			}
491
492		// eventcard Lightbox function v4.6
493			$.fn.evo_cal_lightbox_trigger = function( SC_data , obj, CAL ){
494				const cancel_class = ( obj.hasClass('cancel_event')) ? ' cancel_event':'';
495
496				var other_data = {
497					extra_classes: 'evo_lightbox_body eventon_list_event evo_pop_body evcal_eventcard event_'+SC_data.event_id +'_'+ SC_data.repeat_interval + cancel_class,
498					CAL:CAL,
499					obj: obj,
500					et_data: obj.find('.evoet_data').data(),// @4.5.5
501					SC: SC_data
502				};
503				
504				// generate a random ID for this 
505					maximum = 99;
506					minimum = 10;
507					var randomnumber = Math.floor(Math.random() * (maximum - minimum + 1)) + minimum;
508
509				// lightbox additional class
510					lbac = '';
511					if( evo_general_params.cal.lbs == 'sc1') lbac = 'within';
512					if( evo_general_params.cal.lbs == 'sc2') lbac = 'within ecSCR';
513
514				// AJAX via lightbox
515				if(SC_data.ux_val == '3a'){
516
517					var new_content = '';
518					new_content += '<div class="evo_cardlb" style="padding:10px 10px 0 10px">';
519					new_content += '<div style="margin-bottom:20px; width:100%; height:200px" class="evo_preloading"></div>';
520					const box = '<div style="display:flex;justify-content: space-between;margin-bottom:10px"><div style="width:40px;height:40px; margin-right:20px" class="evo_preloading"></div> <div style="flex:1 0 auto"> <div class="evo_preloading" style="width:70%; height:20px; margin-bottom:10px"></div><div class="evo_preloading" style="width:100%; height:80px; margin-bottom:10px"></div>  </div> </div>';
521					new_content += box + box + box;
522					new_content += '</div>';
523
524					
525					var data_arg = {};
526					data_arg['event_id'] = SC_data.event_id;
527					data_arg['ri'] = SC_data.repeat_interval;
528					data_arg['SC'] = SC_data;
529					data_arg['load_lbcontent'] = true;
530					data_arg['action'] = 'eventon_load_single_eventcard_content';
531					data_arg['uid'] = 'load_single_eventcard_content_3a';
532					if( CAL ) data_arg['calid'] = CAL.attr('id');
533
534					
535					//reset view to match
536						if( data_arg.SC.tile_style == '2') data_arg.SC.eventtop_style = '0';
537						data_arg.SC.tile_style = '0';
538						data_arg.SC.tile_bg = '0';
539						data_arg.SC.tiles = 'no';
540						
541					$('body').evo_lightbox_open({
542						uid:'evo_open_eventcard_lightbox',
543						//uid:'load_single_eventcard_content_3a',
544						lbc:'evo_eventcard_'+ randomnumber,lbac: lbac,
545						end:'client',
546						content: new_content,
547						ajax:'yes',
548						ajax_type: 'endpoint',
549						ajax_action: 'eventon_load_single_eventcard_content',
550						d: 	data_arg,
551						other_data: other_data
552					});
553					
554				// open lightbox using page event content
555				}else{
556
557					var content = obj.closest('.eventon_list_event').find('.event_description').html();
558					var _content = $(content).not('.evcal_close');
559
560					clrW = obj.closest('.eventon_list_event').hasClass('clrW') ? 'clrW':'clrB';//4.6.2
561									
562					CAL.evo_lightbox_open({
563						uid:'evo_open_eventcard_lightbox',
564						lbc:'evo_eventcard_'+ randomnumber,lbac: lbac,
565						end:'client',
566						content: '<div class="evopop_top '+clrW+'">'+ obj.html() +'</div><div class="evopop_body">' + content +'</div>',
567						other_data: other_data
568					});
569
570					return;
571				}	
572			}
573
574			// listerners for lightbox on eventcard
575			$.fn.evo_cal_lb_listeners = function(){
576				// Listerners
577				// process various lightbox types
578				$('body')
579				.on('evo_lightbox_processed', function(event, OO, LIGHTBOX){
580					if( OO.uid != 'evo_open_eventcard_lightbox') return false;
581
582					var CAL = OO.other_data.CAL;
583
584					LIGHTBOX.addClass('eventcard eventon_events_list');
585					LIGHTBOX_content = LIGHTBOX.find('.evolb_content');
586					LIGHTBOX_content.attr('class', 'evolb_content '+ OO.other_data.extra_classes );
587					
588					var SC = OO.other_data.SC;
589					var obj = OO.other_data.obj;
590
591					//console.log(SC);
592
593					// update border color and eventtop color
594						const evoet_data = OO.other_data.et_data;
595						
596						bgcolor = bggrad ='';
597						if( evoet_data ){
598							bgcolor = evoet_data.bgc;
599							bggrad = evoet_data.bggrad;
600						}
601						
602
603						// if tiles and eventtop style set to clean
604						var show_lightbox_color = ( SC.eventtop_style == '0' || SC.eventtop_style == '4') ? false: true;
605						
606						if( (CAL && CAL.hasClass('color') && show_lightbox_color) ||
607							(!CAL && show_lightbox_color)
608
609						){
610							LIGHTBOX_content.addClass('color');
611							LIGHTBOX_content.find('.evopop_top').css({
612								'background-color':bgcolor,
613								'background-image': bggrad,
614							});
615						}else{
616							LIGHTBOX_content.find('.evopop_top').css({'border-left':'3px solid '+bgcolor});
617						}
618
619					// trigger 
620					if( obj.data('runjs')){
621						$('body').trigger('evo_load_single_event_content',[ SC.event_id, OO.other_data.obj]);
622					}
623									
624					
625					// RTL
626					if( SC.evortl =='yes')	LIGHTBOX.addClass('evortl');
627
628					$('body').trigger('evolightbox_end', [ LIGHTBOX , CAL, OO]);	// @s4.6
629
630				})
631
632				// after eventcard content is loaded to lightbox via 3a - @since 4.2.3
633					.on('evo_ajax_success_evo_open_eventcard_lightbox', function (event, OO, data){
634						
635						if( OO.ajaxdata.uid != "load_single_eventcard_content_3a") return false;
636						
637						LIGHTBOX = $('.evo_lightbox.'+ OO.lightbox_key);
638						LIGHTBOX_content = LIGHTBOX.find('.evolb_content');
639
640						CAL = $('body').find('#'+ OO.ajaxdata.calid);
641						
642						$('body').trigger('evolightbox_end', [ LIGHTBOX , CAL, OO]);	// @s4.6	
643					})
644				;			
645			}
646
647	// Get Ajax url @since 4.4 @u 4.5.5
648		$.fn.evo_get_ajax_url = function(opt){
649			var defaults = { 
650				a:'', // action key
651				e:'client', // end
652				type: 'ajax'};
653			var OO = $.extend({}, defaults, opt);
654
655			// end point url
656			if( OO.type == 'endpoint'){
657				var evo_ajax_url = ( OO.e == 'client' )? 
658					evo_general_params.evo_ajax_url : evo_admin_ajax_handle.evo_ajax_url;
659				return  evo_ajax_url.toString().replace( '%%endpoint%%', OO.a );
660			// rest api url
661			}else if( OO.type == 'rest' ){
662				var evo_ajax_url = ( OO.e == 'client' )? 
663					evo_general_params.rest_url : evo_admin_ajax_handle.rest_url;
664					//console.log(evo_ajax_url);
665					//console.log(OO);
666				return  evo_ajax_url.toString().replace( '%%endpoint%%', OO.a );
667			}else{
668				action_add = OO.a != '' ? '?action='+ OO.a: '';
669				return ( OO.e == 'client' ) ? 
670					evo_general_params.ajaxurl + action_add : evo_admin_ajax_handle.ajaxurl + action_add;
671			}	
672		}
673	
674	// Count down	// @+ 4.5
675		$.fn.evo_countdown_get = function(opt){
676			var defaults = { gap:'', endutc: ''};
677			var OPT = $.extend({}, defaults, opt);
678			var gap = OPT.gap;
679
680			// if gap not provided use endutc
681			if( gap == '' ){				
682				var Mnow = moment().utc();
683				var M = moment();
684				M.set('millisecond', OPT.endutc );
685
686				gap = OPT.endutc - Mnow.unix();
687			}
688			
689			// if negative gap
690			if( gap < 0){
691				return {
692					'd': 0,
693					'h':0,
694					'm':0,
695					's':0
696				}; 
697			}
698		
699			distance = ( gap * 1000);
700
701			var days = Math.floor(distance / (1000 * 60 * 60 * 24));
702			var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
703			var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
704			var seconds = Math.floor((distance % (1000 * 60)) / 1000);
705
706			minutes = minutes<10? '0'+minutes : minutes;
707			seconds = seconds<10? '0'+seconds : seconds;
708
709			return {
710				'd': days,
711				'h':hours,
712				'm':minutes,
713				's':seconds
714			}; 
715		};
716		// @u 4.5.2
717		$.fn.evo_countdown = function(opt){
718			var defaults = { S1:''};
719			var OPT = $.extend({}, defaults, opt);
720			var el = $(this);
721
722			const day_text = ( el.data('d') !== undefined && el.data('d') != '' )? el.data('d'):'Day';
723			const days_text = ( el.data('ds') !== undefined && el.data('ds') != '' )? el.data('ds'):'Days';
724
725			// intial run
726			//var gap = parseInt(el.data('gap'));
727			var duration = el.data('dur');
728			var endutc = parseInt(el.data('endutc'));
729			var text = el.data('t');
730			
731			if(text === undefined) text = '';
732
733			if( el.hasClass('evo_cd_on')) return;
734
735			// get gap using end time utc
736				var Mnow = moment().utc();
737				var M = moment();
738				M.set('millisecond', OPT.endutc );
739
740				//console.log(Mnow.unix());
741				//console.log(endutc);
742
743				gap = endutc - Mnow.unix();
744
745
746			// on initial run - event hasnt happened yet
747			if( gap > 0 ){
748
749				// initial
750				dd = el.evo_countdown_get({ 'gap': gap });
751				
752				el.html( ( dd.d>0 ? dd.d + ' ' + ( dd.d >1 ? days_text: day_text ) + " "  :'') + dd.h + ":" + dd.m +':'+ dd.s +'  '+text );
753				
754				el.data('gap', ( gap - 1)  );	// save new gap value
755				el.addClass('evo_cd_on');
756				
757				// set intervals
758				var CD = setInterval(function(){
759					
760					gap = el.data('gap'); // get gap for this cycle
761					duration = el.data('dur');	
762
763					const bar_elm = el.closest('.evo_event_progress').find('.evo_ep_bar');	
764
765					// when timer is ticking
766					if( gap > 0 ){
767
768						// increase bar width if exists
769						if( duration !== undefined && bar_elm.length){
770							perc = ( (duration - gap)/ duration ) * 100;
771							bar_elm.find('b').css('width',perc+'%');							
772						}
773						
774						dd = el.evo_countdown_get({ 'gap': gap });	
775
776						el.html( ( dd.d>0 ? dd.d + ' '  + ( dd.d >1 ? days_text: day_text ) + " ":'') + dd.h + ":" + dd.m +':'+ dd.s +' '+text );
777						el.data('gap', ( gap - 1)  );
778
779					// when timer expired
780					}else{
781
782						const expire_timer_action = el.data('exp_act');
783
784						// perform ajax task after expiration
785						if(expire_timer_action !== undefined){
786							$('body').trigger('runajax_refresh_now_cal',[ 
787								el , 
788								el.data('n'),
789							]);
790						}
791
792						const _complete_text = el.evo_get_txt({V:'event_completed'});
793
794						// live now text
795						if(bar_elm.length){
796							bar_elm.addClass('evo_completed');
797							//el.siblings('.evo_ep_pre').html( _complete_text );
798						}
799
800
801						// event tag & live elements
802						if( el.closest('.evcal_desc').length){
803							el.closest('.evcal_desc').find('.eventover').html( _complete_text);
804							el.closest('.evcal_desc').find('.evo_live_now').remove();
805						}
806
807						// event card
808						if( el.closest('.eventon_list_event').length){
809							el.closest('.eventon_list_event').find('span.evo_live_now').hide();
810						}
811
812						el.html('');
813						clearInterval(CD);
814					}
815
816				},1000);
817			// event has already passed
818			}else{
819				// if gap is less
820				el.closest('.evo_event_progress').find('.evo_ep_bar').hide();
821				clearInterval(CD);
822			}
823		};	
824
825	// Handlebar process template data into html
826		$.fn.evo_HB_process_template = function(opt){
827			var defaults = { TD:'', part:''}
828			var OPT = $.extend({}, defaults, opt);
829
830			BUS = $('#evo_global_data').data('d');
831						
832			template = Handlebars.compile( BUS.temp[ OPT.part ] );
833			return template( OPT.TD );
834		}
835
836	// Date range and events @4.5.7
837		// Date range and events - from webpage
838		$.fn.evo_cal_events_in_range = function(opt){
839			var defaults = { S:'', E:'', 
840				hide: true, 
841				closeEC:true,
842				showEV: false, // show events
843				showEVL: false, // show events list
844				showAllEvs: false // show all events regardless of the range
845			};
846			var OPT = $.extend({}, defaults, opt);
847			var CAL = $(this);
848
849			eJSON = CAL.find('.evo_cal_events').data('events');
850
851			R = {};
852			html = '';
853			json = {};
854
855			show = 0;
856
857			// using events JSON data
858			if( eJSON && eJSON.length > 0){
859				$.each(eJSON, function(ind, ED){
860					eO = CAL.find('#event_'+ ED._ID);
861					if(eO === undefined || eO.length==0) return;
862
863					if(OPT.hide)	eO.hide(); // pre hide
864					this_show = false;
865
866					// month long or year long events
867					if( ED.month_long || ED.year_long ){
868						this_show = true;
869
870					}else{
871						if(CAL.evo_is_in_range({
872							'S': OPT.S,	'E': OPT.E,	'start': ED.unix_start ,	'end':ED.unix_end 
873						})){						
874							this_show = true;
875						} 
876					}
877
878					if( OPT.showAllEvs) this_show = true;
879					
880					if( this_show){	
881						// show event
882						if( OPT.showEV) eO.show();
883
884						// close open event cards
885						if(OPT.closeEC && SC.evc_open == 'no') eO.find('.event_description').hide().removeClass('open');
886
887						html += eO[0].outerHTML;
888						json[ ED._ID] = ED;
889						show++;	
890					} 
891				});
892			}else{	
893				// get all the events in the events list
894				var cal_events = CAL.find('.eventon_list_event');
895
896				cal_events.each(function(index, elm){
897					var ED = $(elm).evo_cal_get_basic_eventdata();
898					if( !ED) return;
899
900					if(OPT.hide)	$(elm).hide(); // pre hide
901					this_show = false;
902
903					// month long or year long events
904					if( $(elm).hasClass('month_long') || $(elm).hasClass('year_long') ){
905						this_show = true;
906
907					}else{
908						if(CAL.evo_is_in_range({
909							'S': OPT.S,	'E': OPT.E,	'start': ED.unix_start ,	'end':ED.unix_end 
910						})){						
911							this_show = true;
912						} 
913					}
914
915					if( OPT.showAllEvs) this_show = true;
916					
917					if( this_show){	
918						// show event
919						if( OPT.showEV) $(elm).show();
920
921						// close open event cards
922						if(OPT.closeEC && SC.evc_open == 'no') 
923							$(elm).find('.event_description').hide().removeClass('open');
924
925						html += $(elm)[0].outerHTML;
926						json[ ED.uID ] = ED;
927						show++;	
928					} 
929				});
930			}
931
932
933			// No events
934			if( OPT.showEV){
935
936				no_event_content = CAL.evo_get_global({S1: 'html', S2:'no_events'});
937
938				tx_noevents = CAL.evo_get_txt({V:'no_events'});
939				EL = CAL.find('.eventon_events_list');
940				EL.find('.eventon_list_event.no_events').remove();
941				if( show == 0 )
942					EL.append('<div class="eventon_list_event no_events">'+ no_event_content +'</div>');
943			}
944
945			// if show events list
946			if( OPT.showEVL){
947				CAL.find('.eventon_events_list').show().removeClass('evo_hide');
948			}
949
950			R['count'] = show;
951			R['html'] = html;
952			R['json'] = json;
953
954			return R;
955		}
956
957	// check if an event is in the given date range
958		$.fn.evo_is_in_range = function(opt){
959			var defaults = { S:'', E:'', start:'',end:''}
960			var OPT = $.extend({}, defaults, opt);
961
962			S = parseInt(OPT.S);
963			E = parseInt(OPT.E);
964			start = parseInt(OPT.start);
965			end = parseInt(OPT.end);
966
967			return (
968				( start <= S && end >= E ) ||
969				( start <= S && end >= S && end <= E) ||
970				( start <= E && end >= E ) ||
971				( start >= S && end <= E )
972			) ? true: false;
973		}
974		$.fn.evo_cal_hide_events = function(){
975			CAL = $(this);
976			CAL.find('.eventon_list_event').hide();
977		}
978
979	// get event data basics from html event on page 
980	// ~@version 4.0.3
981		$.fn.evo_cal_get_basic_eventdata = function(){
982			var ELM = $(this);
983
984			var _time = ELM.data('time');
985			if( _time === undefined ) return false;
986
987			const time = _time.split('-');
988			const ri = ELM.data('ri').replace('r','');
989			const eID = ELM.data('event_id');
990
991			var _event_title = ELM.find('.evcal_event_title').text();
992			_event_title = _event_title.replace(/'/g, '&apos;');
993
994
995			var RR = {
996				'uID': eID + '_' + ri,
997				'ID': eID ,
998				'event_id': eID ,
999				'ri': ri,
1000				'event_start_unix': parseInt(time[0]),
1001				'event_end_unix': parseInt(time[1]),
1002				'ux_val': ELM.find('.evcal_list_a').data('ux_val'),
1003				'event_title': _event_title,
1004				'hex_color': ELM.data('colr'),
1005				'hide_et': ELM.hasClass('no_et') ? 'y':'n', // hide endtime
1006				'evcal_event_color': ELM.data('colr'),
1007				'unix_start': parseInt(time[0]),// @4.5.7
1008				'unix_end': parseInt(time[1]),// @4.5.7
1009			};
1010
1011			// event type
1012			RR['ett1'] = {};
1013			ELM.find('.evoet_eventtypes.ett1 .evoetet_val').each(function(){
1014				RR['ett1'][ $(this).data('id')] = $(this).data('v');
1015			});
1016
1017			// since 4.3.5
1018			const eventtop_data = ELM.find('.evoet_data').data('d');
1019
1020			// location
1021			if('loc.n' in eventtop_data && eventtop_data['loc.n'] != ''){
1022				RR['location'] = eventtop_data['loc.n'];
1023			}
1024
1025			// organizer
1026			if('orgs' in eventtop_data && eventtop_data.orgs !== undefined ){
1027				var org_names = '';
1028				$.each(eventtop_data.orgs, function(index, value){
1029					org_names += value +' ';
1030				});
1031				RR['organizer'] = org_names;
1032			}
1033
1034			// event tags @s 4.5.2
1035			if( 'tags' in eventtop_data && eventtop_data.tags !== undefined ){
1036				//console.log(eventtop_data.tags);
1037				RR['event_tags'] = eventtop_data.tags;
1038			}
1039
1040
1041			return RR;
1042
1043		}
1044
1045
1046	// DATE time functions @+2.8		
1047		$.fn.evo_day_in_month = function(opt){
1048			var defaults = { M:'', Y:''}
1049			var OPT = $.extend({}, defaults, opt);
1050
1051			return new Date(OPT.Y, OPT.M, 0).getDate();
1052		}
1053		$.fn.evo_get_day_name_index = function(opt){
1054			var defaults = { M:'', Y:'', D:''}
1055			var OPT = $.extend({}, defaults, opt);
1056
1057			//return moment(OPT.Y+'-'+OPT.M+'-'+OPT.D).utc().day();
1058
1059			return new Date(  Date.UTC(OPT.Y, OPT.M-1, OPT.D) ).getUTCDay();
1060		}
1061
1062	// LIGHTBOX
1063	// page Lightbox functions @+2.8
1064	// append to the lightbox main class name .evo_lightbox		
1065		// Legacy
1066			$.fn.evo_prepare_lb = function(){
1067				$(this).find('.evo_lightbox_body').html('');
1068			}
1069			$.fn.evo_show_lb = function(opt){
1070				var defaults = { RTL:'', calid:''}
1071				var OPT = $.extend({}, defaults, opt);
1072
1073				$(this).addClass('show '+ OPT.RTL).attr('data-cal_id', OPT.calid);
1074				$('body').trigger('evolightbox_show');
1075			}
1076			$.fn.evo_append_lb = function(opt){
1077				var defaults = { C:'', CAL:''}
1078				var OPT = $.extend({}, defaults, opt);
1079				$(this).find('.evo_lightbox_body').html( OPT.C);
1080
1081				if(  OPT.CAL!= '' && OPT.CAL !== undefined && OPT.CAL.hasClass('color')){
1082					const LIST = $(this).find('.eventon_events_list');
1083					if( LIST.length>0){
1084						LIST.find('.eventon_list_event').addClass('color');
1085					}				
1086				}
1087			}
1088
1089	// event image gallery @4.6
1090		// adjust event image height on lightbox
1091		$.fn.eventon_check_img_size_on_lb = function(  ){
1092			LB = this;
1093			winH = parseInt($( window ).height());
1094			winW = parseInt($( window ).width());
1095
1096			var pad = 50;
1097			if( winW < 650) pad = 20;
1098			if( winW < 500) pad = 10;
1099
1100			winH -= pad*2;
1101			winW -= pad*2;
1102
1103			LB = $('body').find('.evolb_ft_img');
1104			WINratio = winH/winW;
1105
1106			const IMG = LB.find('img');
1107			IMGratio = parseInt( IMG.data('h') )/ parseInt( IMG.data('w') );
1108			img_relative_w = parseInt(winH/IMGratio);
1109
1110			if(WINratio < 1 ){// wider window
1111				if(IMGratio<1){// wider image
1112					if(img_relative_w > winW){ // image wider than window
1113						IMG.css({'width': winW ,'height': 'auto' } );
1114					}else{// image smaller than window width
1115						newIH = winH>parseInt(IMG.data('h'))? parseInt(IMG.data('h')): winH;
1116						newIW = (winH>parseInt(IMG.attr('h')) )? '100%': img_relative_w;
1117						IMG.css({'width': newIW ,'height': newIH } );
1118					}
1119				}else{
1120					IMG.css({'width': 'auto' ,'height': winH } );
1121				}
1122			}else{
1123				if(IMGratio<1){// wider image
1124					IMG.css({'width': winW ,'height': 'auto' } );
1125				}else{// taller image
1126					if(img_relative_w > winW){ // relative image wider than window
1127						IMG.css({'width': winW ,'height': 'auto' } );
1128					}else{
1129						IMG.css({'width': 'auto' ,'height': winH } );
1130					}
1131				}
1132			}
1133		}
1134
1135		$.fn.eventon_process_main_ft_img = function(OO){
1136			IMG = this;
1137			img_sty = 'def';
1138			if( IMG.hasClass('fit') ) img_sty = 'fit';
1139			if( IMG.hasClass('full') ) img_sty = 'full';
1140
1141			box_width = IMG.width();
1142			box_height = IMG.height();
1143
1144			img_height = parseInt( IMG.data('h') );
1145			img_width = parseInt( IMG.data('w') );
1146			img_ratio = IR = img_height / img_width; // image ratio
1147
1148			// fit style
1149			if( IMG.hasClass('fit')){
1150				new_width = box_height / img_ratio;
1151				//console.log(new_width+' '+box_height +' '+img_ratio);
1152				new_height = box_height;
1153				if( new_width > box_width ){// width is wider than box
1154
1155					if( IR <1 ){
1156						new_width = box_width; new_height = IR * new_width;
1157					}else{
1158						new_height = box_height; new_width = new_height / IR;
1159					}
1160				} 				
1161				IMG.find('span').css({'width':new_width, 'height': new_height} );
1162			}
1163
1164			// full style
1165			if( IMG.hasClass('full')){
1166				new_height = img_ratio * box_width;
1167				new_width = box_width;
1168				IMG.find('span').css({'width':new_width, 'height': new_height} );
1169				IMG.css({'height': new_height} );
1170			}
1171
1172			//console.log(box_width +' '+img_width+' '+new_width);
1173		}
1174
1175	// Calendar Data & Shortcodes
1176		// get shortcodes from evo bottom
1177		$.fn.evo_shortcode_data = function(){			
1178			var ev_cal = $(this);
1179			return ev_cal.find('.evo_cal_data').data('sc');			
1180		}
1181
1182		// get filter data @4.6
1183			$.fn.evo_get_filter_data = function(){			
1184				return $(this).find('.evo_cal_data').data('filter_data');			
1185			}
1186			$.fn.evo_cal_get_filter_sub_data = function( tax , key){
1187				newdata = $(this).evo_get_filter_data();
1188
1189				return newdata[ tax ][ key ];
1190			}
1191			$.fn.evo_cal_update_filter_data = function(tax, new_val, key){
1192
1193				newdata = $(this).evo_get_filter_data();
1194
1195				if( key === undefined) key = 'nterms';
1196
1197				newdata[ tax ][ key ] = new_val;
1198
1199				$(this).find('.evo_cal_data').data('filter_data', newdata );
1200			}
1201			$.fn.evo_cal_get_footer_data = function( key ){
1202				data = $(this).find('.evo_cal_data').data();
1203
1204				//console.log(data);
1205
1206				if( data === undefined ) return false; // 4.6.2
1207				if( key in data ) return data[ key ];
1208				return false;		
1209			}
1210
1211		// hide cal data from view
1212		$.fn.evo_cal_hide_data = function(){			
1213			$(this).find('.evo_cal_data').attr({
1214				'data-sc':'',
1215				'data-filter_data':'',
1216				'data-nav_data':'',
1217			});			
1218		}
1219
1220		// update shortcode values from filter changes @u4.6
1221		$.fn.evo_update_sc_from_filters = function(){
1222			var el = $(this); 	
1223			SC = el.evo_shortcode_data();		
1224
1225			$.each( el.evo_get_filter_data() , function(index, value){
1226				var default_val 	= value.terms;
1227				var filter_val 		= value.nterms;
1228				const NOT_values 	= value.__notvals;
1229
1230				filter_val = filter_val == ''? 'NOT-all': filter_val;	
1231				
1232				var not_string = '';
1233
1234				// if NOT filter in place > include that in tax value for query
1235				if( NOT_values!== undefined && NOT_values.length >0 && filter_val != default_val ){	
1236					
1237					$.each(NOT_values, function(index, value){
1238						not_string += 'NOT-'+ value +',';
1239					});
1240				}		
1241
1242				SC[ index ] = not_string + filter_val;
1243			});
1244			
1245
1246			el.find('.evo_cal_data').data( 'sc', SC );
1247		}
1248		
1249		
1250
1251		// get shortcode single value
1252		$.fn.evo_get_sc_val = function(opt){
1253			var defaults = {	F:''}
1254			var OPT = $.extend({}, defaults, opt);
1255			var ev_cal = $(this); 
1256
1257			if(OPT.F=='') return false;
1258			SC = ev_cal.find('.evo_cal_data').data('sc');
1259
1260			if(!(SC[ OPT.F])) return false;
1261			return SC[ OPT.F];
1262		}
1263		// UPDATE Single value
1264		$.fn.evo_update_cal_sc = function(opt){
1265			var defaults = {
1266				F:'', V:''
1267			}
1268			var OPT = $.extend({}, defaults, opt);
1269			var ev_cal = $(this); 
1270			SC = ev_cal.find('.evo_cal_data').data('sc');
1271
1272			SC[ OPT.F ] = OPT.V;
1273
1274			ev_cal.find('.evo_cal_data').data( 'sc', SC );
1275		}
1276		// UPDATE all shortcode values
1277		$.fn.evo_update_all_cal_sc = function(opt){
1278			var defaults = {SC:''}
1279			var OPT = $.extend({}, defaults, opt);
1280			var CAL = $(this);
1281			CAL.find('.evo_cal_data').data( 'sc', OPT.SC );
1282		}
1283
1284	// OTHERS
1285		// hex colors // @+2.8
1286		$.fn.evo_is_hex_dark = function(opt){
1287			var defaults = { hex:'808080'}
1288			var OPT = $.extend({}, defaults, opt);
1289
1290			hex = OPT.hex;
1291
1292			var c = hex.replace('#','');
1293			var is_hex = typeof c === 'string' && c.length === 6 && !isNaN(Number('0x' + c));
1294
1295			if(is_hex){	
1296				var values = c.split('');
1297				r = parseInt(values[0].toString() + values[1].toString(), 16);
1298			    g = parseInt(values[2].toString() + values[3].toString(), 16);
1299			    b = parseInt(values[4].toString() + values[5].toString(), 16);
1300			}else{
1301				var vals = c.substring(c.indexOf('(') +1, c.length -1).split(', ');
1302				var r = vals[0]  // extract red
1303				var g = vals[1];  // extract green
1304				var b = vals[2];
1305			}
1306
1307			var luma = ((r * 299) + (g * 587) + (b * 114)) / 1000; // per ITU-R BT.709
1308
1309			return luma>155? true:false;
1310		}
1311
1312		// get rgb from hex code @4.5
1313			$.fn.evo_rgb_process = function(opt){
1314				var defaults = { data:'808080',type:'rgb', method:'rgb_to_val'}
1315				var opt = $.extend({}, defaults, opt);
1316
1317				const color = opt.data;
1318
1319				// RGB => hex
1320				if( opt.method == 'rgb_to_hex'){
1321					if(color == '1'){
1322						return;
1323					}else{
1324						if(color !=='' && color){
1325							rgb = color.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
1326							
1327							return "#" +
1328							("0" + parseInt(rgb[1],10).toString(16)).slice(-2) +
1329							("0" + parseInt(rgb[2],10).toString(16)).slice(-2) +
1330							("0" + parseInt(rgb[3],10).toString(16)).slice(-2);
1331						}
1332					}
1333				}
1334
1335				// RGB => rgb val
1336				if( opt.method == 'rgb_to_val'){
1337					if( opt.type == 'hex'){
1338						var rgba = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(color);	
1339						var rgb = new Array();
1340						rgb['r']= parseInt(rgba[1], 16);			
1341						rgb['g']= parseInt(rgba[2], 16);			
1342						rgb['b']= parseInt(rgba[3], 16);
1343						
1344					}else{
1345						rgb = color;
1346					}
1347					
1348					return parseInt((rgb['r'] + rgb['g'] + rgb['b'])/3);
1349				}				
1350			}
1351
1352		// Other data
1353			$.fn.evo_get_OD = function(){			
1354				var ev_cal = $(this);
1355				return ev_cal.find('.evo_cal_data').data('od');			
1356			}
1357
1358	
1359
1360		// get evo data for a given calendar
1361		$.fn.evo_getevodata = function(){
1362
1363			var ev_cal = $(this);
1364			var evoData = {};
1365			
1366			ev_cal.find('.evo-data').each(function(){
1367				$.each(this.attributes, function(i, attrib){
1368					var name = attrib.name;
1369					if(attrib.name!='class' && attrib.name!='style' ){
1370						name__ = attrib.name.split('-');
1371						evoData[name__[1]] = attrib.value;	
1372					}
1373				});
1374			});	
1375
1376			return evoData;
1377		}
1378
1379		// check if mobile device v4.6
1380		$.fn.evo_is_mobile = function(){
1381			return ( /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) )? true: false;		
1382		}
1383
1384	// eventon loading functions
1385	// v 2.4.5 -- deprecating
1386		$.fn.evo_loader_animation = function(opt){
1387			var defaults = {
1388				direction:'start'
1389			}
1390			var OPT = $.extend({}, defaults, opt);
1391
1392			if(OPT.direction == 'start'){
1393				$(this).find('#eventon_loadbar').slideDown();
1394			}else{
1395				$(this).find('#eventon_loadbar').slideUp();
1396			}
1397		}
1398
1399	// DEPRECATED functions
1400		$.fn.evo_item_shortcodes = function(){			
1401			var OBJ = $(this);
1402			var shortcode_array ={};			
1403			OBJ.each(function(){	
1404				$.each(this.attributes, function(i, attrib){
1405					var name = attrib.name;
1406					if(attrib.name!='class' && attrib.name!='style' && attrib.value !=''){
1407						name__ = attrib.name.split('-');
1408						shortcode_array[name__[1]] = attrib.value;	
1409					}
1410				});
1411			});
1412			return shortcode_array;
1413		}
1414		$.fn.evo_shortcodes = function(){			
1415			var ev_cal = $(this);
1416			var shortcode_array ={};
1417					
1418			ev_cal.find('.cal_arguments').each(function(){
1419				$.each(this.attributes, function(i, attrib){
1420					var name = attrib.name;
1421					if(attrib.name!='class' && attrib.name!='style' && attrib.value !=''){
1422						name__ = attrib.name.split('-');
1423						shortcode_array[name__[1]] = attrib.value;	
1424					}
1425				});
1426			});	
1427			return shortcode_array;
1428		}
1429		
1430
1431}(jQuery));

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.