PageSourceSearch

https://www.consciouscapitalism.org/wp-content/plugins/eventON/assets/js/eventon_functions.js?ver=4.6.7

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