PageSourceSearch

https://mesamedia.org/wp-content/plugins/wp-photo-album-plus/js/wppa-main.js?ver=260930-10254

js mesamedia.org collected 2026-10-02 13:34:09 UTC 43,889 bytes, 1,562 lines download raw bytes

1// wppa-main.js
2//
3// contains common functions
4//
5
6wppaWppaVer = '9.1.12.002';
7
8// jQuery(document).ready(function(){wppaConsoleLog('Document.ready')});
9
10// jQuery(window).on('scroll',function(){wppaConsoleLog('scroll');});
11// jQuery(window).on('resize',function(){wppaConsoleLog('resize');});
12// jQuery(window).on('wheel',function(){wppaConsoleLog('wheel');});
13
14// Tabby click function
15function wppaTabbyClick(){
16
17	jQuery(window).trigger("resize");
18	jQuery(document).trigger("tabbychange");
19	jQuery(window).trigger("orientationchange");
20	wppaAdjustAllFilmstrips(wppaEasingSlide);
21
22};
23
24// Init at dom ready
25jQuery(document).ready(function() {
26	wppaDoInit();
27});
28
29// Init nicescrollers
30jQuery(document).ready(function(){
31	if ( jQuery().niceScroll ) {
32		jQuery(document).ready(function(){
33			jQuery(".wppa-edit-area").niceScroll(".wppa-nicewrap",wppaNiceScrollOpts);
34		});
35	}
36});
37
38// QR code
39function wppaQRUpdate(url) {
40
41	wppaAjaxSetQrCodeSrc(url, "#wppa-qr-img");
42	return;
43}
44jQuery(document).ready(function(){
45	wppaQRUpdate(document.location.href);
46});
47window.onpopstate = function( event ) {
48	wppaQRUpdate(document.location.href);
49}
50
51// General initialisation
52function wppaDoInit() {
53
54	// Misc. init
55	_wppaTextDelay = wppaAnimationSpeed;
56	if ( wppaFadeInAfterFadeOut ) {
57		_wppaTextDelay *= 2;
58	}
59	if ( wppaIsMobile && wppaNoAnimateOnMobile ) {
60		_wppaTextDelay = 10;
61	}
62
63	// Make sure ajax spinners dies
64	jQuery( '.wppa-ajax-spin' ).hide();
65
66	// Make sure ovl spinner dies
67	jQuery( '.wppa-ovl-spin' ).hide();
68
69	// Fade ubbs out
70	setTimeout( function() {
71
72		jQuery(".wppa-ubb").each(function(){
73
74			var divId = jQuery(this).attr('id');
75			var mocc = divId.substr(6);
76			wppaUbb(mocc,'l','hide');
77			wppaUbb(mocc,'r','hide');
78		});
79
80	}, 3000 );
81
82	// Responsive handlers
83	jQuery(window).on("DOMContentLoaded load resize scroll wheel orientationchange",wppaDoAllAutocols);
84
85	// Size scrollable areas
86	jQuery(window).on('DOMContentLoaded load resize scroll wheel orientationchange',wppaSizeArea);
87
88	// Init masonryplus
89	jQuery(window).on('DOMContentLoaded load resize scroll wheel orientationchange', wppaInitMasonryPlus);
90
91	// When the window size changes, filmstrip needs immediate adjustment
92	jQuery(window).on('resize', function(){wppaAdjustAllFilmstrips(wppaEasingSlide)});
93
94	// Resize nicescrollers, re-layout masonryplus
95	jQuery(window).on("DOMContentLoaded load resize scroll wheel orientationchange", function(){
96
97		setTimeout( function() {
98
99			wppaResizeNice('wppaDoInit');
100			wppaInitMasonryPlus();
101
102		}, 1000);
103    });
104
105	// Fake a resize
106	jQuery(window).trigger('resize');
107
108	// Protect rightclick
109	wppaProtect();
110
111	// For tabby plugin:
112	setTimeout(function(){
113		jQuery(".responsive-tabs__heading").on("click", wppaTabbyClick);
114        jQuery(".responsive-tabs__list__item").on("click", wppaTabbyClick);
115	},10);
116
117	jQuery(document).on("tabbychange",function(){
118
119		wppaResizeNice('tabbychange');
120		setTimeout(function(){
121			wppaDoAllAutocols();
122			jQuery(window).trigger("resize");
123			jQuery("#wppa-ovl-spin").hide();
124		},1500);
125	});
126
127	// Lightbox global
128	if ( wppaOvlGlobal ) {
129		jQuery("a").each(function(){ 								// get all a tags
130			var href = jQuery(this).attr("href"); 					// find href
131			if ( href ) {
132				var temp = href.split('.');
133				var ext  = temp[temp.length-1]; 						// find extension
134				if ( ext == 'jpg' || ext == 'jpeg' || ext == 'png' ) {	// If its an image
135					if ( ! jQuery(this).attr("data-rel") ) { 			// should not already have attr data-rel
136						jQuery(this).attr("data-rel",wppaOvlGlobal); 	// Add: 'data-rel="wppa"' or: 'data-rel="wppa[single]"'
137					}
138				}
139			}
140		});
141	}
142
143	// Align ajax spinner
144	jQuery(".wppa-ajax-spin").css({top:wppaWindowHeight()/2,left:wppaWindowWidth()/2});
145}
146
147// Resize all nicescrollers
148var wppaResizeNiceTimer;
149var wppaResizeNiceTimestamp;
150function wppaResizeNice(from) {
151// console.log('Nice resize called from '+from);
152	clearTimeout(wppaResizeNiceTimer);
153	wppaResizeNiceTimestamp = Date.now();
154	wppaResizeNiceTimer = setTimeout(function(){_wppaResizeNice(from)}, Math.max(wppaResizeEndDelay, wppaScrollEndDelay));
155}
156function _wppaResizeNice(from) {
157
158	// Body?
159	if ( typeof jQuery("body").getNiceScroll == "function" ) {
160		jQuery("body").getNiceScroll().resize();
161	}
162
163	// Areas
164	jQuery(".wppa-nicescroll").each(function(){
165		jQuery(this).getNiceScroll().resize();
166	});
167}
168
169// resize end listener
170var wppaResizeEndTimer;
171jQuery(document).ready(function(){
172	jQuery(window).on( 'resize load', function () {
173		clearTimeout( wppaResizeEndTimer );
174		wppaResizeEndTimer = setTimeout( function () {
175			jQuery(window).trigger('wpparesizeend');
176		}, wppaResizeEndDelay );
177	});
178});
179
180// scroll end listener
181var wppaScrollEndTimer;
182jQuery(document).ready(function(){
183	jQuery(window).on( 'scroll wheel load', function () {
184		clearTimeout( wppaScrollEndTimer );
185		wppaScrollEndTimer = setTimeout( function () {
186			jQuery(window).trigger('wppascrollend');
187		}, wppaScrollEndDelay );
188	});
189});
190
191// Install auto div sizer
192jQuery(document).ready(function(){
193	jQuery(window).on("DOMContentLoaded load resize scroll wheel orientationchange", wppaSizeAutoDiv);
194});
195
196// Size auto wppa_div
197function wppaSizeAutoDiv() {
198	jQuery('.wppa-autodiv').each(function(index) {
199		var totHeight = jQuery(window).height();
200		var factor = jQuery(this).attr('data-max-height');
201		jQuery(this).css({maxHeight:totHeight*factor});
202	});
203}
204
205var wppaLastAllAutocols = 0;
206var wppaLastAllAutocolsTimer = 0;
207// Do the auto cols
208function wppaDoAllAutocols(e) {
209
210	// Too soon?
211	if ( wppaTimNow() < ( wppaLastAllAutocols + 200 ) ) {
212		if ( ! wppaLastAllAutocolsTimer ) {
213			wppaLastAllAutocolsTimer = setTimeout( wppaDoAllAutocols, 200 );
214		}
215		return;
216	}
217	clearTimeout( wppaLastAllAutocolsTimer );
218	wppaLastAllAutocols = wppaTimNow();
219
220	_wppaDoAllAutocols(0);
221}
222
223function _wppaDoAllAutocols(i) {
224// console.log('doing all autocols');
225	// Do occurrences that are responsive
226	jQuery(".wppa-container").each(function(){
227		var divId = jQuery(this).attr("id");
228		var mocc = divId.substr(15);
229		if ( wppaAutoColumnWidth[mocc] ) {
230			_wppaDoAutocol( mocc, i);
231		}
232	});
233
234	// Do retries if configured (-1 is infinite)
235	if ( i < wppaExtendedResizeCount || wppaExtendedResizeCount == -1 ) {
236		setTimeout(function(){_wppaDoAllAutocols(i+1)}, wppaExtendedResizeDelay);
237	}
238
239	wppaResizeNice('wppaDoAllAutocols');
240
241	return true;
242}
243
244// If disable right mouseclick
245function wppaProtect() {
246	if ( wppaHideRightClick ) {
247		jQuery('img' ).bind('contextmenu', function(e) {
248			return false;
249		});
250		jQuery('video' ).bind('contextmenu', function(e) {
251			return false;
252		});
253		jQuery('canvas' ).bind('contextmenu', function(e) {
254			return false;
255		});
256	}
257}
258
259// Initialize Ajax render partial page content and history update
260jQuery(document).ready( function( e ) {
261
262	// Are we allowed and capable to ajax?
263	jQuery(document).ready(function(){
264		if ( wppaAllowAjax && jQuery.ajax ) wppaCanAjaxRender = true;
265	});
266
267	// Can we do history.pushState ?
268	if ( typeof( history.pushState ) != 'undefined') {
269		wppaCanPushState = true;
270	}
271});
272
273// On the fly init lightbox
274function wppaUpdateLightboxes() {
275
276	// Native wppa lightbox
277	if ( typeof( wppaInitOverlay ) == 'function') {
278		wppaInitOverlay();
279	}
280
281	// Lightbox-3
282	if ( typeof( myLightbox ) != 'undefined') {
283		if ( typeof( myLightbox.updateImageList ) == 'function') {
284			myLightbox.updateImageList();
285		}
286	}
287
288	// PrettyPhoto
289	if ( jQuery().prettyPhoto ) {
290		jQuery( "a[rel^='prettyPhoto']" ).prettyPhoto( {
291			deeplinking: false,
292		});
293	}
294}
295
296// Stop video of a given occurrency
297function wppaStopVideo( mocc ) {
298	var id = [];
299	var video;
300	var i;
301
302	id[1] = 'wppa-overlay-img';
303	id[2] = 'theimg0-'+mocc;
304	id[3] = 'theimg1-'+mocc;
305	i = 0;
306
307	while ( i < 3 ) {
308		i++;
309		if ( i != 1 || mocc == 0 ) {	// Stop video on lighbox only when mocc = 0, i.e. stop all video
310			video = document.getElementById( id[i] );
311			if ( video ) {
312				if ( typeof( video.pause ) == 'function') {
313					video.pause();
314				}
315			}
316		}
317	}
318}
319
320// Stop audio
321function wppaStopAudio( mocc ) {
322
323	var items = jQuery( '.wppa-audio-' + mocc );
324	var i = 0;
325	while ( i < items.length ) {
326		items[i].pause();
327//		console.log('Stop audio '+mocc+' '+jQuery(items[i]).attr('id'));
328		i++;
329	}
330}
331
332// Convert a thumbnail url to a fs url
333function wppaMakeFullsizeUrl( url ) {
334var temp;
335var temp2;
336
337	url = url.replace( '/thumbs/', '/' );	// Not a thumb
338
339	// Remove sizespec for Cloudinary
340	temp = url.split( '//' );
341	if ( temp[1] ) {
342		temp2 = temp[1].split( '/' );
343		url = temp[0]+'//';
344	}
345	else {
346		temp2 = temp[0].split( '/' );
347		url = '';
348	}
349	var j = 0;
350	while ( j < temp2.length ) {
351		var chunk = temp2[j];
352		var w = chunk.split('_' );
353		if ( w[0] != 'w') {
354			if ( j != 0 ) url += '/';
355			url += chunk;
356		}
357		j++;
358	}
359	return url;
360}
361
362// Get the width of a container
363function wppaGetContainerWidth( mocc ) {
364
365	var elm = document.getElementById('wppa-container-'+mocc );
366	if ( ! elm ) {
367		return; // container vanishd (by pla)
368	}
369
370	var w = 0;
371
372	if ( ! wppaAutoColumnWidth[mocc] ) {
373		return elm.clientWidth;
374	}
375
376	while ( w == 0 ) {
377		elm = elm.parentNode;
378		w = jQuery( elm ).width();
379	}
380	return parseInt( w ); //* wppaAutoColumnFrac[mocc] );
381}
382
383// Do the responsive size adjustment
384function _wppaDoAutocol( mocc, i ) {
385
386	// Auto?
387	if ( ! wppaAutoColumnWidth[mocc] ) {
388		return true;
389	}
390
391	var w;
392	var h;
393	var old;
394	var exists;
395
396	// Container
397	w = wppaGetContainerWidth(mocc);
398
399	// Anything to do here?
400	var container = document.getElementById( 'wppa-container-' + mocc );
401	if ( ! container ) {
402		return;
403	}
404
405	// Covers
406	if ( ! wppaCoverImageResponsive[mocc] ) {
407		exists = jQuery( ".wppa-asym-text-frame-"+mocc );
408		if ( exists.length > 1 ) {
409			old = jQuery( exists[0] ).width();
410
411			if ( wppaResponseSpeed == 0 ) {
412				jQuery( ".wppa-asym-text-frame-"+mocc ).css( {width:(w - wppaTextFrameDelta)} );
413				jQuery( ".wppa-cover-box-"+mocc ).css( {width:w} );
414			}
415			else {
416				wppaAnimate( ".wppa-asym-text-frame-"+mocc, {width:(w - wppaTextFrameDelta)}, wppaResponseSpeed, wppaEasingDefault );
417				wppaAnimate( ".wppa-cover-box-"+mocc, {width:w}, wppaResponseSpeed, wppaEasingDefault );
418			}
419		}
420	}
421
422	// Multi Column Responsive covers
423	exists = jQuery( ".wppa-cover-box-mcr-"+mocc );
424	if ( exists.length > 1 ) {	// Yes there are
425
426		var cw 			= document.getElementById('wppa-albumlist-' + mocc ).clientWidth;
427		var nCovers 	= parseInt( ( cw + wppaCoverSpacing )/( wppaMaxCoverWidth+wppaCoverSpacing ) ) + 1;
428		var coverMax1 	= nCovers - 1;
429		var MCRWidth 	= parseInt( ( ( cw + wppaCoverSpacing )/nCovers ) - wppaCoverSpacing );
430
431		if ( wppaColWidth[mocc] != cw || wppaMCRWidth[mocc] != MCRWidth ) {
432
433			wppaColWidth[mocc] = cw;
434			wppaMCRWidth[mocc] = MCRWidth;
435
436			var idx = 0;
437			while ( idx < exists.length ) {
438				var col = idx % nCovers;
439				switch ( col ) {
440					case 0:	/* left */
441						jQuery( exists[idx] ).css( {'marginLeft': '0px', 'clear': 'both', 'float': 'left'});
442						break;
443					case coverMax1:	/* right */
444						jQuery( exists[idx] ).css( {'marginLeft': '0px', 'clear': 'none', 'float': 'right'});
445						break;
446					default:
447						jQuery( exists[idx] ).css( {'marginLeft': wppaCoverSpacing, 'clear': 'none', 'float': 'left'});
448				}
449				idx++;
450			}
451
452			if ( wppaCoverImageResponsive[mocc] ) {
453			}
454			else {
455				wppaAnimate( ".wppa-asym-text-frame-mcr-"+mocc, {width: (MCRWidth - wppaTextFrameDelta)}, wppaResponseSpeed, wppaEasingDefault );
456			}
457			old = jQuery( exists[0] ).width();
458			wppaAnimate( ".wppa-cover-box-mcr-"+mocc, {width:MCRWidth}, wppaResponseSpeed, wppaEasingDefault );
459		}
460	}
461	else if ( exists.length == 1 ) {	// One cover: full width, 0 covers don't care
462		if ( wppaCoverImageResponsive[mocc] ) {
463		}
464		else {
465			wppaAnimate( ".wppa-asym-text-frame-mcr-"+mocc, {width:(w - wppaTextFrameDelta)}, wppaResponseSpeed, wppaEasingDefault );
466			var myCss = {
467				'marginLeft': '0px',
468				'float'		: 'left'
469			}
470			jQuery( ".wppa-cover-box-mcr-"+mocc ).css( myCss );
471		}
472	}
473
474	// Grid covers. set container linheight to 0
475	var isGrid = jQuery( '.wppa-album-cover-grid-'+mocc ).length;
476
477	if ( isGrid > 0 ) {
478
479		// Set container linheight to 0
480//		jQuery('#wppa-container-'+mocc).css( 'line-height', '0' );
481
482		// Calculate width
483		var nItems = parseInt( ( w / wppaMaxCoverWidth ) + 0.9999 );
484		if ( nItems < 1 ) nItems = 1;
485
486		// Set widths
487		jQuery( '.wppa-album-cover-grid-'+mocc ).css( {width:(100/nItems)+'%'} );
488	}
489
490	// Thumbframes default
491	if ( wppaThumbSpaceAuto ) {
492		var tfw = parseInt( jQuery( ".thumbnail-frame-"+mocc ).css('width') );
493		if ( tfw ) {
494			var minspc = wppaMinThumbSpace;
495			var weff = w - wppaThumbnailAreaDelta - 7;
496			var nthumbs = Math.max( 1, parseInt( weff / ( tfw + minspc ) ) );
497			var availsp = weff - nthumbs * tfw;
498			var newspc = parseInt( availsp / ( nthumbs+1 ) );
499
500			jQuery( ".thumbnail-frame-"+mocc ).css( {marginLeft:newspc});
501		}
502	}
503
504	// Comalt thumbmails
505	jQuery( ".thumbnail-frame-comalt-"+mocc ).css('width', w - wppaThumbnailAreaDelta );
506	jQuery( ".wppa-com-alt-"+mocc ).css('width', w - wppaThumbnailAreaDelta - wppaComAltSize - 16 );
507
508	// Masonry thumbnails horizontal
509	var row = 1;
510	var rowHeightPix;
511	var rowHeightPerc = jQuery( '#wppa-mas-h-'+row+'-'+mocc ).attr('data-height-perc' );
512	while ( rowHeightPerc ) {
513		rowHeightPix = rowHeightPerc * ( w - wppaThumbnailAreaDelta ) / 100;
514		jQuery( '#wppa-mas-h-'+row+'-'+mocc ).css('height', rowHeightPix );
515		row++;
516		rowHeightPerc = jQuery( '#wppa-mas-h-'+row+'-'+mocc ).attr('data-height-perc' );
517	}
518
519	// Fix bug in ie and chrome
520	wppaSetMasHorFrameWidthsForIeAndChrome(mocc);
521
522	// Slide
523	if ( document.getElementById( 'slide_frame-'+mocc ) ) {
524		wppaFormatSlide( mocc );
525	}
526
527	// Audio
528	jQuery( "#audio-slide-"+mocc ).css('width', w - wppaBoxDelta - 6 );
529
530	// Comments
531	jQuery( ".wppa-comment-textarea-"+mocc ).css('width',w * 0.7 );
532
533	// Filmstrip
534	_wppaAdjustFilmstrip( mocc, wppaEasingSlide );	// reposition content
535
536	// Texts in slideshow and browsebar
537	if ( ! wppaIsMini[mocc] && typeof( _wppaSlides[mocc] ) != 'undefined') {	// Mini is properly initialized
538		if ( wppaColWidth[mocc] < wppaMiniTreshold ) {
539			jQuery( '#wppa-avg-rat-'+mocc ).html( __( 'Avg', 'wp-photo-album-plus' ) );
540			jQuery( '#wppa-my-rat-'+mocc ).html( __( 'Mine', 'wp-photo-album-plus' ) );
541
542			jQuery( '#counter-'+mocc ).html( ( _wppaCurIdx[mocc]+1 )+' / '+_wppaSlides[mocc].length );
543		}
544		else {
545			jQuery( '#wppa-avg-rat-'+mocc ).html( __( 'Average&nbsp;rating', 'wp-photo-album-plus' ) );
546			jQuery( '#wppa-my-rat-'+mocc ).html( __( 'My&nbsp;rating', 'wp-photo-album-plus' ) );
547
548			jQuery( '#counter-'+mocc ).html( __( 'Photo', 'wp-photo-album-plus' )+' '+( _wppaCurIdx[mocc]+1 )+' '+__( 'of', 'wp-photo-album-plus' )+' '+_wppaSlides[mocc].length );
549		}
550	}
551
552	// Single photo
553	jQuery( ".wppa-sphoto-"+mocc ).css('width',w );
554	jQuery( ".wppa-simg-"+mocc ).css('width',w - 2*wppaSlideBorderWidth );
555	jQuery( ".wppa-simg-"+mocc ).css('height', '' );
556
557	// Mphoto
558	jQuery( ".wppa-mphoto-"+mocc ).css('width',w + 10 );
559	jQuery( ".wppa-mimg-"+mocc ).css('width',w );
560	jQuery( ".wppa-mimg-"+mocc ).css('height', '' );
561
562	// smxpdf
563	jQuery( ".smxpdf-"+mocc ).css('height', 0.8 * wppaWindowHeight() );
564
565	// Search box
566	if ( wppaSearchBoxSelItems[mocc] > 0 ) {
567		if ( w / wppaSearchBoxSelItems[mocc] < 125 ) {
568			jQuery( ".wppa-searchsel-item-"+mocc ).css('width', '100%' );
569		}
570		else {
571			jQuery( ".wppa-searchsel-item-"+mocc ).css('width', ( 100 / wppaSearchBoxSelItems[mocc] ) + '%' );
572		}
573	}
574
575	// Upload dialog album selectionbox
576	jQuery( ".wppa-upload-album-"+mocc ).css('maxWidth', 0.6 * w );
577
578	// Real calendar
579	wppaSetRealCalendarHeights( mocc );
580
581	// Selection boxes max width
582	jQuery( ".wppa-box" ).find("select").each(function(){
583		jQuery(this).css({maxWidth:jQuery(this).parent().width()});
584	});
585
586	return true;
587}
588
589// Set heights in real calendar
590function wppaSetRealCalendarHeights( mocc ) {
591
592	var w = jQuery('#wppa-real-calendar-'+mocc).width();
593
594	if ( w > 0 ) {
595
596		var ready = true;
597
598		var h = w*wppaThumbAspect/7;
599		jQuery('.wppa-real-calendar-day-'+mocc).css({height:h});
600
601		var f = (w/50+2);
602		jQuery('#wppa-real-calendar-'+mocc).css({fontSize:f});
603
604		var m = f/4;
605		jQuery('.wppa-real-calendar-head-td-'+mocc).css({marginTop:m,marginBottom:m});
606
607		var b = h/2;
608		jQuery('.wppa-realcalimg-'+mocc).each(function(){
609			if ( this.height == 0 ) {
610				ready = false;
611			}
612			else {
613				var day = jQuery(this).attr('data-day');
614				thisb = b - (h-this.height)/2;
615				jQuery('.wppa-real-calendar-day-content-'+day+'-'+mocc).css({bottom:thisb});
616			}
617		});
618
619		if ( ! ready ) {
620			setTimeout(function(){wppaSetRealCalendarHeights( mocc );},100);
621		}
622	}
623}
624
625// Fix bug in IE and Chrome
626function wppaSetMasHorFrameWidthsForIeAndChrome(mocc) {
627	// For IE and Chrome there is the class .wppa-mas-h-{mocc}
628	// Set widths of frames for IE and Chrome. These browsers interprete width:auto
629	// sometimes not in relation to the specified height, but to the available space.
630	var frames = jQuery( '.wppa-mas-h-'+mocc );
631	var tnm = wppaMinThumbSpace;
632	for ( var i=0;i<frames.length;i++ ) {
633
634		var img = wppaGetChildI( frames[i] );
635		if ( img ) {
636			if ( img.nodeName == 'IMG') {
637				if ( ! img.complete ) {
638					setTimeout('wppaSetMasHorFrameWidthsForIeAndChrome( '+mocc+' )', 400 ); // Try again after 400 ms.
639					return;
640				}
641			}
642			var wd = ( ( img.naturalWidth ) / ( img.naturalHeight ) * ( img.height ) ) + tnm;
643			jQuery( frames[i] ).css( {'width': wd } );
644		}
645	}
646}
647// get (grand)child of parent with id like i-...
648function wppaGetChildI( parent ) {
649
650	var children = parent.childNodes;
651	var img = false;
652	var i;
653
654	for ( i=0; i<children.length; i++ ) {
655		var child = children[i];
656		if ( child.id ) {
657			if ( child.id.substr( 0, 2 ) == 'i-' ) {
658				return child;
659			}
660		}
661		var grandChild = wppaGetChildI( child );
662		if ( grandChild ) {
663			return grandChild;
664		}
665	}
666	return false;
667}
668
669// Fotomoto
670var wppaFotomotoLoaded = false;
671var wppaFotomotoToolbarIds = [];
672function fotomoto_loaded() {
673	wppaFotomotoLoaded = true;
674}
675function wppaFotomotoToolbar( mocc, url ) {
676	if ( wppaColWidth[mocc] >= wppaFotomotoMinWidth ) {	// Space enough to show the toolbar
677		jQuery( '#wppa-fotomoto-container-'+mocc ).css('display','inline' );
678		jQuery( '#wppa-fotomoto-checkout-'+mocc ).css('display','inline' );
679	}
680	else {
681		jQuery( '#wppa-fotomoto-container-'+mocc ).css('display','none' );
682		jQuery( '#wppa-fotomoto-checkout-'+mocc ).css('display','none' );
683		return;	// Too small
684	}
685	if ( wppaFotomoto && document.getElementById('wppa-fotomoto-container-'+mocc ) ) { // Configured and container present
686		if ( wppaFotomotoLoaded ) {
687			FOTOMOTO.API.checkinImage( url );
688			wppaFotomotoToolbarIds[mocc] = FOTOMOTO.API.showToolbar('wppa-fotomoto-container-'+mocc, url );
689		}
690		else { // Not loaded yet, retry after 200 ms
691			setTimeout('wppaFotomotoToolbar( '+mocc+',"'+url+'" )', 200 );
692		}
693	}
694}
695function wppaFotomotoHide( mocc ) {
696	jQuery( '#wppa-fotomoto-container-'+mocc ).css('display','none' );
697	jQuery( '#wppa-fotomoto-checkout-'+mocc ).css('display','none' );
698}
699
700// Sanitize utility
701function wppaStringContainsForbiddenChars( str ) {
702var forbidden = [ '?', '&', '#', '/', '"', "'" ];
703var i=0;
704
705	while ( i < forbidden.length ) {
706		if ( str.indexOf( forbidden[i] ) != -1 ) {
707			return true;
708		}
709		i++;
710	}
711	return false;
712}
713
714// Setup an event handler for popstate events
715window.onpopstate = function( event ) {
716
717	if ( wppaCanPushState ) {
718		if ( event.state ) {
719			if ( event.state.type ) {
720				if ( event.state.type == 'slide' ) {
721					wppaNoStackPush = true;
722					_wppaGoto( event.state.occur, event.state.slide );
723					return;
724				}
725				if ( event.state.type == 'ajax' ) {
726					document.location.reload();
727					return;
728				}
729			}
730		}
731	}
732};
733
734// Push history stack for a slideshow
735function wppaPushStateSlide( mocc, slide, url ) {
736
737	if ( wppaNoStackPush ) {
738		wppaNoStackPush = false;
739//		console.log('stackpush skipped');
740		return;
741	}
742
743	if ( ! wppaIsMini[mocc] ) {	// Not from a widget
744		if ( wppaCanPushState && wppaUpdateAddressLine ) {
745			if ( url != '' ) {
746				jQuery(document).ready(function(){
747					setTimeout(function(){
748						try {
749							history.pushState( {type: 'slide', slide: slide, occur: mocc}, "", url );
750							wppaQRUpdate(url);
751//							console.log( 'slidehistory pushed mocc = '+mocc+', slide = '+slide );
752						}
753						catch( err ) {
754							wppaConsoleLog( 'Slide history stack update failed' );
755						}
756					}, 1000);
757				});
758			}
759		}
760	}
761}
762
763// Filter enables the use of <script> tags inside a script
764function wppaRepairScriptTags( text ) {
765var temp;
766var newtext;
767
768	// Just to be sure we do not run into undefined error
769	if ( typeof( text ) == 'undefined') return '';
770
771	while ( text.indexOf( '[script') != -1 ) {
772		text = text.replace( '[script', '<script' );
773	}
774	while ( text.indexOf( '[/script') != -1 ) {
775		text = text.replace( '[/script', '</script' );
776	}
777
778	return text;
779
780}
781
782// Filter enables the use of a <br> tag while they are removed with strip_tags
783// Also fixes [a ] and [/a], and [img  and /]
784function wppaRepairBrTags( text ) {
785var newtext;
786
787	// Just to be sure we do not run into undefined error
788	if ( typeof(text) == 'undefined') return '';
789
790	newtext = text;
791	newtext = newtext.replace( '[br /]', '<br />' );
792	newtext = newtext.replace( '[a', '<a' );
793	newtext = newtext.replace( /&quot;/g, '"' );
794	newtext = newtext.replace( '"]', '">' );
795	newtext = newtext.replace( '[/a]', '</a>' );
796	newtext = newtext.replace( '[img', '<img' );
797	newtext = newtext.replace( '/]', '/>' );
798
799	return newtext;
800}
801
802// Replace text that is too long by ellipses
803function wppaTrimAlt( text ) {
804var newtext;
805
806	// Just to be sure we do not run into undefined error
807	if ( typeof(text) == 'undefined') return '';
808
809	if ( text.length > 13 ) {
810		newtext = text.substr( 0,10 ) + '...';
811	}
812	else newtext = text;
813	return newtext;
814}
815
816// Initialize FaceBook sdk
817var wppaFbInitBusy = false;
818function wppaFbInit() {
819	if ( ! wppaFbInitBusy ) {
820		if ( typeof( FB ) != 'undefined') {
821			wppaFbInitBusy = true;				// set busy
822			setTimeout('_wppaFbInit()', 10 ); 	// do it async over 10 ms
823		}
824		else {
825			setTimeout('wppaFbInit()', 200 );
826		}
827	}
828}
829
830var wppaFbInitDone = false;
831function _wppaFbInit() {
832	if ( wppaFbInitDone ) return;
833	FB.init( {status : true, xfbml : true } );
834	wppaFbInitBusy = false;
835	wppaFbInitDone = true;
836}
837
838// Insert ( an emoticon ) in a comment text
839function wppaInsertAtCursor( elm, value ) {
840
841    //IE support
842    if ( document.selection ) {
843        elm.focus();
844        sel = document.selection.createRange();
845        sel.text = value;
846    }
847
848    //MOZILLA and others
849    else if ( elm.selectionStart || elm.selectionStart == '0') {
850        var startPos = elm.selectionStart;
851        var endPos = elm.selectionEnd;
852        elm.value = elm.value.substring( 0, startPos )
853            + value
854            + elm.value.substring( endPos, elm.value.length );
855        elm.selectionStart = startPos + value.length;
856        elm.selectionEnd = startPos + value.length;
857    } else {
858        elm.value += value;
859    }
860}
861
862// Initialize Google Maps
863function wppaGeoInit( mocc, lat, lon ) {
864	var mapDiv = document.getElementById( "map-canvas-"+mocc );
865	if ( ! mapDiv ) return;
866
867	var myLatLng = new google.maps.LatLng( lat, lon );
868	var mapOptions = {
869		disableDefaultUI: false,
870		panControl: false,
871		zoomControl: true,
872		mapTypeControl: true,
873		scaleControl: true,
874		streetViewControl: true,
875		overviewMapControl: true,
876		zoom: wppaGeoZoom,
877		center: myLatLng,
878//			mapTypeId: google.maps.MapTypeId.TERRAIN,
879//			mapTypeControlOptions: {
880//				mapTypeIds: [ google.maps.MapTypeId.TERRAIN, google.maps.MapTypeId.SATELLITE, google.maps.MapTypeId.HYBRID ],
881//				style: google.maps.MapTypeControlStyle.DROPDOWN_MENU
882//			},
883	};
884	var map = new google.maps.Map( document.getElementById( "map-canvas-"+mocc ), mapOptions );
885	var marker = new google.maps.Marker( {
886		position: myLatLng,
887		map: map,
888		title:""
889	});
890
891	google.maps.event.addListener( map, "center_changed", function() {
892		// 1 second after the center of the map has changed, pan back to the
893		// marker.
894		window.setTimeout(function() {
895		  map.panTo( marker.getPosition() );
896		}, 1000 );
897	});
898}
899
900// Encode funny chars
901function wppaEncode( xtext ) {
902	var text, result;
903
904	if ( typeof( xtext )=='undefined') return;
905
906	text = String(xtext);
907	result = text.replace( /#/g, '%23' );
908	text = result;
909	result = text.replace( /&/g, '%26' );
910	text = result;
911//	result = text.replace( /+/g, '%2B' );
912	var temp = text.split( '+' );
913	var idx = 0;
914	result = '';
915	while ( idx < temp.length ) {
916		result += temp[idx];
917		idx++;
918		if ( idx < temp.length ) result += '%2B';
919	}
920
921	return result;
922}
923
924// Compute photo id out of an url
925function wppaUrlToId( url ) {
926	var temp = url.split( '/wppa/' );		// if '/wppa/' found, a wppa image
927	if ( temp.length == 1 ) {
928		temp = url.split( '/upload/' );	// if '/upload/' found, a cloudinary image
929	}
930	if ( temp.length == 1 ) {
931		return 0;	// Still nothing, not a wppa image or ahires image, return 0
932	}
933	// Find image id
934	temp = temp[1];
935	temp = temp.split( '.' );
936	temp = temp[0].replace( '/', '' );
937	temp = temp.replace( '/', '' );
938	temp = temp.replace( '/', '' );
939	temp = temp.replace( '/', '' );
940	temp = temp.replace( '/', '' );
941
942	return temp;
943}
944
945// Init supersearch
946jQuery(document).ready(function () {
947	jQuery('.wppa-ss-button').each(function(){
948		mocc = jQuery(this).attr('data-mocc');
949		wppaSuperSearchSelect(mocc);
950	});
951});
952
953
954// Opens/closes selection boxes in supersearch html
955function wppaSuperSearchSelect( mocc, go ) {
956
957	// Init
958	jQuery( '#wppa-ss-albumopt-'+mocc ).css('display', 'none');
959	jQuery( '#wppa-ss-albumcat-'+mocc ).css('display', 'none');
960	jQuery( '#wppa-ss-albumname-'+mocc ).css('display', 'none');
961	jQuery( '#wppa-ss-albumtext-'+mocc ).css('display', 'none');
962	jQuery( '#wppa-ss-photoopt-'+mocc ).css('display', 'none');
963	jQuery( '#wppa-ss-photoname-'+mocc ).css('display', 'none');
964	jQuery( '#wppa-ss-photoowner-'+mocc ).css('display', 'none');
965	jQuery( '#wppa-ss-phototag-'+mocc ).css('display', 'none');
966	jQuery( '#wppa-ss-phototext-'+mocc ).css('display', 'none');
967	jQuery( '#wppa-ss-photoexif-'+mocc ).css('display', 'none');
968	jQuery( '#wppa-ss-photoiptc-'+mocc ).css('display', 'none');
969	jQuery( '#wppa-ss-exifopts-'+mocc ).css('display', 'none');
970	jQuery( '#wppa-ss-iptcopts-'+mocc ).css('display', 'none');
971	jQuery( '#wppa-ss-spinner-'+mocc ).css('display', 'none');
972	jQuery( '#wppa-ss-button-'+mocc ).css('display', 'none');
973
974	var s1 = jQuery( '#wppa-ss-pa-'+mocc ).val();
975	var s2 = '';
976	var s3 = '';
977	var data = '';
978	switch ( s1 ) {
979		case 'a':
980			jQuery( '#wppa-ss-albumopt-'+mocc ).css('display', '');
981			s2 = jQuery( '#wppa-ss-albumopt-'+mocc ).val();
982			switch ( s2 ) {
983				case 'c':
984					jQuery( '#wppa-ss-albumcat-'+mocc ).css('display', '');
985					var set = jQuery( '.wppa-ss-albumcat-'+mocc );
986					data = '';
987					var i;
988					for ( i = 0; i < set.length; i++ ) {
989						if ( jQuery( set[i] ).prop('selected')) {
990							data += '.' + jQuery( set[i] ).val();
991						}
992					}
993					data = data.substr( 1 );
994
995					if ( data != '' ) {
996						jQuery( '#wppa-ss-button-'+mocc ).css('display', '');
997					}
998					break;
999				case 'n':
1000					jQuery( '#wppa-ss-albumname-'+mocc ).css('display', '');
1001					data = jQuery( '#wppa-ss-albumname-'+mocc ).val();
1002					if ( data != null ) {
1003						jQuery( '#wppa-ss-button-'+mocc ).css('display', '');
1004					}
1005					break;
1006				case 't':
1007					jQuery( '#wppa-ss-albumtext-'+mocc ).css('display', '');
1008					var set = jQuery( '.wppa-ss-albumtext-'+mocc );
1009					data = '';
1010					var i;
1011					for ( i = 0; i < set.length; i++ ) {
1012						if ( jQuery( set[i] ).prop('selected')) {
1013							data += ';' + jQuery( set[i] ).val();
1014						}
1015					}
1016					data = data.substr( 1 );
1017
1018					if ( data != '' ) {
1019						jQuery( '#wppa-ss-button-'+mocc ).css('display', '');
1020					}
1021					break;
1022			}
1023			break;
1024
1025		case 'p':
1026			jQuery( '#wppa-ss-photoopt-'+mocc ).css('display', '');
1027			s2 = jQuery( '#wppa-ss-photoopt-'+mocc ).val();
1028			switch ( s2 ) {
1029				case 'n':
1030					jQuery( '#wppa-ss-photoname-'+mocc ).css('display', '');
1031					data = jQuery( '#wppa-ss-photoname-'+mocc ).val();
1032					if ( data != null ) {
1033						jQuery( '#wppa-ss-button-'+mocc ).css('display', '');
1034					}
1035					break;
1036				case 'o':
1037					jQuery( '#wppa-ss-photoowner-'+mocc ).css('display', '');
1038					data = jQuery( '#wppa-ss-photoowner-'+mocc ).val();
1039					if ( data != null ) {
1040						jQuery( '#wppa-ss-button-'+mocc ).css('display', '');
1041					}
1042					break;
1043				case 'g':
1044					jQuery( '#wppa-ss-phototag-'+mocc ).css('display', '');
1045					var set = jQuery( '.wppa-ss-phototag-'+mocc );
1046					data = '';
1047					var i;
1048					for ( i=0; i<set.length; i++ ) {
1049						if ( jQuery( set[i] ).prop('selected')) {
1050							data += '.' + jQuery( set[i] ).val();
1051						}
1052					}
1053					data = data.substr( 1 );
1054
1055					if ( data != '' ) {
1056						jQuery( '#wppa-ss-button-'+mocc ).css('display', '');
1057					}
1058					break;
1059				case 't':
1060					jQuery( '#wppa-ss-phototext-'+mocc ).css('display', '');
1061					var set = jQuery( '.wppa-ss-phototext-'+mocc );
1062					data = '';
1063					var i;
1064					for ( i=0; i<set.length; i++ ) {
1065						if ( jQuery( set[i] ).prop('selected')) {
1066							data += ';' + jQuery( set[i] ).val();
1067						}
1068					}
1069					data = data.substr( 1 );
1070
1071					if ( data != '' ) {
1072						jQuery( '#wppa-ss-button-'+mocc ).css('display', '');
1073					}
1074					break;
1075				case 'i':
1076					jQuery( '#wppa-ss-photoiptc-'+mocc ).css('display', '');
1077					s3 = jQuery( '#wppa-ss-photoiptc-'+mocc ).val();
1078					if ( s3 ) {
1079						if ( s3.length > 2 ) {
1080							s3 = s3.replace( '#', 'H' );	// Replace # by H
1081						}
1082						if ( s3 != '' ) {
1083							jQuery( '#wppa-ss-iptcopts-'+mocc ).css('display', '');
1084							if ( wppaLastIptc != s3 ) {
1085								wppaAjaxGetSsIptcList( mocc, s3, 'wppa-ss-iptcopts-'+mocc );
1086								wppaLastIptc = s3;
1087							}
1088							else {
1089								data = jQuery( '#wppa-ss-iptcopts-'+mocc ).val();
1090								if ( data != null && data != '' ) {
1091									jQuery( '#wppa-ss-button-'+mocc ).css('display', '');
1092								}
1093							}
1094						}
1095					}
1096					break;
1097				case 'e':
1098					jQuery( '#wppa-ss-photoexif-'+mocc ).css('display', '');
1099					s3 = jQuery( '#wppa-ss-photoexif-'+mocc ).val();
1100					if ( s3 ) {
1101						if ( s3.length > 2 ) {
1102							s3 = s3.replace( '#', 'H' );	// Replace # by H
1103						}
1104						if ( s3 != '' ) {
1105							jQuery( '#wppa-ss-exifopts-'+mocc ).css('display', '');
1106							if ( wppaLastExif != s3 ) {
1107								wppaAjaxGetSsExifList( mocc, s3, 'wppa-ss-exifopts-'+mocc );
1108								wppaLastExif = s3;
1109							}
1110							else {
1111								data = jQuery( '#wppa-ss-exifopts-'+mocc ).val();
1112								if ( data != null && data != '' ) {
1113									jQuery( '#wppa-ss-button-'+mocc ).css('display', '');
1114								}
1115							}
1116						}
1117					}
1118					break;
1119			}
1120			break;
1121	}
1122
1123	// Find results
1124	if ( go ) {
1125		var url = jQuery( '#wppa-ss-pageurl-'+mocc ).val();
1126		if ( url.indexOf( '?' ) == -1 ) {
1127			url += '?';
1128		}
1129		else {
1130			url += '&';
1131		}
1132		url += 'occur=1&wppa-supersearch='+s1+','+s2+','+s3+','+data;
1133		document.location.href = url;
1134	}
1135}
1136
1137// Supersearch function set size of exif/iptc itemlist
1138function wppaSetIptcExifSize( clas, selid ) {
1139	return;
1140	var t = jQuery( clas );
1141	var n = t.length;
1142	if ( n > 6 ) n = 6;
1143	if ( n < 2 ) n = 2;
1144	jQuery( selid ).attr('size', n );
1145}
1146
1147function wppaUpdateSearchRoot( text, root ) {
1148	var items = jQuery( ".wppa-search-root" );
1149	var i = 0;
1150	while ( i < items.length ) {
1151		jQuery( items[i] ).html( text );
1152		i++;
1153	}
1154	items = jQuery( ".wppa-rootbox" );
1155	i = 0;
1156	while ( i < items.length ) {
1157		if ( root ) {
1158			jQuery( items[i] ).prop('checked', false );
1159			jQuery( items[i] ).prop('disabled', false );
1160		}
1161		else {
1162			jQuery( items[i] ).prop('checked', true );
1163			jQuery( items[i] ).prop('disabled', true );
1164		}
1165		i++;
1166	}
1167	items = jQuery( ".wppa-search-root-id" );
1168	i = 0;
1169	while ( i < items.length ) {
1170		jQuery( items[i] ).val( root );
1171		i++;
1172	}
1173}
1174
1175function wppaSubboxChange( elm ) {
1176	if ( jQuery( elm ).prop('checked') ) {
1177		jQuery( ".wppa-rootbox" ).each(function(index) {
1178			jQuery(this).prop('checked',true);
1179		});
1180	}
1181}
1182
1183function wppaClearSubsearch() {
1184	var items = jQuery( ".wppa-display-searchstring" );
1185	var i = 0;
1186	while ( i < items.length ) {
1187		jQuery( items[i] ).html( '' );
1188		i++;
1189	}
1190	items = jQuery( ".wppa-search-sub-box" );
1191	i = 0;
1192	while ( i < items.length ) {
1193		jQuery( items[i] ).prop('disabled', true );
1194		i++;
1195	}
1196}
1197
1198function wppaEnableSubsearch() {
1199	var items = jQuery( ".wppa-search-sub-box" );
1200	var i = 0;
1201	while ( i < items.length ) {
1202		jQuery( items[i] ).removeAttr('disabled' );
1203		i++;
1204	}
1205}
1206
1207function wppaDisplaySelectedFiles(id,sep) {
1208	var theFiles = jQuery('#'+id);
1209	var i = 0;
1210	var result = '';
1211	if ( ! sep ) {
1212		sep = ' ';
1213	}
1214
1215	while ( i<theFiles[0].files.length ) {
1216		result += theFiles[0].files[i].name+sep;
1217		i++;
1218	}
1219
1220	jQuery('#'+id+'-display').val(result);
1221	jQuery('#'+id+'-display').html(result);
1222}
1223
1224function wppaIsEmpty( str ) {
1225	if ( str == null ) return true;
1226	if ( typeof( str ) == 'undefined') return true;
1227	if ( str == '' ) return true;
1228	if ( str == false ) return true;
1229	if ( str == 0 ) return true;
1230}
1231
1232function wppaGetUploadOptions( yalb, mocc, where, onComplete ) {
1233
1234	var options = {
1235		beforeSend: function( xhr ) {
1236			if ( wppaAjaxMethod == 'rest' ) {
1237				xhr.setRequestHeader( 'X-WP-NONCE', wppaObj.restNonce );
1238			}
1239			jQuery('#progress-'+yalb+'-'+mocc).show();
1240			jQuery('#bar-'+yalb+'-'+mocc).width('0%');
1241			jQuery('#message-'+yalb+'-'+mocc).html('');
1242			jQuery('#percent-'+yalb+'-'+mocc).html('');
1243		},
1244		uploadProgress: function(event, position, total, percentComplete) {
1245			jQuery('#bar-'+yalb+'-'+mocc).css('backgroundColor','#7F7');
1246			jQuery('#bar-'+yalb+'-'+mocc).width(percentComplete+'%');
1247			if ( percentComplete < 95 ) {
1248				jQuery('#percent-'+yalb+'-'+mocc).html(percentComplete+'%');
1249			}
1250			else {
1251				jQuery('#percent-'+yalb+'-'+mocc).html(__( 'Processing...', 'wp-photo-album-plus' ));
1252			}
1253		},
1254		success: function() {
1255			jQuery('#bar-'+yalb+'-'+mocc).width('100%');
1256			jQuery('#percent-'+yalb+'-'+mocc).html(__( 'Done!', 'wp-photo-album-plus' ));
1257			if (wppaUploadButtonText) jQuery('.wppa-upload-button').val(wppaUploadButtonText);
1258		},
1259		complete: function(response) {
1260			var txt;
1261			if ( wppaAjaxMethod == 'rest' ) {
1262				txt = response.responseJSON.html;
1263			}
1264			else {
1265				theResult = JSON.parse(response.responseText);
1266				txt = theResult.html;
1267			}
1268
1269			if (txt && txt.indexOf(__( 'Upload failed', 'wp-photo-album-plus' ))!=-1) {
1270				jQuery('#bar-'+yalb+'-'+mocc).css('backgroundColor','#F77');
1271				jQuery('#percent-'+yalb+'-'+mocc).html(__( 'Upload failed', 'wp-photo-album-plus' ));
1272				jQuery('#message-'+yalb+'-'+mocc).html( '<span style="font-size: 10px;" >'+txt+'</span>' );
1273			}
1274			else {
1275				jQuery('#message-'+yalb+'-'+mocc).html( '<span style="font-size: 10px;" >'+txt+'</span>' );
1276				if ( where == 'thumb' || where == 'cover') {
1277					eval(onComplete);
1278				}
1279			}
1280		},
1281		error: function( xhr, status, error ) {
1282			jQuery('#message-'+yalb+'-'+mocc).html( '<span style="color: red;" >'+__( 'Server error.', 'wp-photo-album-plus' )+'</span>' );
1283			jQuery('#bar-'+yalb+'-'+mocc).css('backgroundColor','#F77');
1284			jQuery('#percent-'+yalb+'-'+mocc).html(__( 'Upload failed', 'wp-photo-album-plus' ));
1285			wppaConsoleLog('Error = '+error+', status = '+status );
1286		}
1287	};
1288
1289	return options;
1290}
1291
1292// (re)-initialize masonryplus using jQuery().masonry()
1293function wppaInitMasonryPlus() {
1294//wppaConsoleLog('doing initmasplus');
1295	jQuery('.grid-masonryplus').each(function(){
1296
1297		var divId 		= jQuery(this).attr('id');
1298		var mocc 		= divId.substr(5);
1299		var w 			= wppaGetContainerWidth(mocc) - wppaThumbnailAreaDelta;
1300		var cnt 		= parseInt( ( w + wppaTfMargin ) / ( wppaThumbSize * 0.75 + wppaTfMargin ) );
1301		if ( cnt == 0 ) cnt = 1;
1302		var colWidth 	= parseInt( w / cnt );
1303
1304		jQuery(".grid-item").css('visibility', 'visible');
1305		jQuery(".grid-item-" + mocc).css('width', colWidth + 'px');
1306		jQuery('#grid-' + mocc ).masonry({
1307				itemSelector: '.grid-item-' + mocc,
1308				columnWidth: colWidth,
1309				fitWidth: true,
1310				transitionDuration: 0
1311			});
1312	});
1313}
1314
1315/* Start fullscreen functions */
1316// Initialize
1317jQuery(document).ready(function(){
1318
1319	// Create global buttons if required
1320	jQuery(document).ready(function(){
1321		if ( wppaFsPolicy == 'global' ) wppaGlobalFS();
1322	});
1323
1324	// Install handlers
1325	jQuery(window).on("DOMContentLoaded load", wppaFsShow);
1326	jQuery(document).on("fullscreenchange mozfullscreenchange webkitfullscreenchange msfullscreenchange", wppaFsChange);
1327
1328});
1329
1330// Handle fullscreen change event
1331function wppaFsChange() {
1332
1333	// Show the right buttons
1334	wppaFsShow();
1335
1336	// Re-display lightbox
1337	wppaOvlShowSame('fschange');
1338}
1339
1340// Create global fullsize buttons
1341function wppaGlobalFS() {
1342
1343	if ( wppaIsIpad ) return false;
1344	if ( wppaIsSafari ) return false;
1345
1346	var top = parseInt( wppaGlobalFsIconSize / 4 );
1347	var rgt = top;
1348	if ( ! wppaIsMobile && jQuery( '#wpadminbar' ).length > 0 ) {
1349		top += jQuery( '#wpadminbar' ).height();
1350	}
1351
1352	jQuery('body').append(
1353		'<div' +
1354			' id="wppa-fulls-btn-1"' +
1355			' class="wppa-fulls-btn"' +
1356			' style="position:fixed;top:' + top + 'px;right:' + rgt + 'px;display:none;"' +
1357			' title="Enter fullscreen"' +
1358			' onclick="wppaFsOn()"' +
1359			' >' +
1360			wppaSvgHtml( 'Full-Screen', wppaGlobalFsIconSize + 'px', true, false, '0', '0', '0', '0' ) +
1361		'</div>');
1362
1363	jQuery('body').append(
1364		'<div' +
1365			' id="wppa-exit-fulls-btn-1"' +
1366			' class="wppa-exit-fulls-btn"' +
1367			' style="position:fixed;top:' + top + 'px;right:' + rgt + 'px;display:none;"' +
1368			' title="Leave fullscreen"' +
1369			' onclick="wppaFsOff()"' +
1370			' >' +
1371			wppaSvgHtml( 'Exit-Full-Screen', wppaGlobalFsIconSize + 'px', true, false, '0', '0', '0', '0' ) +
1372		'</div>');
1373
1374	wppaFsShow();
1375
1376}
1377
1378// Switch fullscreen on
1379function wppaFsOn() {
1380
1381	var docElm = document.documentElement;
1382	if (docElm.requestFullscreen) {
1383		docElm.requestFullscreen();
1384	}
1385	else if (docElm.mozRequestFullScreen) {
1386		docElm.mozRequestFullScreen();
1387	}
1388	else if (docElm.webkitRequestFullScreen) {
1389		docElm.webkitRequestFullScreen();
1390	}
1391
1392}
1393
1394// Switch fullscreen off
1395function wppaFsOff() {
1396
1397	if (document.exitFullscreen) {
1398		document.exitFullscreen();
1399	}
1400	else if (document.mozCancelFullScreen) {
1401		document.mozCancelFullScreen();
1402	}
1403	else if (document.webkitCancelFullScreen) {
1404		document.webkitCancelFullScreen();
1405	}
1406
1407}
1408
1409// Is fullscreen on?
1410function wppaIsFs() {
1411
1412	if ( wppaIsIpad ) return false;
1413	if ( wppaIsSafari ) return false;
1414	return ( document.fullscreenElement !== null );
1415}
1416
1417// Show / hide the right buttons
1418function wppaFsShow() {
1419
1420	if ( wppaIsFs() ) {
1421		jQuery( '.wppa-fulls-btn' ).hide();
1422		jQuery( '.wppa-exit-fulls-btn' ).show();
1423	}
1424	else {
1425		jQuery( '.wppa-fulls-btn' ).show();
1426		jQuery( '.wppa-exit-fulls-btn' ).hide();
1427	}
1428
1429	if ( wppaOvlOpen && wppaFsPolicy == 'global' && wppaOvlBigBrowse ) {
1430		jQuery( '#wppa-fulls-btn-1' ).hide();
1431		jQuery( '#wppa-exit-fulls-btn-1' ).hide();
1432	}
1433
1434}
1435
1436
1437var wppaAudioSeqno;
1438var wppaAudioOnlyRuns = [];
1439// Do the audio only
1440function wppaDoAudioOnly(tagid,urls,seqno,mocc) {
1441
1442	wppaAudioSeqno = seqno;
1443
1444	var body;
1445	var oldurl;
1446	var newurl = urls[0];
1447
1448	body = '';
1449	urls.forEach( function(currentValue, index){
1450		var t = currentValue.split('.');
1451		var ext = t[t.length-1];
1452		body += '<source id="wppa-audio-source-'+index+'-'+mocc+'" src="'+currentValue+'" type="audio/'+ext+'">';
1453	});
1454	body += 'Your browser does not support the audio element.';
1455
1456	// Get current url
1457	oldurl = jQuery("#wppa-audio-source-0-"+mocc).attr("src");
1458
1459	// Not running
1460	if ( oldurl == "" ) {
1461		wppaAudioOnlyRuns[mocc] = false;
1462	}
1463
1464	// Same: stop when playing
1465	if ( oldurl == newurl && wppaAudioOnlyRuns[mocc] ) {
1466		document.getElementById("wppa-audioonly-"+mocc).pause();
1467		wppaAudioOnlyRuns[mocc] = false;
1468	}
1469
1470	// Same: resume when stopped
1471	else if ( oldurl == urls[0] ) {
1472		document.getElementById("wppa-audioonly-"+mocc).play();
1473		wppaAudioOnlyRuns[mocc] = seqno;
1474		wppaShowAudioDesc(seqno,mocc);
1475	}
1476
1477	// Different
1478	else {
1479		jQuery("#"+tagid).html(body);
1480		document.getElementById("wppa-audioonly-"+mocc).load();
1481		document.getElementById("wppa-audioonly-"+mocc).play();
1482		jQuery(".wppa-audiolabel-"+mocc).css("font-weight","normal");
1483		jQuery("#audiolabel-"+mocc+"-"+seqno).css("font-weight","bold");
1484		jQuery("#audiolabel-"+mocc+"-"+(seqno-1)).blur();
1485		jQuery("#audiolabel-"+mocc+"-"+seqno).blur();
1486
1487		// Hide previous
1488		wppaHideAudioDesc(wppaAudioOnlyRuns[mocc],mocc,true);
1489
1490		wppaAudioOnlyRuns[mocc] = seqno;
1491
1492		// Show current
1493		wppaShowAudioDesc(seqno,mocc);
1494	}
1495};
1496function wppaAudioOnlyNext(mocc) {
1497	jQuery("#audiolabel-"+mocc+"-"+(wppaAudioSeqno+1)).trigger("click");
1498};
1499
1500function wppaShowAudioDesc(seqno,mocc) {
1501	var tagid = 'audiodesc-'+mocc+'-'+seqno;
1502	jQuery("#"+tagid).show();
1503};
1504function wppaHideAudioDesc(seqno,mocc,force) {
1505
1506	if ( ! seqno ) return; // may be false
1507
1508	var tagid = 'audiodesc-'+mocc+'-'+seqno;
1509	if ( force || wppaAudioOnlyRuns[mocc] != seqno ) {
1510		jQuery("#"+tagid).hide();
1511	}
1512};
1513
1514var wppaAlbLbBusy = false;
1515function wppaAlbLb(event,albumid) {
1516	event.stopPropagation();
1517
1518	if (wppaAlbLbBusy) {
1519		wppaAlbLbBusy = false;
1520		return;
1521	}
1522	wppaAlbLbBusy = true;
1523
1524	jQuery('#wppa-ovl-spin').show();
1525	jQuery('.first-'+albumid).trigger('click');
1526	return false;
1527};
1528
1529// Delayed Search
1530function wppaDelayedSearch( url, mocc, n ) {
1531
1532	jQuery( '#wppa-ajax-spin-'+mocc ).fadeIn();
1533
1534	// Make the url
1535	url += '?';
1536	if ( jQuery( '#wppa-searchstring-'+mocc ).length == 1 ) url += "wppa-searchstring=" + jQuery( '#wppa-searchstring-'+mocc ).val() + '&';
1537	if ( jQuery( '#wppa-searchroot-'+mocc ).length == 1 ) url += "wppa-searchroot=" + jQuery( '#wppa-searchroot-'+mocc ).val() + '&';
1538	if ( jQuery( '#wppa-forceroot-'+mocc ).length == 1 ) url += "wppa-forceroot=" + jQuery( '#wppa-forceroot-'+mocc ).val() + '&';
1539	if ( jQuery( '#wppa-subsearch-'+mocc).prop('checked' ) ) url +="wppa-subsearch=on" + '&';
1540	if ( jQuery( '#wppa-rootsearch-'+mocc).prop('checked' ) ) url +="wppa-rootsearch=on" + '&';
1541	if ( jQuery( '#wppa-catbox-'+mocc ).length == 1 ) url += "wppa-catbox=" + jQuery( '#wppa-catbox-'+mocc ).val() + '&';
1542	if ( jQuery( '#wppa-rootbox-'+mocc ).prop('checked') ) url += "wppa-rootbox=on" + '&';
1543
1544	if ( n > 0 ) {
1545		var i;
1546		for ( i = 0; i< n; i++ ) {
1547			if ( jQuery( '#wppa-searchselbox-' + i + '-' + mocc ).val() ) {
1548				url += 'wppa-searchselbox-' + i + '=' + jQuery('#wppa-searchselbox-' + i + '-' + mocc ).val() + '&';
1549			}
1550		}
1551	}
1552
1553	url = url.slice(0,-1);
1554
1555	// Go to it after a few second
1556//	console.log(url);
1557
1558	setTimeout( function() { document.location.href = url }, 2000 );
1559
1560}
1561
1562

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.