PageSourceSearch

https://la999.es/wp-content/plugins/qtmplayer/assets/js/qtmplayer.js?ver=PR.6.6.9

js la999.es collected 2026-10-01 12:13:49 UTC 40,471 bytes, 1,444 lines download raw bytes

1/** @license
2 *
3 * ProRadio Music Player: JavaScript player with audio analyzer
4 * ----------------------------------------------
5 * http://proradio.com/
6 *
7 * Copyright (c) 2020-2021, ProRadio / Igor Nardo. All rights reserved.
8 * This software cna be used only within our products. It can't be edited or modified for reuse under other projects.
9 * Cannot be re-sold or embedded in other products for sale.
10 *
11 */
12
13
14// IMPORTANT: THE FOLLOWING IS NOT A COMMENT! IT IS JAVASCIPT IMPORTING! DO NOT DELETE
15// ===================================================================================
16// @codekit-prepend "../components/raphael/raphael.min.js"
17// @codekit-prepend "../soundmanager/script/soundmanager2-nodebug-jsmin.js"
18// @codekit-prepend "qtmplayer-smpo.js"
19// @codekit-prepend "qtmplayer-radiofeed.js"
20
21// Not required			codekit-prepend "qtmplayer-webapiplayer.js" 
22
23(function($){
24	
25	var qtPlayDebug = $('#qtmplayer').data('qtmplayer-debugger');
26	var qtAnalyzer  = $('#qtmplayer').data('analyzer'); // disable webaudio
27	var qtInitialized = false;
28	var qtPlayIsAllowed = false;
29	var qtShowPlayer  = $('#qtmplayer').data('showplayer'); // disable webaudio
30
31
32	if( /MSIE|Edge|Trident/i.test(navigator.userAgent) || ( navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1 ) ){
33		qtAnalyzer = 0;
34	}
35
36	function qtMplayer_filename(path){
37		path = path.substring(path.lastIndexOf("/")+ 1);
38		return (path.match(/[^.]+(\.[^?#]+)?/) || [])[0];
39	}
40
41	// since 3.0.2 moved browser detection to mobile
42	var qtMplayerisMobile = false;
43	if( /MSIE|Edge|Trident/i.test(navigator.userAgent) 
44		|| ( 
45			navigator.userAgent.indexOf('Safari') != -1 
46			&& 
47			navigator.userAgent.indexOf('Chrome') == -1 
48			) 
49		){
50		qtMplayerisMobile = true;
51	}
52	if( /iPad/i.test(navigator.userAgent) ){
53		qtMplayerisMobile = true;
54	}
55	if( /iPhone/i.test(navigator.userAgent) ){
56		qtMplayerisMobile = true;
57	}
58	if (screen.width <= 1119){ 
59		qtMplayerisMobile = true;
60	}
61	if(true === qtMplayerisMobile){
62		qtAnalyzer = 0;
63	}
64
65	$.qtMplayerPlaylistCue = {
66		minicue: false,
67		tadv: false,
68		init: function(){
69			$.qtMplayerPlaylistCue.destroy();
70			var item, offset, width,left,
71				minicue, det;;
72			item = $("li.qtmplayer-played");
73			if(item.length > 0){
74				offset = item.offset().left;
75				width =  item.width();
76				left = 0;
77				item.append('<div id="qtMplayerPlaylistTrack" class="qtmplayer-playlist__track"><span id="qtMplayerPlaylistTrackAdv" data-qtmplayer-trackadv class="qtmplayer-track-adv qtmplayer-content-accent"></span>
77<span id="qtMplayerPlaylistMinicue" class="qtmplayer-playlist-minicue"></span></div>');
78				$.qtMplayerPlaylistCue.minicue = $("#qtMplayerPlaylistMinicue");
79				$.qtMplayerPlaylistCue.tadv = $("#qtMplayerPlaylistTrackAdv");
80				det = $("#qtMplayerPlaylistTrack");
81				det.off("mousemove").off("click");
82				det.on("mousemove", function(e){
83					left = e.clientX - offset;
84					$.qtMplayerPlaylistCue.minicue.css({
85						'left': left,
86						'transition': 'left 0.1s'
87					});
88				});
89				det.on("click", function(e){
90					$.qtPlayerObj.uniPlayer.seek((e.clientX - offset) / width * 100);
91				});
92			}
93		},
94		update:function(p){
95			if($.qtMplayerPlaylistCue.tadv){
96				$.qtMplayerPlaylistCue.tadv.css({"width": p+'%'});
97			}
98			if($.qtMplayerPlaylistCue.minicue){
99				// $.qtMplayerPlaylistCue.minicue.css({"left": p+'%'});
100			}
101		},
102		destroy: function(){
103			$("#qtMplayerPlaylistTrack").remove();
104		}
105	};
106
107	/**
108	 * ===========================================================================
109	 * Circle for podcast
110	 * @type {Object}
111	 * ===========================================================================
112	 */
113	$.qtRaphaelCircle = {
114		container: $(".qtmplayer-circularplayer"),
115		findXY: function(obj) {
116			var curleft = 0, curtop = 0;
117			do {
118				curleft += obj.offsetLeft;
119				curtop += obj.offsetTop;
120			} while (!!(obj = obj.offsetParent));
121			return [curleft,curtop];
122		},
123		getScrollLeft: function() {
124			return ($('body').scrollLeft+document.documentElement.scrollLeft);
125		},
126		getScrollTop: function() {
127			return ($('body').scrollTop+document.documentElement.scrollTop);
128		},
129		init: function(){
130
131			var RC = $.qtRaphaelCircle,
132				rcontainer = $("#qtdonut"),
133				
134				cH = rcontainer.height(),
135				cW = rcontainer.width(),
136				R = cH / 2;
137			RC.destroy();
138			rcontainer.find("svg").remove();
139			RC.R = R;
140			var archtype = new Raphael("qtdonut", cW, cH);
141			archtype.customAttributes.arc = function (xloc, yloc, value, total, R) {
142				var alpha = 360 / total * value,
143					a = (90 - alpha) * Math.PI / 180,
144					x = xloc + R * Math.cos(a),
145					y = yloc - R * Math.sin(a),
146					path;
147				if (total === value) {
148					path = [
149						["M", xloc, yloc - R],
150						["A", R, R, 0, 1, 1, xloc, yloc - R]
151					];
152				} else {
153					path = [
154						["M", xloc, yloc - R],
155						["A", R, R, 0, +(alpha > 180), 1, x, y]
156					];
157				}
158				return {
159					path: path
160				};
161			};
162			var my_arc = archtype.path().attr({
163				"stroke": "#fff",
164				"stroke-width": '22px',
165				arc: [0, 0, 0, 0, 0]
166			});
167			RC.arc = my_arc;
168			RC.container = rcontainer;
169			var	uA = navigator.userAgent,
170				isOpera = (uA.match(/opera/i)),
171				isChrome = (uA.match(/chrome/i)),
172				isTouchDevice = (uA.match(/ipad|iphone/i)),
173				fullCircle = (isOpera||isChrome?359.9:360),
174				angle, offl, offt,
175				dx,dy,coords, perc;
176
177			rcontainer.on('click','svg',function(e){
178				e = e?e:window.event;
179				if (isTouchDevice && e.touches) {
180					e = e.touches[0];
181				}
182				if (e.pageX || e.pageY) {
183					coords = [e.pageX,e.pageY];
184				} else if (e.clientX || e.clientY) {
185					coords = [e.clientX+RC.getScrollLeft(),e.clientY+RC.getScrollTop()];
186				}
187				offl = rcontainer.offset().left;
188				offt = rcontainer.offset().top - $(window).scrollTop() ;
189				dx = e.clientX -  (offl + (cW / 2));
190				dy = e.clientY -  (offt + (cH / 2));
191				angle = Math.floor(fullCircle-(  (Math.atan2(dx,dy) * 180/Math.PI )  +180));
192				perc = angle/fullCircle * 100;
193				$.qtPlayerObj.uniPlayer.seek(perc);
194			});
195			rcontainer.addClass("active");
196		},
197		update: function(p){
198			var RC = $.qtRaphaelCircle,
199				R = RC.R;
200			if(typeof(p) === 'undefined' || typeof(RC.arc) === 'undefined' ){
201				return;
202			}
203			if(isNaN(p)){
204				return;
205			}
206			RC.arc.animate({
207				arc: [R, R, p*100, 100, R]
208			}, 2, "ease");
209		},
210		destroy: function(){
211			var RC = $.qtRaphaelCircle;
212
213			if(typeof(RC.arc) !== 'undefined'){
214				RC.arc.remove();
215				RC.container.removeClass('active');
216			}
217			if(typeof(RC.container) !== 'undefined'){
218				RC.container.removeClass('active');
219			}
220		}
221	};
222
223
224
225
226	$.qtPlayerObj = {
227		isSoundApi: false,
228		playing: false,
229		hasDoneAutoplay: false,
230		masterVolume:  $('#qtmplayer').data('qtmplayer-startvol'),//100,
231		ProRadioUserManagerIntegration: {
232			shouldBlock: function( songdata ){
233				if('undefined' == typeof($.ProRadioUserManager)){
234					return;
235				}
236				if( 'undefined' === typeof( songdata ) ){
237					songdata = $.qtPlayerObj.songdata;
238				}
239				var prum = $.ProRadioUserManager;
240				var blocking = $.qtPlayerObj.songdata.blocking;
241				
242				if( undefined !== blocking ){
243					console.log( blocking );
244					prum.fn.modal.openModal(prum, blocking);
245					return true;
246				} 
247				return false;
248			}
249		},
250		uniPlayer: {
251			btnPlay: $("[data-qtmplayer-playbtn]"), //btnPlay: $("#qtmplayerPlay"),
252			canMoove: true,
253			pause: function(){
254				// qtmplayer-radiofeed.js
255				$.qtPlayerObj.playing = false;
256				if('object' === typeof($.qtmplayerRadioFeedObj)){ // check if the file is loaded
257					$.qtmplayerRadioFeedObj.fn.stopFeed();
258				}
259				$.qtPlayerObj.interface.justStop();
260				if( 'radio' === $.qtPlayerObj.songdata.type ){
261					// With this, after pausing from the bar, music can't restart
262					$.qtPlayerObj.songdata.file_hold = $.qtPlayerObj.songdata.file; // Store stream in a temorary object
263					$.qtPlayerObj.songdata.file = 'file_hold'; // replace stream with a string to block it
264					$.qtPlayerObj.interface.doSpinner(false);
265					if($.qtPlayerObj.isSoundApi === true){
266						$.qtWebApiPlayer.stop();
267					} else {
268						$.qtSMPO.smStop();
269					}
270
271				} else {
272					if($.qtPlayerObj.isSoundApi === true){
273						$.qtWebApiPlayer.pause();
274					} else {
275						$.qtSMPO.smPause();
276					}
277				}
278			},
279			webapiPlay: function(){
280				$.qtWebApiPlayer.play($.qtPlayerObj.songdata.file);
281			},
282			radioFeedCallback:function( feedImageUrl ){
283				var fallback = $.qtPlayerObj.imgCover.attr('data-fallback');
284				if(undefined !== feedImageUrl){
285					$.qtPlayerObj.imgCover.attr( 'src', feedImageUrl ).show();
286				} else {
287					if(fallback) {
288						$.qtPlayerObj.imgCover.attr('src', fallback).show();
289					} else {
290						$.qtPlayerObj.imgCover.hide();
291					}
292				}
293			},
294			play: function(){
295				if ($.qtPlayerObj.uniPlayer.btnPlay.find("i.material-icons").html() === 'pause') {
296					return;
297				}
298				if(qtInitialized && qtPlayIsAllowed){
299					$.qtPlayerObj.uniPlayer.btnPlay.find("i.material-icons").html("pause");
300					if($.qtPlayerObj.isSoundApi === true){
301						$.qtWebApiPlayer.play($.qtPlayerObj.songdata.file);
302					} else {
303						if( 'radio' === $.qtPlayerObj.songdata.type && 'file_hold' === $.qtPlayerObj.songdata.file ){
304							$.qtPlayerObj.songdata.file = $.qtPlayerObj.songdata.file_hold;
305							// FIX-2021-06-16_01 - set volume fix after change track
306							// fix issue when after pause the feed doesn't restart
307							$.qtmplayerRadioFeedObj.fn.pushFeed( $.qtPlayerObj.songdata );
308
309						}
310						
311						// console.log( $.qtPlayerObj.songdata );
312						if('undefined' !== typeof($.qtMplayerStats)){
313							$.qtMplayerStats.sendHit( $.qtPlayerObj.songdata );
314						}
315
316						$.qtSMPO.smPause();
317						$.qtSMPO.smPlay();
318					}
319					// FIX-2021-06-16_02 - set volume fix after change track
320					setTimeout(
321						function(){
322							if($.qtPlayerObj.masterVolume !== 100){
323								var mvol = $.qtPlayerObj.masterVolume;
324								$.qtPlayerObj.uniPlayer.setVolume( mvol );
325								$("[data-qtmplayer-vball]").css({'top': 100 - mvol});
326								$("[data-qtmplayer-vfill]").css({'height':mvol+'%'});
327							}
328						}, 300
329					);
330					$.qtPlayerObj.playing = true;
331				}
332			},
333			seek: function(p){ // p = percentage
334				if(isNaN(p)){
335					return;
336				}
337				p = parseFloat(p);
338				if(p > 100){
339					p = 100;
340				}
341				if($.qtPlayerObj.isSoundApi === true){
342					$.qtWebApiPlayer.seek(p);
343				} else {
344					$.qtSMPO.smSeek(p);
345				}
346			},
347			seekTime: function(t){
348				if(t === '00:00'){
349					t = '00:00:00';
350				}
351				if($.qtPlayerObj.isSoundApi === true){
352					$.qtWebApiPlayer.seekTime(t);
353				} else {
354					$.qtSMPO.smSeekTime(t);
355				}
356			},
357			setVolume: function(v){
358				// console.log(v);
359				$.qtPlayerObj.masterVolume = v;
360				if($.qtPlayerObj.isSoundApi === true){
361					$.qtWebApiPlayer.setvolume(v / 100);
362				} else {
363					$.qtSMPO.sm.setVolume(v);
364				}
365			}
366		},
367
368
369		/**
370		 * ================================================================
371		 * 
372		 * [interface functions controlling interaction and visual feedback]
373		 * @type {Object}
374		 *
375		 * ================================================================ 
376		 */
377		interface: {
378			window: $(window),
379			body: $("body"),
380			htmlAndbody: $('html,body'),
381			player: $('#qtmplayer'),
382			controls: $('#qtmplayer-controls'),
383			qtmplayer: $('#qtmplayer-playlistcontainer'),
384			playlist: $("#qtmplayer-playlist ul"),
385			grooveadv:  $('#qtMplayerTadv'), // music cue
386			buffer:  $('#qtMplayerBuffer'), // buffer
387			progWave:  $('#qtMplayerprogWave'), // buffer
388			advance: $("#qtMplayerTadv"),
389			btnPlay: $("[data-qtmplayer-playbtn]"), // $("#qtmplayerPlay"),
390			control: $("#qtmplayerTrackControl"),
391			minicue: $("#qtMplayerMiniCue"),
392			minicueT: $("#qtMplayerPlaylistTrackMinicue"),
393			trackAdvance: $("#qtmplayerTrackAdv"),
394			time: $("#qtmplayerTime"),
395			autoplay: $('#qtmplayer').data('autoplay'),
396			artwork: $('#qtmplayer').data('artwork'),
397			dragging: false,
398			vdragging: false,
399			debug: function(msg){
400				$("#qtmplayerDebug").prepend(msg+'<br>');
401			},
402			doSpinner: function(state, content){
403				var notif = $('[data-qtmplayerNotif]');
404				notif.html(content);
405				if( true === state ){ 
406					notif.addClass("active qtmplayer-spinner"); 
407				} else {
408					notif.removeClass("active").removeClass("qtmplayer-spinner"); 
409				}
410			},
411			preloadTrack: function(qtmpid){
412				var p = $.qtPlayerObj,
413					i = p.interface;
414				p.interface.doSpinner(true);
415
416				// Since 3.9.4 preload custom track // still in alpha (incomplete function)
417				var firstTrack = "li:first-child";
418				// if( false !== qtmpid ){
419				// 	console.log(qtmpid) ;
420				// 	firstTrack = 'li[data-qtmplayer-qtmpid="'+qtmpid+'"]';
421				// }
422
423				i.playlist.find(firstTrack + " .qtmplayer-play-btn").each(function(i,c){
424					var trk = $(c),
425						q = 'qtmplayer-';
426
427					p.songdata = {};
428					$.each(trk.data() , function(i,c){
429						var newKey = i.replace("qtmplayer", "").toLowerCase();
430						p.songdata[newKey] = c;
431					});
432
433
434					$('.qtmplayer-played').removeClass('qtmplayer-played');
435					trk.closest(".qtmplayer-trackitem").addClass("qtmplayer-played");
436					var c = $.qtPlayerObj.interface.controls,
437						ot = false;
438					if(qtShowPlayer){
439						p.interface.showhide();
440					}
441
442
443					if(p.interface.deployTrack()){
444						if(p.interface.autoplay){
445							setTimeout(
446								p.uniPlayer.play, 
447								2200
448							);
449						}
450					}
451				});
452			},
453
454			isMobile: function(){
455				return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) || $(window).width() < 1170 ;
456			},
457
458
459			deployTrack: function(autoplay){
460				var o = $.qtPlayerObj,
461					i = o.interface,
462					hd = i.controls,
463					dt = o.songdata,
464					mp = i.qtmplayer,
465					durtime = $("#qtmplayerDuration"),
466					cartlink,
467					cartbt = hd.find('.qtmplayer__cart'),
468					cur_url = window.location.href,
469					wc_params = '',
470					wc_classes = '',
471					params, // for URL
472					params_str; // for URL
473				if(dt.file == ''){
474					return;
475				}
476
477				
478				if(true === qtMplayerisMobile && $.qtPlayerObj.songdata.file_mobile && screen.width <= 1119 ){
479					$.qtPlayerObj.songdata.file = $.qtPlayerObj.songdata.file_mobile;
480				}
481
482				// console.log( 'Is mobile? ' + qtMplayerisMobile + screen.width );
483
484
485				i.doSpinner(true);
486
487				if(false == qtInitialized){
488					setTimeout(
489						i.doSpinner, 
490						1000
491					);
492				}
493
494				$.qtPlayerObj.interface.waveformAdvance = false;
495
496				if( 'radio' === dt.type ){
497					i.minicue.hide();
498					i.buffer.hide();
499					i.trackAdvance.hide();
500					durtime.hide();
501					i.control.addClass('qtmplayer-is-radio');
502					$('#qtmplayerTrackControl canvas').remove();
503					if( $.qtmplayerRadioFeedObj ){
504						$.qtPlayerObj.songdata.callBack = false;
505						if( $.qtPlayerObj.interface.artwork ){
506							$.qtPlayerObj.imgCover = $.qtPlayerObj.interface.controls.find('.qtmplayer__cover img');
507							var original = $.qtPlayerObj.imgCover.attr('src');
508							if( original ){
509								$.qtPlayerObj.imgCover.attr('data-fallback', original);
510							}
511							$.qtPlayerObj.interface.controls.find('.qtmplayer__cover img').attr('data-fallback', original);
512							$.qtPlayerObj.songdata.callBack = $.qtPlayerObj.uniPlayer.radioFeedCallback;
513						}
514						$.qtmplayerRadioFeedObj.fn.pushFeed( $.qtPlayerObj.songdata );
515					}
516				} else {
517					i.control.removeClass('qtmplayer-is-radio');
518					if( $.qtmplayerRadioFeedObj ){
519						$.qtmplayerRadioFeedObj.fn.stopFeed();
520					}
521
522					i.minicue.show();
523					i.buffer.show();
524					i.trackAdvance.show();
525					durtime.show();
526					if( false === i.isMobile() ){
527						var comp = new RegExp(location.host);
528						try {
529							if(comp.test( dt.file ) && 'function' === typeof(qtDrawAudio)){
530								qtDrawAudio(dt.file);
531								$.qtPlayerObj.interface.waveformAdvance = $('#qtwaveformClone');
532							} else {
533								$('#qtmplayerTrackControl canvas').remove();
534							}
535						} catch(e){
536							console.log(e);
537						}
538					}
539				}
540
541				if(dt.buylink == '' || dt.buylink == 'undefined' || typeof(dt.buylink) === 'undefined'){
542					cartbt.css({'opacity':0, 'pointer-events': 'none'});
543				} else {
544					cartbt.css({'opacity':1, 'pointer-events': 'initial'});
545				}
546
547
548				$('.qtmplayer__actions .added_to_cart.wc-forward').remove();
549
550				if( dt.link !== ''){
551					hd.find('.qtmplayer__title').html('<a href="'+dt.link+'"><strong>'+dt.title+'</strong></a> ');
552				} else {
553					hd.find('.qtmplayer__title').html(dt.title);
554				}
555
556
557				hd.find('.qtmplayer__artist').text(dt.artist);
558				if(typeof( dt.album ) !== 'undefined' && dt.album !== ''){
559					hd.find('.qtmplayer__title').append('['+dt.album+']');
560				}
561				hd.find('.qtmplayer__cover').attr("href", dt.link);
562				// WooCommerce support added
563				cartbt.addClass('qtmplayer__disabled');
564				cartbt.off('click');
565				if(dt.buylink !== ''){
566					cartbt.removeClass('qtmplayer__disabled');
567					// WooCommerce
568					cartlink = dt.buylink;
569					if('undefined' !== typeof( dt.buylink )) { 
570						dt.buylink = dt.buylink.toString(); 
571						if (dt.buylink.match(/^-?\d+$/)) { // is a numeric ID
572							params = { "add-to-cart":dt.buylink };
573							params_str = jQuery.param( params );
574							if(cur_url.indexOf('?') != -1) {
575								cartlink = cur_url+"&"+params_str;
576							}else{
577								cartlink = cur_url+"?"+params_str;
578							}
579							// Extra cart classes and attrs
580							wc_classes = ' product_type_simple add_to_cart_button ajax_add_to_cart ';
581							cartbt.attr("href", cartlink).attr('data-quantity','1').attr('data-product_id', dt.buylink).addClass(wc_classes).show();
582						} else {
583							cartbt.attr("href", dt.buylink).removeClass('product_type_simple').removeClass('add_to_cart_button').removeClass('ajax_add_to_cart').show();
584						}
585
586						// PR.6.3.0
587						// If link is another domain, add target _blank, or remove it
588						var linkUrl  = new URL( cartlink );
589						if( linkUrl.host === window.location.host && ! $('body').hasClass('qtmplayer--page-popup') ){
590							cartbt.attr('target', '');
591						} else {
592							cartbt.attr('target', '_blank');
593						}
594					}
595
596					
597
598
599					if(dt.icon == 'download') {
600						dt.icon = 'file_download';
601					} 
602					cartbt.show();
603				} else {
604					cartbt.hide();
605					cartbt.removeClass('product_type_simple').removeClass('add_to_cart_button').removeClass('ajax_add_to_cart');
606				}
607
608				
609				
610		
611
612				cartbt.find('i').html(dt.icon);
613
614				i.advance.width(0);
615
616				if( false !== i.waveformAdvance && "undefined" !== typeof(i.waveformAdvance) ){
617					i.waveformAdvance.css({
618						"clip-path": "polygon(0 0, 0% 0, 0% 100%, 0% 100%)"
619					});
620				}
621
622
623				i.buffer.width(0);
624				if(dt.cover !== '' && dt.cover !== undefined){
625					mp.find('.qtmplayer__album img').attr("src", dt.cover).show();
626					hd.find('.qtmplayer__cover img').attr("src", dt.cover).show();
627					hd.find('.qtmplayer__bgimg').css({"background-image": 'url('+dt.cover+')' });
628				} else {
629					mp.find('.qtmplayer__album img').hide();
630					hd.find('.qtmplayer__cover img').hide();
631					hd.find('.qtmplayer__bgimg').css({"background-image": 'none' });
632				}
633				mp.find('.qtmplayer-albumlink').attr("href",dt.link);
634				if(qtShowPlayer){
635					i.showhide();
636				}
637
638
639
640
641				i.btnPlayClick();
642				i.playTrack();
643				if(autoplay){
644					o.uniPlayer.play();
645				}
646				return true;
647			},
648			btnPlaySetup: function(dt){
649				var state = 'pause', 
650					o = $.qtPlayerObj,
651					i = o.interface,
652					b = i.btnPlay,
653					p = o.uniPlayer;
654
655				b.off("click");
656				b.on("click", function(e){
657					e.preventDefault();
658					state = b.find("i").html();
659					if(state === 'pause'){
660						$(".qtmplayer-played .qtmplayer-play-btn").click();
661					} else {
662						$('#qtmplayer-playlist li:first-child').find(".qtmplayer-play-btn").click();
663					}
664				});
665			},
666			/**
667			 * Questa funzione è probabilmente inutile adesso
668			 */
669			btnPlayClick: function(){
670
671				var state = 'pause', 
672					o = $.qtPlayerObj,
673					i = o.interface,
674					b = i.btnPlay,
675					p = o.uniPlayer;
676				b.off("click");
677				b.on("click", function(e){
678					e.preventDefault();
679					// state = b.find("i").html();
680					state = b.find("i.material-icons").html();
681					if(state === 'pause'){
682						p.pause();
683					} else {
684
685						
686
687						if(false == qtInitialized){
688							i.doSpinner(true);
689							i.initializeAudio();
690							if( true === $.qtPlayerObj.ProRadioUserManagerIntegration.shouldBlock() ){
691								i.doSpinner(false);
692								return;
693							}
694							qtPlayIsAllowed = true;
695							setTimeout(
696								p.play, 
697								200
698							);
699						} else {
700							if( true === $.qtPlayerObj.ProRadioUserManagerIntegration.shouldBlock() ){
701								i.doSpinner(false);
702								return;
703							}
704							qtPlayIsAllowed = true;
705							p.play();
706						}
707					}
708					return true;
709				});
710			},
711			playTrack: function(){
712				var p = $.qtPlayerObj,
713					i = p.interface,
714					u = p.uniPlayer;
715				i.body.off("click", ".qtmplayer-play-btn");
716				i.body.on("click", ".qtmplayer-play-btn", function(e){
717					e.preventDefault();		
718
719
720					
721
722					qtPlayIsAllowed = true;
723					i.doSpinner(true);
724					var tr = $(this),
725						item = tr.closest(".qtmplayer-trackitem"),
726						isDonut = item.hasClass("qtmplayer-donut"),
727						icon = tr.find("i"),
728						clickedsong = tr.attr('data-qtmplayer-file'),
729						playedclass = "qtmplayer-played",
730						playedtrack = i.body.find("."+playedclass),
731						iplay =  "dripicons-media-play",
732						ipause = "dripicons-media-pause";
733					if(item.hasClass(playedclass) && tr.find('i').html() === 'pause'){
734						i.switchicon(icon, 'play');
735						item.removeClass(playedclass);
736						i.switchicon(playedtrack.find('.qtmplayer-play-btn i.material-icons'), 'play');
737						u.pause();
738						e.stopPropagation();
739						return;
740					} else {
741						// Check if is the same track. If yes pause, if not stop the first play the second
742						// update 2019 05 22
743						if(clickedsong === p.songdata.file) {
744							if(playedtrack.length > 0){
745
746								if(p.uniPlayer.btnPlay.find("i.material-icons").html() === 'pause'){
747									playedtrack.removeClass(playedclass);
748									i.switchicon(playedtrack.find('.qtmplayer-play-btn i.material-icons'), 'play');
749									u.pause();
750									e.stopPropagation();
751									return;
752								} else {
753									u.pause();
754									i.switchicon(playedtrack.find('.qtmplayer-play-btn i.material-icons'), 'play');
755									playedtrack.removeClass(playedclass);
756								}
757
758							}
759						} else {
760							i.switchicon(playedtrack.find('.qtmplayer-play-btn i.material-icons'), 'play');
761							playedtrack.removeClass(playedclass);
762							i.justStop();
763							u.pause();
764						}
765					
766
767						if( undefined === tr.data("qtmplayer-type") ){
768							tr.data("qtmplayer-type", 'track');
769						}
770
771
772						// 2019 12 29 new faster remapping of data
773						p.songdata = {};
774						
775						$.each(tr.data() , function(i,c){
776							var newKey = i.replace("qtmplayer", "").toLowerCase();
777							p.songdata[newKey] = c;
778						});
779
780						
781						i.deployTrack();
782
783						if( true === $.qtPlayerObj.ProRadioUserManagerIntegration.shouldBlock() ){
784							return;
785						}
786
787						i.seekBtn();
788						i.switchicon(icon, 'pause');
789						item.addClass(playedclass);
790						if($("#qtdonut").length > 0){
791							$("#qtdonut").removeAttr("id");
792						}
793						if(isDonut){
794							item.attr("id", "qtdonut");
795							$.qtMplayerPlaylistCue.destroy();
796							if( 'track' === p.songdata.type){
797								$.qtRaphaelCircle.init();
798							}
799						} else {
800							if( 'track' === p.songdata.type){
801								$.qtMplayerPlaylistCue.init();
802							}
803						}
804
805
806						// safe initialization
807						if(false == qtInitialized){
808							i.initializeAudio();
809							i.doSpinner(true);
810
811
812
813							setTimeout(
814								u.play, 
815								2200
816							);
817						} else {
818							u.play();
819						}
820
821						// u.play();
822					}
823					e.stopPropagation();
824				});
825			},
826			
827			switchicon: function(i, state) {
828				if(state === 'play'){
829					i.html('play_arrow');
830				} else if (state === 'pause') {
831					i.html('pause');
832				}
833			},
834			progressUpdate: function(perc){ // buffered
835				var i = $.qtPlayerObj.interface,
836					p = perc * 100;
837				i.buffer.css({width: p+'%'});
838				i.minicue.addClass('actvd');
839				
840			},
841			timeupdate: function(perc, time){
842				var i = $.qtPlayerObj.interface,
843					p = perc * 100;
844				i.advance.css({
845					width: (p)+'%',
846					'transition':'width 0.3s',
847				});
848				if(false !== i.waveformAdvance && "undefined" !== typeof( i.waveformAdvance ) ){
849					i.waveformAdvance.css({
850						'transition':'clip-path 0.3s',
851						"clip-path": "polygon(0 0, "+(p)+"% 0, "+(p)+"% 100%, 0% 100%)"
852					});
853				}
854				i.time.html(time);
855				if(perc > 0.001){
856					i.doSpinner();
857					setTimeout(
858						i.doSpinner, 
859						300
860					);
861				}
862				if($('#qtMplayerprogWave')){
863					$('#qtMplayerprogWave').css({width: (p)+'%'});
864				}
865				if(i.dragging === false) {
866				
867					i.minicue.css({
868						'transition':'left 0.3s',
869						"left": (p)+'%'
870					});
871				}
872			},
873			seekBtn: function(){
874				var o = $.qtPlayerObj,
875					i = o.interface,
876					c = i.control,
877					m = i.minicue,
878					ol = c.offset().left,
879					w = c.outerWidth(),
880					t = (o.songdata.type == 'radio') ? 'radio' : 'track',
881					l,
882					active = false,
883					currentX, currentY, initialX, initialY,
884					xOffset = 0;
885					yOffset = 0;
886					dragItem = m;
887				c.off("touchstart").off("touchend").off('touchmove').off('mousedown').off('mouseup').off('mouseleave').off('mousemove');
888				if(t === 'radio') {
889					m.css({'left': 0});
890				} else {
891					c.on("touchstart", dragStart);
892					c.on("touchend", dragEnd);
893					c.on("touchmove", drag);
894					c.on("mousedown", dragStart);
895					c.on("mouseup", dragEnd);
896					c.on("mouseleave", dragEnd);
897					c.on("mousemove", drag);
898					function dragStart(e) {
899						i.dragging = true; 
900						active = true;
901						m.addClass('qtmplayer-touch');
902					}
903					function dragEnd(e) {
904						i.dragging = false;
905						active = false;
906						m.removeClass('qtmplayer-touch');
907					}
908					function drag(e) {
909						ol = c.offset().left;
910						w = c.outerWidth();
911						if (e.type === "touchmove") {
912							l = e.originalEvent.touches[0].pageX - ol;
913						} else {
914							l = e.clientX - ol;
915						}
916						if(active){
917							relocate(l);
918						}
919					}
920					function relocate(l){
921						var p = l / w;
922						if( p < 0 || p > 99.9 ){
923							return;
924						}
925						m.css({'left': l});
926						o.uniPlayer.seek(p * 100);
927					}
928				}
929			},	
930			appendAlbum: function(){
931				var p = $.qtPlayerObj,
932					i = p.interface,
933					c = i.controls,
934					cartlink,
935					cur_url = window.location.href,
936					wc_params = '',
937					wc_classes = '',
938					params, // for URL
939					params_str, // for URL
940					ot = false, // timeout
941					notif = $('[data-qtmplayerNotif]');
942					i.body.on("click", "[data-qtmplayer-addrelease]", function(e){
943					e.preventDefault();
944					var that = $(this),
945						url = that.data("qtmplayer-addrelease"),
946						playnow = that.data("playnow"),
947						latestAdded = 'qtmplayer-latestadded';
948					if(that.data("qtmplayer-addrelease") == '0'  || that.hasClass("disabled")){
949						return;
950					}
951					$.getJSON(url, function( data ) {
952						var newitem,
953							special_action,
954							tn = data.length;
955						$.each( data, function( key, val ) {
956							// WooCommerce
957							cartlink = val.buylink;
958							if (val.buylink.match(/^-?\d+$/)) { // is a numeric ID
959								params = { "add-to-cart":val.buylink };
960								params_str = jQuery.param( params );
961								if( cur_url) {
962									if( cur_url.indexOf("?")>= 0 ) {
963										cartlink = cur_url+"&"+params_str;
964									}else{
965										cartlink = cur_url+"?"+params_str;
966									}
967								}
968								// Extra cart classes and attrs
969								wc_classes = ' product_type_simple add_to_cart_button ajax_add_to_cart ';
970								wc_params = ' data-quantity="1" data-product_id="'+ val.buylink +'" ';
971							}
972							special_action = '<i class="material-icons">'+val.icon+'</i>';
973							if( typeof(val.price) !== 'undefined'){
974								if (val.price !== ''){
975									special_action = '<span class="qtmplayer-price qtmplayer-btn qtmplayer-btn-xs qtmplayer-btn-primary">'+val.price+'</span>';
976								}
977							}
978							newitem = '<li class="qtmplayer-trackitem dynamic">';
979							if(val.cover !== ''){
980								newitem += '<img src="'+val.cover+'">';
981							}
982							newitem += '<span class="qtmplayer-play qtmplayer-link-sec qtmplayer-play-btn '+latestAdded+'" data-qtmplayer-type="track" data-qtmplayer-cover="'+val.cover+'" data-qtmplayer-price="'+val.price+'" data-qtmplayer-file="'+val.file+'" data-qtmplayer-title="'+val.title+'"'+'data-qtmplayer-artist="'+val.artist+'"'+'data-qtmplayer-album="'+val.album+'" data-qtmplayer-link="'+val.link+'" data-qtmplayer-buylink="'+val.buylink+'" data-qtmplayer-icon="'+val.icon+'"><i class="material-icons">play_arrow</i></span><p>	<span class="qtmplayer-tit">'+val.title+'</span><br>	<span class="qtmplayer-art">'+val.artist+'</span></p><a href="'+cartlink+'" '+wc_params+' class="qtmplayer-cart '+ wc_classes +'" target="_blank">'+special_action+'</a></li>';
983							i.playlist.append(newitem);
984							if(0 === key && playnow){
985								$.qtPlayerObj.interface.justStop();
986								$.qtPlayerObj.uniPlayer.pause();
987								p.songdata = val;
988								$("."+latestAdded).click();
989							}
990							latestAdded = '';
991						});
992						i.showhide();
993						if(that.data("clickonce") === 1){
994							that.hide();
995							
996							$(that.data("notificate")).addClass("active");
997
998						} else {
999							that.addClass('disabled');
1000							
1001						}
1002						notif.addClass("wait").delay(1500).promise().done(function(){
1003							notif.removeClass("wait");
1004						});
1005						// Disable the functionality
1006						that.attr("data-qtmplayer-addrelease", '0');
1007					});
1008				});
1009			},
1010			showhide: function(){
1011				var c = $.qtPlayerObj.interface.controls;
1012				c.addClass('open');
1013				ot = setTimeout(function() {
1014					c.removeClass('open');
1015					clearTimeout(ot);
1016				}, 4000);
1017			},
1018			prevNext: function(){
1019				$.qtPlayerObj.interface.controls.on("click",".qtmplayer__prev, .qtmplayer__next", function(e){
1020					e.preventDefault();
1021					var t = $(this), b;
1022					$.qtPlayerObj.interface.doSpinner(true);
1023					if(t.data("control") === "prev"){
1024						b = $(".qtmplayer-played").prev();
1025					} else {
1026						b = $(".qtmplayer-played").next();
1027					}
1028					b.find(".qtmplayer-play-btn").click();
1029				});
1030			},
1031			next: function(){
1032				var i = $.qtPlayerObj.interface,
1033					nt = $(".qtmplayer-played").next();
1034				if(nt !== undefined){
1035					if(nt.length > 0){
1036						nt.find(".qtmplayer-play-btn").click();
1037					} else {
1038						i.justStop();
1039					}
1040				} else {
1041					i.justStop();
1042				}
1043			},			
1044			justStop: function(){
1045				$.qtPlayerObj.interface.switchicon($(".qtmplayer-played .qtmplayer-play-btn i.material-icons"), 'play');
1046				$.qtPlayerObj.uniPlayer.btnPlay.find("i.material-icons").html("play_arrow");
1047			},
1048			skipCue: function(){
1049				var o = $.qtPlayerObj,
1050					i = o.interface
1051					b = i.btnPlay,
1052					p = o.uniPlayer;
1053				i.body.on('click', '[data-qtplayercue]',function(){
1054					var t = $(this),
1055						k = t.data('qttrackurl'),
1056						c = t.data('qtplayercue');
1057
1058					if("undefined" === typeof( o.songdata.type )) {
1059						return;
1060					}
1061					if(o.songdata.file === k) {
1062						if( $.qtPlayerObj.playing ) {
1063							o.uniPlayer.seekTime(c);
1064						} else {
1065							if(false == qtInitialized){
1066								i.doSpinner(true);
1067								i.initializeAudio();
1068								qtPlayIsAllowed = true;
1069								setTimeout(
1070									p.play, 
1071									200
1072								);
1073							} else {
1074								qtPlayIsAllowed = true;
1075								p.play();
1076							}
1077						}
1078					} else {
1079						console.log('Not this track');
1080					}
1081				});
1082			},
1083			volBtn: function(){
1084				var o = $.qtPlayerObj,
1085					i = o.interface,
1086					c = $("[data-qtmplayer-vcontrol]");
1087				if( 0 === c.length ){ return; }
1088				var	ol = c.offset().top,
1089					w = c.outerHeight(),
1090					ct = $("[data-qtmplayer-vtrack]"), // cue
1091					f = $("[data-qtmplayer-vfill]"), // fill
1092					m = $("[data-qtmplayer-vball]"), // fill
1093					off = c.offset().top,
1094					h =  c.height(),
1095					vi = $('[data-qtmplayer-vicon]'),
1096					t, // top
1097					p = 100, // percentage
1098					tp = 100, // volume before muting to unmute
1099					d; // delta
1100				c.on("touchstart", vdragStart);
1101				c.on("touchend", vdragEnd);
1102				c.on("touchmove", vdrag);
1103				c.on("mousedown", vdragStart);
1104				c.on("mouseup", vdragEnd);
1105				c.on("mouseleave", vdragEnd);
1106				c.on("mousemove", vdrag);
1107				var vactive = false;
1108				var vcurrentX;
1109				var vcurrentY;
1110				var vinitialX;
1111				var vinitialY;
1112				var vxOffset = 0;
1113				var vyOffset = 0;
1114				var vdragItem = m;
1115				function vdragStart(e) {
1116					i.vdragging = true; 
1117					vactive = true;
1118					m.addClass('qtmplayer-touch');
1119				}
1120				function vdragEnd(e) {
1121					i.vdragging = false;
1122					vactive = false;
1123					m.removeClass('qtmplayer-touch');
1124				}
1125				function vdrag(e) {
1126					off = c.offset().top - $(window).scrollTop();
1127					if(vactive){
1128						ol = c.offset().top;
1129						w = c.outerHeight();
1130						if (e.type === "touchmove") {
1131							l = off - e.originalEvent.touches[0].pageY;
1132						} else {
1133							l = off - e.clientY;
1134						}
1135						vrelocate(100 - Math.abs(l) );
1136					}
1137
1138
1139				}
1140				function vrelocate(l){
1141					if(l < 0 ){
1142						l = 0;
1143					}
1144					if(l > 95 ){
1145						l = 100;
1146					}
1147					m.css({'top': 100 -l});
1148					p = l;
1149					f.css({'height':p+'%'});
1150					$.qtPlayerObj.uniPlayer.setVolume(p);
1151
1152					$('[data-proradio-volumeslider]').val(p)
1153
1154					var vi = $('[data-qtmplayer-vicon]');
1155					if(p > 1){
1156						if(p < 50){
1157							vi.html('volume_down');
1158						} else {
1159							vi.html('volume_up');
1160						}
1161					} else {
1162						vi.html('volume_off');
1163					}
1164				}
1165				$('body').on('click','[data-qtmplayer-vicon]', function(e){
1166					e.preventDefault();
1167					
1168					if(p > 1){
1169						tp = p;
1170						vrelocate(0);
1171					} else {
1172						vrelocate(tp);
1173					}
1174					e.stopPropagation();
1175				});
1176				// Boot setup start volume
1177				var mvol = $.qtPlayerObj.masterVolume;
1178				if(mvol !== 100){					
1179					$.qtPlayerObj.uniPlayer.setVolume( mvol );
1180					vrelocate(mvol);
1181				}
1182			},
1183			setDuration: function(text){
1184				if(text === 'NaN:NaN' || text === '00:00'){
1185					$("#qtmplayerDuration").html();
1186					return;
1187				}
1188				$("#qtmplayerDuration").html(text);
1189			},
1190			bufferStart: function(){
1191				
1192				$("#qtmplayerDuration").html('...');
1193				$("#qtmplayer-buffer").show();
1194				$('#qtMplayerMiniCue,  #qtMplayerTadv').animate({'opacity':1}, 'fast' ).css({'pointer-events': 'none'});
1195			},
1196			bufferEnd: function(){
1197				$("#qtmplayer-buffer").hide();
1198				var returnAlive = setTimeout(function(){
1199					$('#qtMplayerMiniCue, #qtMplayerTadv').css({'pointer-events': 'all'});
1200				}, 300);
1201				
1202			},
1203			screenResize: function(){
1204				var resizeTimer,
1205					o = $.qtPlayerObj,
1206					i = o.interface,
1207					w = i.window,
1208					ww = w.width(),
1209					wh = w.height();
1210				w.on('resize', function() {
1211					clearTimeout(resizeTimer);
1212					resizeTimer = setTimeout(function() {
1213						if (w.width() !== ww || w.height() !== wh) {
1214							i.seekBtn();
1215							$.qtMplayerPlaylistCue.init();
1216						}
1217						
1218					}, 100);
1219				});
1220			},
1221			initializeAudio: function() {
1222				var o = $.qtPlayerObj,
1223				i = o.interface;
1224				i.doSpinner(true);
1225				if(qtAnalyzer){
1226					var hasAudioContext = false;
1227					try {
1228						hasAudioContext = window.AudioContext || window.webkitAudioContext;
1229					} catch(e) {
1230						if($.qtSMPO.init()){
1231							qtInitialized = true;
1232							return true;
1233						};
1234					}
1235					if(hasAudioContext !== false){
1236						o.isSoundApi = true;
1237						if($.qtWebApiPlayer.init()){
1238							qtInitialized = true;
1239							return true;
1240						}
1241					}
1242				} else {
1243					if($.qtSMPO.init()){
1244						qtInitialized = true;
1245						return true;
1246					};
1247				}
1248			},
1249			resumeAudioOld: function(){
1250				var o = $.qtPlayerObj,
1251					i = o.interface;
1252				i.initializeAudio(); // Appply new fixes
1253				qtPlayIsAllowed = true;
1254				if(i.autoplay){
1255					setTimeout(
1256						o.uniPlayer.play, 
1257						2200
1258					);
1259					
1260				}
1261				document.removeEventListener("click", i.resumeAudio);
1262			},
1263			resumeAudio: function(){
1264				// this seems to break the player by creating sometimes a parallel audio instance
1265				// return;
1266
1267				var o = $.qtPlayerObj,
1268					i = o.interface;
1269				i.log("resumeAudio A");
1270				i.initializeAudio(); // Appply new fixes
1271				qtPlayIsAllowed = true;
1272				if(i.autoplay){
1273					i.log("resumeAudio B");
1274					setTimeout(
1275						function(){ 
1276							i.btnPlay.click(); 
1277							i.log("resumeAudio A1");
1278							setTimeout(
1279								function(){ 
1280									i.log("resumeAudio AB");
1281									if(false === i.isMobile()){
1282										i.log("resumeAudio AB 0");
1283									} else {
1284										i.btnPlay.click();
1285										i.log("resumeAudio AB 1");
1286									}
1287								},
1288								10
1289							);
1290						},
1291						2200
1292					);					
1293				}
1294				i.log("resumeAudio C");
1295				document.removeEventListener("click", i.resumeAudio);
1296			
1297
1298			},
1299			triucco: function(){
1300				var b = $('body'),
1301					i = $.qtPlayerObj.interface,
1302					t; 
1303				$('#qtmusicplayer').addClass('qt-mplayer-mobile');
1304				i.initializeAudio(); 
1305				i.resumeAudio();
1306				b.addClass("qt-mplayer-enabled");
1307				i.log('mobile player enabled');
1308				setTimeout(
1309					function(){
1310						i.doSpinner();
1311					}, 
1312					1200
1313				);
1314				
1315			},
1316			log: function(m){
1317				var c = $("#qtmPlayerDebugger");
1318				if(c.length > 0){
1319					c.append(m+'<br>');
1320				}
1321			},
1322
1323		},
1324		initPlayer: function(){
1325			if(qtPlayDebug){
1326				$('#qtmplayer-playlist').append('<div class="qtmplayer__debugger" id="qtmPlayerDebugger"><h5>Player Debug</h5></div>');
1327			}
1328			var o = $.qtPlayerObj,
1329				i = o.interface,
1330				c = i.controls,
1331				b = i.body,
1332				ot; 
1333			o.songdata = {};
1334			b.addClass("qtmplayer-enabled");
1335			$(document).on("click", "[data-playlistopen]", function(){
1336				b.toggleClass("qtmplayer-openplaylist");
1337			});
1338			b.on("click", "[data-playeropen]", function(){
1339				b.toggleClass("qtmplayer-open");
1340			});
1341			c.find('.qtmplayer__cover').html('<img src="">');
1342			i.qtmplayer.find('.qtmplayer__album').prepend('<img src="">');
1343
1344			if( qtMplayerisMobile ){
1345				i.triucco();
1346
1347			} 	else {
1348				b.addClass("qt-mplayer-enabled");
1349			}
1350
1351			i.preloadTrack(false);
1352			i.prevNext();
1353			i.appendAlbum();
1354			i.seekBtn();
1355			i.volBtn();
1356			i.bufferEnd();
1357			i.skipCue();
1358			i.screenResize();
1359			c.mouseenter(function(){
1360				c.addClass('open');
1361				i.seekBtn();
1362				clearTimeout(ot);
1363			}).mouseleave(function(){				
1364				ot = setTimeout(function() {
1365					c.removeClass('open');
1366				}, c.data('hidetimeout'));
1367			});
1368
1369			$('body').one('click', function(e) {
1370				// console.log('Autoplay test2');
1371				var target = $(e.target).closest('a');
1372				if(target){
1373					// not('.qtmplayer__play, .qtmplayer-play, .proradio-btn--playmenu')
1374					if(target.hasClass('qtmplayer__play') || target.hasClass('qtmplayer-play') || target.hasClass('proradio-btn--playmenu')){
1375						return;
1376					}
1377				}
1378				var closest = $(e.target).closest('a');
1379				if(closest){
1380					if(closest.hasClass('qtmplayer__play') || closest.hasClass('qtmplayer-play') || closest.hasClass('proradio-btn--playmenu')){
1381					 		return;
1382					}
1383				}
1384				// console.log( $(e.target).closest('a').attr('class') );
1385				if( $.qtPlayerObj.hasDoneAutoplay === false && $.qtPlayerObj.interface.autoplay ){
1386				    setTimeout(function(){
1387				    	console.log('%c Pro.Radio player - do Autoplay! ', 'background: #030303; color: #bada55');
1388				    	$('#qtmplayerPlay').click();
1389				    	$.qtPlayerObj.hasDoneAutoplay = false;
1390				    }, 500);
1391				}
1392			});
1393
1394			$('body').on('change', '[data-proradio-volumeslider]', function() {
1395				let mvol = $(this).val();
1396				$.qtPlayerObj.uniPlayer.setVolume( mvol );
1397
1398				$("[data-qtmplayer-vball]").css({'top': 100 - mvol});
1399				$("[data-qtmplayer-vfill]").css({'height':mvol+'%'});
1400			});
1401			$('[data-proradio-volumeslider]').val( $.qtPlayerObj.masterVolume );
1402			
1403
1404			window.onresize = function(){
1405			    if($('body').hasClass('qtmplayer--page-popup')){
1406			    	window.resizeTo(380,560);
1407			    }
1408			}
1409		},
1410	};
1411
1412
1413	$(window).on('qtAjaxpageLoadEnd', function(){
1414		// If player is paused and we open a channel page, load the channel first
1415		if( $('.proradio-infoajax') ){
1416			if( $('.proradio-infoajax').data('proradio-posttype') == 'radiochannel' ){
1417				var pageId =  $('.proradio-infoajax').data('proradio-pageid');
1418				if( $.qtPlayerObj.playing == false ){
1419					if( $('*[data-qtmplayer-qtmpid="'+ pageId +'"]') ){
1420						$('*[data-qtmplayer-qtmpid="'+ pageId +'"]').click();
1421					}
1422				}
1423			}
1424		}
1425		// set volume 
1426		$('[data-proradio-volumeslider]').val( $.qtPlayerObj.masterVolume );
1427	});
1428
1429
1430	$(document).ready(function() {
1431		if(0 === $('#qtmplayer-playlist li').length ){
1432			return;
1433		}
1434		$.qtPlayerObj.initPlayer();
1435	});
1436
1437
1438
1439
1440})(jQuery);
1441
1442
1443
1444

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.