PageSourceSearch

https://www.asia-records.com.tw/templates/default/asset/html5audio/js/jquery.html5audio.func.js

js asia-records.com.tw collected 2026-10-06 17:12:30 UTC 45,988 bytes, 910 lines download raw bytes

1
2/* START PLAYER API */
3
4function api_playAudio(player){
5	if(player)player.playAudio(); 
6}
7function api_pauseAudio(player){
8	if(player)player.pauseAudio(); 
9}
10function api_toggleAudio(player){
11	if(player)player.toggleAudio(); 
12}
13function api_stopAudio(player){
14	if(player)player.stopAudio(); 
15}
16function api_checkAudio(player, action){
17	if(player)player.checkAudio(action);
18}
19function api_nextAudio(player){
20	if(player)player.nextAudio(); 
21}
22function api_previousAudio(player){
23	if(player)player.previousAudio(); 
24}
25function api_loadAudio(player, id){
26	if(player)player.loadAudio(id); 
27}
28function api_loadPlaylist(player, id){
29	if(player)player.loadPlaylist(id); 
30}
31function api_addTrack(player, type, format, tracks, pos){
32	if(player)player.addTrack(type, format, tracks, pos); 
33}
34function api_inputAudio(player, track){
35	if(player)player.inputAudio(track); 
36}
37function api_removeTrack(player, id){
38	if(player)player.removeTrack(id); 
39}
40function api_destroyAudio(player){
41	if(player)player.destroyAudio(); 
42}
43function api_destroyPlaylist(player){
44	if(player)player.destroyPlaylist(); 
45}
46function api_toggleShuffle(player){
47	if(player)player.toggleShuffle(); 
48}
49function api_toggleLoop(player){
50	if(player)player.toggleLoop(); 
51}
52function api_checkScroll(player){
53	if(player)player.checkScroll(); 
54}
55function api_reinitScroll(player){
56	if(player)player.reinitScroll(); 
57}
58function api_orderPlaylist(player, action, data){
59	if(player)player.orderPlaylist(action, data); 
60}
61
62
63/* GETTERS - SETTERS */
64function api_getVolume(player){
65	if(player)return player.getVolume(); 
66}
67function api_setVolume(player, val){
68	if(player)player.setVolume(val); 
69}
70function api_getAutoPlay(player){
71	if(player)return player.getAutoPlay(); 
72}
73function api_setAutoPlay(player, val){
74	if(player)player.setAutoPlay(val); 
75}
76function api_setTitle(player, val){
77	if(player)player.setTitle(val); 
78}
79function api_getSetupDone(player){
80	if(player)return player.getSetupDone(); 
81}
82function api_getPlaylistLoaded(player){
83	if(player)return player.getPlaylistLoaded(); 
84}
85function api_getPlaylistTransition(player){
86	if(player)return player.getPlaylistTransition(); 
87}
88function api_getMediaPlaying(player){
89	if(player)return player.getMediaPlaying(); 
90} 
91function api_getAudioInited(player){
92	if(player)return player.getAudioInited(); 
93} 
94function api_getMediaType(player){
95	if(player)return player.getMediaType(); 
96} 
97function api_getActiveItem(player){
98	if(player)return player.getActiveItem(); 
99} 
100function api_getPlaylistItems(player, value){
101	if(player)return player.getPlaylistItems(value); 
102} 
103function api_getMediaCount(player){
104	if(player)return player.getMediaCount(); 
105}
106function api_getPlaylistHidden(player){
107	if(player)return player.getPlaylistHidden(); 
108}
109function api_getPlaylistList(player){
110	if(player)return player.getPlaylistList();
111}
112function api_getPlaylistData(player){
113	if(player)return player.getPlaylistData(); 
114}   
115function api_getSoundId(player){
116	if(player)return player.getSoundId(); 
117}  
118
119/* END PLAYER API */
120
121
122/* START PLAYER CALLBACKS */
123			
124function audioPlayerSetupDone(instance, sound_id){
125	/* called when component is ready to use public API. Returns player instance, sound id. */
126	//console.log('audioPlayerSetupDone: ', sound_id);
127
128	if(sound_id == 'popup' || sound_id == 'classic_popup'){
129		instance.find('.popup_open').css({cursor:'pointer', display:'block'}).bind('click', function(){
130			open_popup(popup_url, popup_width, popup_height, resizable);
131			return false;
132		});
133	}else if(sound_id == 'circle_slideshow' || sound_id == 'bg_slideshow'){
134		loadImage();
135	}
136	
137	//remove hover if touch
138	if(sound_id == 'classic_single' || sound_id == 'classic' || sound_id == 'classic_white' || sound_id == 'classic_no_time' || sound_id == 'classic_full' || sound_id == 'classic_no_time_advance' || sound_id == 'classic_no_time_no_seekbar_advance' || sound_id == 'classic_min' || sound_id == 'classic_playlist' || sound_id == 'classic_popup' || sound_id == 'wall'|| sound_id == 'drag_to_play' || /wrap_multi/g.test(sound_id)){
139		if(instance.getTouch()){
140			instance.find('.controls_toggle').addClass('hap_no_hover');
141			instance.find('.player_volume').addClass('hap_no_hover');
142			instance.find('.controls_prev').addClass('hap_no_hover');
143			instance.find('.controls_next').addClass('hap_no_hover');
144			instance.find('.popup_open').addClass('hap_no_hover');
145		}
146	}
147	
148	
149	//create audio after component init!
150	if(typeof(hap_group) !== 'undefined'){
151		if(hap_group == 'wrap_multi' || hap_group == 'wrap_multi2'){
152			if(hap_group == 'wrap_multi2' && sound_id == 'wrap_multi2_selector') return;
153			
154			var track, type, mp3, ogg='', title, thumb, download, _item = jQuery(instance).closest('.playlistItem');
155			if(_item.attr('data-type') != undefined) type = _item.attr('data-type');
156			if(_item.attr('data-mp3') != undefined) mp3 = _item.attr('data-mp3');
157			if(type && mp3){
158				  if(_item.attr('data-ogg') != undefined) ogg = _item.attr('data-ogg');
159				  if(_item.attr('data-title') != undefined) title = _item.attr('data-title');
160				  if(_item.attr('data-thumb') != undefined) thumb = _item.attr('data-thumb');
161				  if(_item.attr('data-download') != undefined) download = _item.attr('data-download');
162				  
163				  //since we process each track from playlist selector, we want all types to be 'local' when using api_addTrack! (otherwise process track would fail for non local type because we would be trying to process already processed track, and there is no point in doing it once again). So we set local type just for the api_addTrack so the track gets added into the playlist without processing, then afterwards switch types! (maybe local type could be left for all types except youtube, whose playback is treated differently but we bring back original type for all types nevertheless)
164				  
165				  track = [{type: 'local', origtype:type, mp3: mp3, ogg: ogg, title: title, thumb: thumb, download: download}];
166				  //console.log(track);
167				  instance.addTrack('visible', 'data', track[0]);
168			}
169		}
170	}
171}
172function audioPlayerPlaylistLoaded(instance, sound_id){
173	/* called when playlist is loaded. Returns player instance, sound id. */
174	//console.log('audioPlayerPlaylistLoaded: ', sound_id);
175	
176	if(typeof(hap_group) !== 'undefined'){
177		if(hap_group == 'wrap_multi2' && sound_id == 'wrap_multi2_selector'){
178			makeHapPlayers(instance);
179		}
180	}
181	
182	if(sound_id == 'drag_text1' || sound_id == 'drag_thumb1'){
183		//make draggable from playlist selector into player playlist
184		instance.find("li[class*=hap_draggable]").draggable({
185			connectToSortable: ".hap_sortable",
186			helper: "clone",
187			revert: "invalid"
188		});
189	}
190	else if(sound_id == 'drag_text2' || sound_id == 'drag_thumb2'){
191		//console.log(jQuery("#playlist2").hasClass('ui-droppable'));
192		//action when item is dropped from playlist selector into player playlist
193		jQuery("#playlist2").droppable({
194			tolerance: "touch",
195			drop: function(event, ui) {
196			   //draggable item
197			   //console.log(jQuery(ui.draggable));
198			   var _item = jQuery(ui.draggable);
199			   //remove locked
200			   if(_item.hasClass('playlist_locked')){
201				   _item.removeClass('playlist_locked');
202			   }
203		   }
204		});
205	}
206	
207	//enable selector
208	if(jQuery("#hap_playlist").length)jQuery("#hap_playlist").selectbox("enable");
209}
210function audioPlayerPlaylistEnd(instance, sound_id){
211	/* called when current playlists reaches end. Returns player instance, sound id. */
212	//console.log('audioPlayerPlaylistEnd: ');
213} 
214function audioPlayerSoundEnd(instance, sound_id, counter){
215	/* called when current playing sound ends. Returns player instance, sound id, media counter. */
216	//console.log('audioPlayerSoundEnd: ');
217}
218function audioPlayerSoundStart(instance, sound_id, counter){
219	/* called when current playing sound starts. Returns player instance, sound id, media counter. */
220	//console.log('audioPlayerSoundStart: ', sound_id);
221}
222function audioPlayerSoundPlay(instance, sound_id, counter){
223	/* called when sound is played. Returns player instance, sound id, media counter. */
224	//console.log('audioPlayerSoundPlay: ');
225	
226	if(typeof(hap_group) !== 'undefined' && typeof(hap_players) !== 'undefined' && hap_players.length && typeof(soundArr) !== 'undefined' && soundArr.length){
227		var i = 0, len = soundArr.length;
228		for(i;i<len;i++){
229			if(sound_id != soundArr[i].sound_id){
230				//console.log('audioPlayerSoundPlay: ', sound_id, soundArr[i].sound_id);
231				if(typeof api_checkAudio !== 'undefined')api_checkAudio(soundArr[i].player_id, 'pause');
232			}
233		}
234	}
235}
236function audioPlayerSoundPause(instance, sound_id, counter){
237	/* called when sound is paused. Returns player instance, sound id, media counter. */
238	//console.log('audioPlayerSoundPause: ', sound_id);
239}
240function itemTriggered(instance, sound_id, counter){
241	/* called when new sound is triggered. Returns player instance, sound_id, media counter. */
242	//console.log('itemTriggered: ');
243	
244	if(sound_id == 'artwork1' || sound_id == 'basic' || sound_id == 'basic_h'){
245		var player_thumb = instance.find('.player_thumb').find('img'),
246			data = instance.getPlaylistData(),
247			thumb = data[counter].thumb;
248		if(player_thumb.length && thumb){
249			//console.log(thumb);
250			player_thumb.attr('src', instance.get_hap_source_path() + thumb);
251		}
252	}
253}
254function playlistItemEnabled(instance, sound_id, target, id){
255	/* called on playlist item enable. Returns player instance, sound_id, playlist item (target), playlist item id (playlist items have data-id attributes starting from 0). */
256	//console.log('playlistItemEnabled: ');
257	
258	if(sound_id == 'wall'){
259		jQuery(target).find('p[class=hap_title]').remove();
260	}
261}
262function playlistItemDisabled(instance, sound_id, target, id){
263	/* called on playlist item disable. Returns player instance, sound_id, playlist item (target), playlist item id (playlist items have data-id attributes starting from 0). */
264	//console.log('playlistItemDisabled: ');
265	
266	if(sound_id == 'wall'){
267		var data = instance.getPlaylistData(),
268			title = data[id].title;
269		if(title){
270			var p = jQuery('<p>"'+title+'"</p>').addClass('hap_title');
271			p.appendTo(jQuery(target)).css('marginTop',-p.outerHeight(true)/2+'px');
272		}
273	}
274}
275function playlistItemRollover(instance, sound_id, target, id, active){
276	/* called on playlist item mouseenter. Returns player instance, sound_id, playlist item (target), playlist item id (playlist items have data-id attributes starting from 0), active (is active playlist item, boolean). */
277	//console.log('playlistItemRollover: ');
278	if(sound_id == 'wall' && !active){
279		var data = instance.getPlaylistData(),
280			title = data[id].title;
281		if(title){
282			var p = jQuery('<p>"'+title+'"</p>').addClass('hap_title');
283			p.appendTo(jQuery(target)).css('marginTop',-p.outerHeight(true)/2+'px');
284		}
285	}
286	
287}
288function playlistItemRollout(instance, sound_id, target, id, active){
289	/* called on playlist item mouseleave. Returns player instance, sound_id, playlist item (target), playlist item id (playlist items have data-id attributes starting from 0), active (is active playlist item, boolean). */
290	//console.log('playlistItemRollout: ');
291	if(sound_id == 'wall' && !active){
292		jQuery(target).find('p[class=hap_title]').remove();
293	}
294	
295}
296function playlistEmpty(instance, sound_id){
297	/* called when playlist becomes empty (no items in playlist after new playlist has been created or last playlist item removed from playlist). Returns player instance, sound_id. */
298	//console.log('playlistEmpty: ', sound_id);
299	if(sound_id == 'drag_text2' || sound_id == 'drag_thumb2'){
300		instance.destroyAudio();
301		if(instance.find('p[class=drag_info]').length==0){
302			instance.find('.playlist_inner').prepend($('<p class="drag_info">DRAG THE SONGS IN HERE!</p>'));
303			instance.loadPlaylist({hidden: false, id: '#playlist2'});
304			
305		}
306	}
307}
308function dropReceive(instance, sound_id){
309	/* called when item gets dropped into the playlist. Returns player instance, sound_id. */
310	//console.log('dropReceive: ');
311	if(sound_id == 'drag_text2' || sound_id == 'drag_thumb2'){
312		instance.find('p[class=drag_info]').remove();
313	}
314}
315
316/* END PLAYER CALLBACKS */
317
318
319/* START TRACK LIST FOR PLAYER API */
320
321/**** html formatted tracks ****/
322
323var trackList_local1 = [
324	"<li class= 'playlistItem' data-type='local' data-mp3='../media/audio/1/Tim_McMorris_-_A_Bright_And_Hopeful_Future.mp3' 		 data-ogg='../media/audio/1/Tim_McMorris_-_A_Bright_And_Hopeful_Future.ogg' data-download><a class='playlistNonSelected' href='#'>Tim McMorris - A Bright And Hopeful Future</a><a class='dlink' href='#' data-dlink='../media/audio/1/Tim_McMorris_-_A_Bright_And_Hopeful_Future.mp3'><img src='media/data/dlink.png' alt = ''/></a><a class='plink' href='http://codecanyon.net/user/Tean/portfolio' target='_blank'><img src='media/data/url.png' alt = 'purchase'/></a></li>",
325
326	"<li class= 'playlistItem' data-type='local' data-mp3='../media/audio/1/Tim_McMorris_-_Be_My_Valentine.mp3' data-ogg='../media/audio/1/Tim_McMorris_-_Be_My_Valentine.ogg'><a class='playlistNonSelected' href='#'>Tim McMorris - Be My Valentine</a><a class='dlink' href='#' data-dlink='../media/audio/1/Tim_McMorris_-_Be_My_Valentine.mp3'><img src='media/data/dlink.png' alt = ''/></a><a class='plink' href='http://www.google.com' target='_blank'><img src='media/data/url.png' alt = 'purchase'/></a></li>",
327	
328	"<li class= 'playlistItem' data-type='local' data-mp3='../media/audio/1/Tim_McMorris_-_Give_Our_Dreams_Their_Wings_To_Fly.mp3' data-ogg='../media/audio/1/Tim_McMorris_-_Give_Our_Dreams_Their_Wings_To_Fly.ogg' data-download><a class='playlistNonSelected' href='#'>Tim McMorris - Give Our Dreams Their Wings To Fly</a></li>",
329	
330	"<li class= 'playlistItem' data-type='local' data-mp3='../media/audio/1/Tim_McMorris_-_Happy_Days_Are_Here_To_Stay.mp3' data-ogg='../media/audio/1/Tim_McMorris_-_Happy_Days_Are_Here_To_Stay.ogg'><a class='playlistNonSelected' href='#'>Tim McMorris - Happy Days Are Here To Stay</a><a class='plink' href='http://www.greensock.com' target='_blank'><img src='media/data/url.png' alt = 'purchase'/></a></li>"
331	];
332
333var trackList_local2 = [
334	"<li class= 'playlistItem' data-type='local' data-mp3='../media/audio/2/Soundroll_-_A_Way_To_The_Top.mp3' data-ogg='../media/audio/2/Soundroll_-_A_Way_To_The_Top.ogg'><a class='playlistNonSelected' href='#'>Soundroll - A Way To The Top</a><a class='plink' href='http://codecanyon.net/user/Tean/portfolio' target='_blank'><img src='media/data/url.png' alt = 'purchase'/></a></li>",
335 
336	"<li class= 'playlistItem' data-type='local' data-mp3='../media/audio/2/Soundroll_-_Feel_Good_Journey.mp3' data-ogg='../media/audio/2/Soundroll_-_Feel_Good_Journey.ogg'><a class='playlistNonSelected' href='#'>Soundroll - Feel Good Journey</a></li>",
337	
338	"<li class= 'playlistItem' data-type='local' data-mp3='../media/audio/2/Soundroll_-_Fight_No_More.mp3' data-ogg='../media/audio/2/Soundroll_-_Fight_No_More.ogg'><a class='playlistNonSelected' href='#'>Soundroll - Fight No More</a><a class='plink' href='http://www.google.com' target='_blank'><img src='media/data/url.png' alt = 'purchase'/></a></li>", 
339	
340	"<li class= 'playlistItem' data-type='local' data-mp3='../media/audio/2/Soundroll_-_Funky_Boom.mp3' data-ogg='../media/audio/2/Soundroll_-_Funky_Boom.ogg'><a class='playlistNonSelected' href='#'>Soundroll - Funky Boom</a><a class='plink' href='http://codecanyon.net/user/Tean/portfolio' target='_blank'><img src='media/data/url.png' alt = 'purchase'/></a></li>", 
341	
342	"<li class= 'playlistItem' data-type='local' data-mp3='../media/audio/2/Soundroll_-_Pump_The_Club.mp3' data-ogg='../media/audio/2/Soundroll_-_Pump_The_Club.ogg'><a class='playlistNonSelected' href='#'>Soundroll - Pump The Club</a></li>",
343	
344    "<li class= 'playlistItem' data-type='local' data-mp3='../media/audio/2/Soundroll_-_Rush.mp3' data-ogg='../media/audio/2/Soundroll_-_Rush.ogg'><a class='playlistNonSelected' href='#'>Soundroll - Rush</a></li>", 
345	
346	"<li class= 'playlistItem' data-type='local' data-mp3='../media/audio/2/Soundroll_-_Sun_Is_So_Bright.mp3' data-ogg='../media/audio/2/Soundroll_-_Sun_Is_So_Bright.ogg'><a class='playlistNonSelected' href='#'>Soundroll - Sun Is So Bright</a></li>"
347	];
348	
349var trackList_local_thumb = [
350	"<li class= 'playlistItem' data-type='local' data-mp3='../media/audio/2/Soundroll_-_A_Way_To_The_Top.mp3' data-ogg='../media/audio/2/Soundroll_-_A_Way_To_The_Top.ogg'><a class='playlistNonSelected' href='#'><span class='hap_thumb'><img src='../media/audio/2/Soundroll_-_A_Way_To_The_Top.jpg' alt=''/></span><span class='hap_title'><p>Soundroll - A Way To The Top</p></span></a></li>",
351 
352	"<li class= 'playlistItem' data-type='local' data-mp3='../media/audio/2/Soundroll_-_Feel_Good_Journey.mp3' data-ogg='../media/audio/2/Soundroll_-_Feel_Good_Journey.ogg'><a class='playlistNonSelected' href='#'><span class='hap_thumb'><img src='../media/audio/2/Soundroll_-_Feel_Good_Journey.jpg' alt=''/></span><span class='hap_title'><p>Soundroll - Feel Good Journey</p></span></a></li>"
353	];
354	
355var trackList_podcast = [
356	"<li class= 'playlistItem' data-type='podcast' data-path='http://gidilounge.fm/?feed=podcast'/>",
357	"<li class= 'playlistItem' data-type='podcast' data-path='http://www.kingola.com/feed/podcast/'/>"
358];
359
360var trackList_soundcloud = [
361	"<li class= 'playlistItem' data-type='soundcloud' data-path='http://soundcloud.com/computer-magic'/>",
362	"<li class= 'playlistItem' data-type='soundcloud' data-path='http://soundcloud.com/an21/favorites'/>"
363];
364
365var trackList_folder = [
366	"<li class= 'playlistItem' data-type='folder' data-path='../media/audio/1/'/>",
367	"<li class= 'playlistItem' data-type='folder' data-path='../media/audio/2/'/>"
368];
369
370var trackList_xml = [
371	"<li class= 'playlistItem' data-type='xml' data-path='xml/playlist1.xml'/>",
372	"<li class= 'playlistItem' data-type='xml' data-path='xml/playlist2.xml'/>"
373];
374	
375var trackList_yt_single = [
376	"<li class='playlistItem' data-type='youtube_single' data-path='opL4oe62XL8' ></li>",
377	"<li class='playlistItem' data-type='youtube_single' data-path='Akb7SJgGx1A' ></li>",
378	"<li class='playlistItem' data-type='youtube_single' data-path='uPOUgobWTT0' ></li>"
379];
380
381var trackList_yt_playlist = [
382	"<li class= 'playlistItem' data-type='youtube_playlist' data-path='PLE0311B1CFA360F55'></li>"
383];
384
385var trackList_ofm_single = [
386	"<li class= 'playlistItem' data-type='ofm_single' data-path='D4lw'></li>",
387	"<li class= 'playlistItem' data-type='ofm_single' data-path='B1pl'></li>",
388	"<li class= 'playlistItem' data-type='ofm_single' data-path='GGXE'></li>"
389];
390
391var trackList_ofm_playlist = [
392	"<li class= 'playlistItem' data-type='ofm_playlist' data-path='1rp7'></li>"
393];
394
395var trackList_ofm_project = [
396	"<li class= 'playlistItem' data-type='ofm_project' data-path='edB6'></li>"
397];	
398
399/* database tracks in html form, but in data form in database! */
400/*
401var trackList_database = [
402	"<li class= 'playlistItem' data-type='database_data' data-path='ap_hap' data-table='sound'/>"
403];
404var trackList_database2 = [
405	"<li class= 'playlistItem' data-type='database_data' data-path='ap_hap' data-table='sound' data-limit='3'/>"
406];
407var trackList_database3 = [
408	"<li class= 'playlistItem' data-type='database_data' data-path='ap_hap' data-table='sound' data-range='1,5'/>"
409];*/
410
411/* database tracks in html form, and in html form in database! */
412var trackList_database = [
413	"<li class= 'playlistItem' data-type='database_html' data-path='ap_hap' data-table='sound1'/>"
414];
415var trackList_database2 = [
416	"<li class= 'playlistItem' data-type='database_html' data-path='ap_hap' data-table='sound1' data-limit='3'/>"
417];
418var trackList_database3 = [
419	"<li class= 'playlistItem' data-type='database_html' data-path='ap_hap' data-table='sound1' data-range='1,5'/>"
420];
421
422var trackList_mixed = [
423	/*"<li class= 'playlistItem' data-type='xml' data-path='xml/playlist3.xml'/>",*/
424	
425	"<li class= 'playlistItem' data-type='local' data-mp3='../media/audio/1/Tim_McMorris_-_A_Bright_And_Hopeful_Future.mp3' data-ogg='../media/audio/1/Tim_McMorris_-_A_Bright_And_Hopeful_Future.ogg' data-thumb='../media/audio/1/_A_Bright_And_Hopeful_Future.jpg' data-dlink='local_dlink' data-download='local_global'><a class='playlistNonSelected' href='#'>Tim McMorris - A Bright And Hopeful Future</a></li>",
426	"<li class= 'playlistItem' data-type='local' data-mp3='../media/audio/1/Tim_McMorris_-_A_Bright_And_Hopeful_Future.mp3' data-ogg='../media/audio/1/Tim_McMorris_-_A_Bright_And_Hopeful_Future.ogg' data-thumb='../media/audio/1/_A_Bright_And_Hopeful_Future.jpg' data-dlink data-download><a class='playlistNonSelected' href='#'>Tim McMorris - A Bright And Hopeful Future</a></li>",
427	
428	"<li class= 'playlistItem' data-type='podcast' data-path='http://www.npr.org/rss/podcast.php?id=510008' data-dlink='podcast_dlink' data-download='podcast_global' data-thumb='media/default_artwork/podcast/01.jpg'/>",
429	"<li class= 'playlistItem' data-type='podcast' data-path='http://www.npr.org/rss/podcast.php?id=510008' data-dlink data-download data-thumb='media/default_artwork/podcast/01.jpg'/>",
430	
431	"<li class= 'playlistItem' data-type='soundcloud' data-path='http://soundcloud.com/computer-magic' data-dlink='soundcloud_dlink' data-download='soundcloud_global' data-thumb='media/default_artwork/soundcloud/01.jpg'/>",
432	"<li class= 'playlistItem' data-type='soundcloud' data-path='http://soundcloud.com/computer-magic' data-dlink data-download data-thumb='media/default_artwork/soundcloud/01.jpg'/>",
433	
434	"<li class= 'playlistItem' data-type='soundcloud' data-path='http://soundcloud.com/trance/trance-single-138-bpm-anvil' data-dlink='soundcloud_dlink_NON_DW' data-download='soundcloud_global_NON_DW' data-thumb='media/default_artwork/soundcloud/01.jpg'/>",
435	"<li class= 'playlistItem' data-type='soundcloud' data-path='http://soundcloud.com/trance/trance-single-138-bpm-anvil' data-dlink data-download data-thumb='media/default_artwork/soundcloud/01.jpg'/>",
436	
437	"<li class= 'playlistItem' data-type='ofm_single' data-dlink='ofm_single_dlink' data-download='ofm_single_global' data-path='B1pl' data-thumb='media/default_artwork/ofm_single/01.jpg'></li>",
438	"<li class= 'playlistItem' data-type='ofm_single' data-dlink data-download data-path='B1pl' data-thumb='media/default_artwork/ofm_single/01.jpg'></li>",
439	
440	"<li class= 'playlistItem' data-type='ofm_playlist' data-dlink='ofm_playlist_dlink' data-download='ofm_playlist_global' data-path='1rp7' data-thumb='media/default_artwork/ofm_playlist/01.jpg'></li>",
441	"<li class= 'playlistItem' data-type='ofm_playlist' data-dlink data-download data-path='1rp7' data-thumb='media/default_artwork/ofm_playlist/01.jpg'></li>",
442	
443	"<li class= 'playlistItem' data-type='ofm_project' data-dlink='ofm_project_dlink' data-download='ofm_project_global' data-path='edB6' data-thumb='media/default_artwork/ofm_project/01.jpg'></li>",
444	"<li class= 'playlistItem' data-type='ofm_project' data-dlink data-download data-path='edB6' data-thumb='media/default_artwork/ofm_project/01.jpg'></li>",
445	
446	"<li class= 'playlistItem' data-type='youtube_single' data-dlink='youtube_single_dlink' data-download='youtube_single_global' data-path='opL4oe62XL8' data-thumb='media/default_artwork/yt_single/01.jpg'></li>",
447	"<li class= 'playlistItem' data-type='youtube_single' data-dlink data-download data-path='opL4oe62XL8' data-thumb='media/default_artwork/yt_single/01.jpg'></li>",
448	"<li class= 'playlistItem' data-type='youtube_playlist' data-dlink='youtube_playlist_dlink' data-download='youtube_playlist_global' data-path='PLE0311B1CFA360F55' data-thumb='media/default_artwork/yt_playlist/01.jpg'></li>",
449	"<li class= 'playlistItem' data-type='youtube_playlist' data-dlink data-download data-path='PLE0311B1CFA360F55' data-thumb='media/default_artwork/yt_playlist/01.jpg'></li>"
450];	
451	
452	
453/**** tracks in form of data (objects) ****/	
454/*
455parameters:
456required:
457	type: local, podcast, soundcloud, folder, xml, youtube_single, youtube_playlist, ofm_single, ofm_playlist, ofm_project
458	mp3: mp3 path to audio file (you can also use 'path' instead of 'mp3')
459optional:
460	for local type:
461		ogg: path to the ogg audio file, NOTE: still required if ogg is used! (not if only mp3 audio format is used)
462		title: add song title
463		thumb: thumbnail path
464	for folder type:
465		thumb: thumbnail path (otherwise it will automatically assume thumbnail with the same name as mp3 file exist in the same folder, with 'jpg' extension)	
466	for all types:
467		thumb: backup thumbnail path (if this data type is missing a thumbnail)
468		download (global download, activates global download button on active playlist item): 
469				- for youtube: enter download url (required!)
470				- for other types: enter download url or 'true' (true will take mp3 path for download)
471		dlink: (individual download, creates download icon in playlist)
472				- for youtube: enter download url (required!)
473				- for other types: enter download url or 'true' (true will take mp3 path for download)
474		plink: Enter url (creates url icon in playlist, which links to url, target _blank)		
475*/
476
477var trackList2_local1 = [
478	{type: 'local', mp3: '../media/audio/1/Tim_McMorris_-_A_Bright_And_Hopeful_Future.mp3', ogg: '../media/audio/1/Tim_McMorris_-_A_Bright_And_Hopeful_Future.ogg', title: 'Tim McMorris - A Bright And Hopeful Future', thumb: '../media/audio/1/Tim_McMorris_-_A_Bright_And_Hopeful_Future.jpg'}, 
479	{type: 'local', mp3: '../media/audio/1/Tim_McMorris_-_Be_My_Valentine.mp3', ogg: '../media/audio/1/Tim_McMorris_-_Be_My_Valentine.ogg', title: 'Tim McMorris - Be My Valentine', thumb: '../media/audio/1/Tim_McMorris_-_Be_My_Valentine.jpg'},
480	{type: 'local', mp3: '../media/audio/1/Tim_McMorris_-_Give_Our_Dreams_Their_Wings_To_Fly.mp3', ogg: '../media/audio/1/Tim_McMorris_-_Give_Our_Dreams_Their_Wings_To_Fly.ogg', title: 'Tim McMorris - Give Our Dreams Their Wings To Fly'}, 
481	{type: 'local', mp3: '../media/audio/1/Tim_McMorris_-_Happy_Days_Are_Here_To_Stay.mp3', ogg: '../media/audio/1/Tim_McMorris_-_Happy_Days_Are_Here_To_Stay.ogg', title: 'Tim McMorris - Happy Days Are Here To Stay'},
482	{type: 'local', mp3: '../media/audio/1/Tim_McMorris_-_Health_Happiness_Success.mp3', ogg: '../media/audio/1/Tim_McMorris_-_Health_Happiness_Success.ogg', title: 'Tim McMorris - Health Happiness Success'}, 
483	{type: 'local', mp3: '../media/audio/1/Tim_McMorris_-_Marketing_Advertising_Music.mp3', ogg: '../media/audio/1/Tim_McMorris_-_Marketing_Advertising_Music.ogg', title: 'Tim McMorris - Marketing Advertising Music'},
484	{type: 'local', mp3: '../media/audio/3/Bluegestalt_-_Becoming.mp3', ogg: '../media/audio/3/Bluegestalt_-_Becoming.ogg', title: 'Bluegestalt - Becoming'}
485];
486
487var trackList2_local2 = [
488	{type: 'local', mp3: '../media/audio/2/Soundroll_-_Funky_Boom.mp3', ogg: '../media/audio/2/Soundroll_-_Funky_Boom.ogg', title: 'Soundroll - Funky Boom', download: "../media/audio/2/Soundroll_-_Funky_Boom.mp3", thumb: '../media/audio/2/Soundroll_-_Funky_Boom.jpg', plink:'http://www.google.com', dlink:true}, 
489	{type: 'local', mp3: '../media/audio/2/Soundroll_-_Fight_No_More.mp3', ogg: '../media/audio/2/Soundroll_-_Fight_No_More.ogg', title: 'Soundroll - Fight No More'}, 
490	{type: 'local', mp3: '../media/audio/2/Soundroll_-_Rush.mp3', ogg:'../media/audio/2/Soundroll_-_Rush.ogg', title: 'Soundroll - Rush'}
491];
492
493var trackList2_soundcloud = [
494	{type: 'soundcloud', path: 'http://soundcloud.com/trance/trance-single-138-bpm-anvil', download: true, dlink: true, plink:'http://www.google.com'}, 
495	{type: 'soundcloud', path: 'http://soundcloud.com/an21/favorites' }
496];
497
498var trackList2_podcast = [
499	{type: 'podcast', path: 'http://www.npr.org/rss/podcast.php?id=510008', download: true}, 
500	{type: 'podcast', path: 'http://feeds.feedburner.com/xpnmusicnotes/', plink:'http://www.google.com' }, 
501	{type: 'podcast', path: 'http://robertkelly.libsyn.com/rss', dlink: true, plink:'http://codecanyon.net/user/Tean/portfolio'}
502];
503
504var trackList2_folder = [
505	{type: 'folder', path: '../media/audi
505o/1/', download: true}, 
506	{type: 'folder', path: '../media/audio/2/' }
507];
508
509var trackList2_xml = [
510	{type: 'xml', path: 'xml/playlist1.xml'}, 
511	{type: 'xml', path: 'xml/playlist2.xml'}
512];
513
514var trackList2_yt_single = [
515	{type: 'youtube_single', path: 'opL4oe62XL8', download: 'path/to/custom/youtube_single.extension'}, 
516	{type: 'youtube_single', path: 'Akb7SJgGx1A', download: true, plink:'http://www.google.com'},
517	{type: 'youtube_single', path: 'uPOUgobWTT0'}
518];	
519
520var trackList2_yt_playlist = [
521	{type: 'youtube_playlist', path: 'PLE0311B1CFA360F55', download: true}
522];  
523
524var trackList2_ofm_single = [
525	{type: 'ofm_single', path: 'D4lw', download: 'path/to/custom/ofm_single.extension'},
526	{type: 'ofm_single', path: 'B1pl'},
527	{type: 'ofm_single', path: 'GGXE', download: true}
528];	
529
530var trackList2_ofm_playlist = [
531	{type: 'ofm_playlist', path: '1rp7'}
532];	
533
534var trackList2_ofm_project = [
535	{type: 'ofm_project', path: 'edB6'}
536];	
537
538/* database tracks in data form, and in data form in database! */
539var trackList2_database = [
540	{type: 'database_data', path: 'ap_hap', table: 'sound'}
541];
542var trackList2_database2 = [
543	{type: 'database_data', path: 'ap_hap', table: 'sound', limit: 5}
544];
545var trackList2_database3 = [
546	{type: 'database_data', path: 'ap_hap', table: 'sound', range: '1,4'}
547];
548/* database tracks in data form, but in html form in database! */
549/*
550var trackList2_database = [
551	{type: 'database_html', path: 'ap_hap', table: 'sound1'}
552];
553var trackList2_database2 = [
554	{type: 'database_html', path: 'ap_hap', table: 'sound1', limit: 5}
555];
556var trackList2_database3 = [
557	{type: 'database_html', path: 'ap_hap', table: 'sound1', range: '1,4'}
558];*/
559
560var trackList2_mixed = [
561	{type: 'local', mp3: '../media/audio/1/Tim_McMorris_-_A_Bright_And_Hopeful_Future.mp3', ogg: '../media/audio/1/Tim_McMorris_-_A_Bright_And_Hopeful_Future.ogg', title: 'Tim McMorris - A Bright And Hopeful Future', thumb: '../media/audio/1/Tim_McMorris_-_A_Bright_And_Hopeful_Future.jpg', dlink: 'local_dlink', download:'path/to/custom/local.extension'}, 
562	{type: 'local', mp3: '../media/audio/1/Tim_McMorris_-_A_Bright_And_Hopeful_Future.mp3', ogg: '../media/audio/1/Tim_McMorris_-_A_Bright_And_Hopeful_Future.ogg', title: 'Tim McMorris - A Bright And Hopeful Future', thumb: '../media/audio/1/Tim_McMorris_-_A_Bright_And_Hopeful_Future.jpg', dlink: true, download:true}, 
563	
564	{type: 'podcast', path: 'http://www.npr.org/rss/podcast.php?id=510008', dlink: 'podcast_dlink', download:'path/to/custom/podcast.extension'}, 
565	{type: 'podcast', path: 'http://www.npr.org/rss/podcast.php?id=510008', dlink: true, download:true},
566	
567	{type: 'soundcloud', path: 'http://soundcloud.com/computer-magic', dlink: 'soundcloud_dlink', download:'path/to/custom/soundcloud.extension'}, 
568	{type: 'soundcloud', path: 'http://soundcloud.com/computer-magic', dlink:true, download:true},
569	 
570	{type: 'soundcloud', path: 'http://soundcloud.com/trance/trance-single-138-bpm-anvil', dlink: 'soundcloud_dlink_NON_DW', download:'path/to/custom/soundcloud.extension_NON_DW'}, 
571	{type: 'soundcloud', path: 'http://soundcloud.com/trance/trance-single-138-bpm-anvil', dlink: true, download:true},
572	
573	{type: 'ofm_single', path: 'B1pl',dlink: 'ofm_single_dlink',  download:'path/to/custom/ofm_single.extension'},
574	{type: 'ofm_single', path: 'B1pl',dlink: true,  download:true},
575	
576	{type: 'ofm_playlist', path: '1rp7',dlink: 'ofm_playlist_dlink',  download:'path/to/custom/ofm_playlist.extension'},
577	{type: 'ofm_playlist', path: '1rp7',dlink: true,  download:true},
578	
579	{type: 'ofm_project', path: 'edB6',dlink: 'ofm_project_dlink',  download:'path/to/custom/ofm_project.extension'},
580	{type: 'ofm_project', path: 'edB6',dlink: true,  download:true},
581	
582	{type: 'youtube_single', path: 'opL4oe62XL8',dlink: 'youtube_single_dlink',  download:'path/to/custom/youtube_single.extension'},
583	{type: 'youtube_single', path: 'opL4oe62XL8',dlink: true,  download:true},
584	
585	{type: 'youtube_playlist', path: 'PLE0311B1CFA360F55', dlink: 'youtube_playlist_dlink', download:'path/to/custom/youtube_playlist.extension'},
586	{type: 'youtube_playlist', path: 'PLE0311B1CFA360F55', dlink: true, download:true}
587	
588	/*{type: 'folder', path: '../media/audio/3/', download:'path/to/custom/folder.extension'} 
589	{type: 'xml', path: 'xml/playlist2.xml' }*/
590];	 
591
592var trackList2_mixed2 = [
593	{type: 'local', mp3: '../media/audio/1/Tim_McMorris_-_A_Bright_And_Hopeful_Future.mp3', ogg: '../media/audio/1/Tim_McMorris_-_A_Bright_And_Hopeful_Future.ogg', title: 'Tim McMorris - A Bright And Hopeful Future', download:true, dlink:'custom/path/to/download'}, 
594	{type: 'podcast', path: 'http://www.npr.org/rss/podcast.php?id=510008', download: true, dlink:true},
595	{type: 'soundcloud', path: 'http://soundcloud.com/computer-magic', download: true, dlink:true},
596	{type: 'soundcloud', path: 'http://soundcloud.com/trance/trance-single-138-bpm-anvil', download: true, dlink:true},
597	{type: 'youtube_single', path: 'opL4oe62XL8', download: true}, 
598	{type: 'ofm_single', path: 'D4lw'}
599];   
600
601
602
603
604//list of titles 
605var titleList = [
606	'Tim McMorris - A Bright And Hopeful Future', 
607	'Tim McMorris - Be My Valentine', 
608	'Tim McMorris - Give Our Dreams Their Wings To Fly', 
609	'Tim McMorris - Happy Days Are Here To Stay', 
610	'Tim McMorris - Health Happiness Success', 
611	'Tim McMorris - Marketing Advertising Music', 
612	'Tim McMorris - Successful Business Venture'
613];
614
615var titleList2 = [
616	'Soundroll - A Way To The Top', 
617	'Soundroll - Feel Good Journey', 
618	'Soundroll - Fight No More', 
619	'Soundroll - Funky Boom', 
620	'Soundroll - Pump The Club', 
621	'Soundroll - Rush', 
622	'Soundroll - Sun Is So Bright'
623];
624	
625/* END TRACKS LIST FOR PLAYER API */	
626
627
628/* DEFAULTS */
629
630var audio = document.createElement('audio'), mp3Support, oggSupp
630ort, html5Support=false, hap_source_path='';
631if (audio.canPlayType) {
632	html5Support=true;
633	mp3Support = !!audio.canPlayType && "" != audio.canPlayType('audio/mpeg');
634	oggSupport = !!audio.canPlayType && "" != audio.canPlayType('audio/ogg; codecs="vorbis"');
635}
636
637var isMobile = (/Android|webOS|iPhone|iPad|iPod|sony|BlackBerry/i.test(navigator.userAgent));
638
639var isIE = false, ieBelow9 = false, ieBelow8 = false;
640var ie_check = getInternetExplorerVersion();
641if (ie_check != -1){
642	isIE = true;
643	if(ie_check < 9)ieBelow9 = true;
644	if(ie_check < 8)ieBelow8 = true;
645} 
646function getInternetExplorerVersion(){
647  var rv = -1;
648  if (navigator.appName == 'Microsoft Internet Explorer')
649  {
650	var ua = navigator.userAgent;
651	var re  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
652	if (re.exec(ua) != null)
653	  rv = parseFloat( RegExp.$1 );
654  }
655  else if (navigator.appName == 'Netscape')
656  {
657	var ua = navigator.userAgent;
658	var re  = new RegExp("Trident/.*rv:([0-9]{1,}[\.0-9]{0,})");
659	if (re.exec(ua) != null)
660	  rv = parseFloat( RegExp.$1 );
661  }
662  return rv;
663}
664
665/* END DEFAULTS */
666
667/* FLASH EMBED PART (for non html5 browsers, youtube and flash audio) */
668
669function checkFlash(dataArr, embed_circle){
670	
671	var i = 0, len = dataArr.length;
672	
673	if(!html5Support){//flash movies
674			
675		for(i;i<len;i++){
676			
677			var a_id = 'flashAudio' + i;
678			var f_id = 'flashMain' + i;
679			var c_id = 'circleMain' + i;
680			
681			dataArr[i].settings.flash_id = i;
682			dataArr[i].settings.flashAudio = '#'+a_id;
683			dataArr[i].settings.flashYoutube = '#'+f_id;
684			dataArr[i].settings.circleMain = '#'+c_id;
685			
686			var flashAudioWrapper = jQuery('<div/>').addClass('flashAudio');
687			var flashAudio = jQuery("<div id='"+a_id+"'><a href='http://www.adobe.com/go/getflashplayer'><img src='http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif' alt='Get Adobe Flash player' /></a></div>").appendTo(flashAudioWrapper);
688			
689			var flashMainWrapper = jQuery('<div/>').addClass('flashMain');
690			var flashMain = jQuery("<div id='"+f_id+"'><a href='http://www.adobe.com/go/getflashplayer'><img src='http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif' alt='Get Adobe Flash player' /></a></div>").appendTo(flashMainWrapper);
691			
692			dataArr[i].holder.append(flashAudioWrapper);
693			dataArr[i].holder.append(flashMainWrapper);
694			
695			if(embed_circle){
696				var flashCircleWrapper = jQuery('<div/>').addClass('circleMain');
697				var flashCircle = jQuery("<div id='"+c_id+"'><a href='http://www.adobe.com/go/getflashplayer'><img src='http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif' alt='Get Adobe Flash player'/></a></div>").appendTo(flashCircleWrapper);
698				dataArr[i].holder.find('div[class=circlePlayer]').append(flashCircleWrapper);
699			}
700				
701		}
702	}else{
703
704		i = 0;
705		for(i;i<len;i++){
706			
707			if(dataArr[i].settings.useOnlyMp3Format && !mp3Support){//use flash to play mp3 on browsers that do not support mp3 
708				
709				var a_id = 'flashAudio' + i;
710				
711				dataArr[i].settings.flash_id = i;
712				dataArr[i].settings.flashAudio = '#'+a_id;
713				
714				var flashAudioWrapper = jQuery('<div/>').addClass('flashAudio');
715				var flashAudio = jQuery("<div id='"+a_id+"'><a href='http://www.adobe.com/go/getflashplayer'><img src='http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif' alt='Get Adobe Flash player' /></a></div>").appendTo(flashAudioWrapper);
716				
717				dataArr[i].holder.append(flashAudioWrapper);
718					
719			}
720		}
721	}	
722}	
723	
724var hap_params = {
725	quality: "high",
726	scale: "noscale",
727	salign: "tl",
728	wmode: "transparent",
729	bgcolor: "#111111",
730	devicefont: "false",
731	allowfullscreen: "true",
732	allowscriptaccess: "always"	
733};
734function embedFlashMain(id){
735	if(jQuery('.flashMain').length==0)return;
736	jQuery('.flashMain').css('display','block');
737	var flashvars = {},attributes = {id:id};
738	swfobject.embedSWF("preview.swf", id, "320px", "240px", "9.0.0", "expressInstall.swf", flashvars, hap_params, attributes);
739}
740function embedFlashAudio(id){
741	if(jQuery('.flashAudio').length==0)return;
742	jQuery('.flashAudio').css('display','block');
743	var flashvars = {},attributes = {id:id};
744	swfobject.embedSWF("preview2.swf", id, "100px", "100px", "9.0.0", "expressInstall.swf", flashvars, hap_params, attributes);
745}
746function embedFlashCircle(id){
747	if(jQuery('.circleMain').length==0)return;
748	jQuery('.circleMain').css('display','block');
749	var flashvars = {},attributes = {id:id};
750	swfobject.embedSWF("circle.swf", id, "160px", "160px", "9.0.0", "expressInstall.swf", flashvars, hap_params, attributes);
751}
752
753//******** functions called from flash
754var jsReady = false;
755function isReady() {return jsReady;}
756
757/* flash youtube callbacks */
758function flashVideoEnd(data){
759	if(hap_players[data.id])hap_players[data.id].flashVideoEnd();
760}
761function flashVideoStart(data){
762	if(hap_players[data.id])hap_players[data.id].flashVideoStart();
763}
764function flashVideoPause(data){
765	if(hap_players[data.id])hap_players[data.id].flashVideoPause();
766}
767function flashVideoResume(data){
768	if(hap_players[data.id])hap_players[data.id].flashVideoResume();
769}
770function flashYoutubeData(data){
771	if(hap_players[data.id])hap_players[data.id].flashYoutubeData(data.bl,data.bt,data.t,data.d);
772}
773/*flash audio callbacks*/
774function flashAudioEnd(data){
775	if(hap_players[data.id])hap_players[data.id].flashAudioEnd();
776}
777function flashAudioData(data){
778	if(hap_players[data.id])hap_players[data.id].flashAudioData(data.bl,data.bt,data.t,data.d);
779}
780/*flash circle callbacks*/
781function flashCircleToggle(data){
782	if(hap_players[data.id])hap_players[data.id].flashCircleToggle();
783}
784function flashCircleOverLoader(data){
785	if(hap_players[data.id])hap_players[data.id].flashCircleOverLoader(data.val);
786}
787function flashCircleOutLoader(data){
788	if(hap_players[data.id])hap_players[data.id].flashCircleOutLoader();
789}
790function flashCircleSeek(data){
791	if(hap_players[data.id])hap_players[data.id].flashCircleSeek(data.val);
792}
793
794/* END FLASH EMBED PART */
795
796
797
798
799/* START POPUP RELATED CODE */
800
801function notify_popup(){//called from popup window when popup window has opened!
802	//console.log('notify_popup');
803	if(hap_popup && hap_popup.initPopup != undefined){//dont do anything if we are not going to be able to open popup!
804		if(hap_settings.autoUpdateWindowData)updatePlayerData();
805	
806		if(hap_players && hap_players[0]){
807			if(hap_players[0].destroyPlaylist != undefined)hap_players[0].destroyPlaylist();
808		}
809		jQuery('#componentWrapper').css('display','none');//hide player in parent page (we cant clear html because we dont dynamically append componentWrapper html with jquery! Only if we save the player html prior to this action so we can reinstantiate it later.)
810		
811		try {
812			if(hap_popup.initPopup != undefined)hap_popup.initPopup(hap_settings);
813			if(hap_players[0])hap_players[0].find('.popup_open').css('display','none');
814		}catch(e){
815			alert('parent notify_popup error: ' + e.message);
816			return false;
817		}
818	}
819}
820
821//called from popup window when popup is closed (opens player in parent window again, remove this function if you dont want this feature)
822function open_player(player){
823	//console.log('open_player');
824	if(hap_settings.autoUpdateWindowData){
825		if(player)hap_players[0] = player;//get player reference
826		updatePlayerData(true);
827	}
828	hap_players[0] = jQuery('#componentWrapper').css('display','block').html5audio(hap_settings);//show player before init
829	if(!html5Support)hap_players[0].embedFlash();
830	hap_players[0].find('.popup_open').css('display','block');
831}
832
833function open_popup(url, w, h, resizable){//public api to open popup
834	//console.log('open_popup');
835	if(typeof(url) === 'undefined' || typeof(w) === 'undefined' || typeof(h) === 'undefined') return false;
836	var cw = (window.screen.width - w) / 2, ch = (window.screen.height - h) / 2;//center popup in window
837	
838	//if popup window not already opened!
839	if(!hap_popup || hap_popup.closed) {
840		if(resizable){
841			hap_popup=window.open(url,'hap_popup_window','menubar=no,toolbar=no,location=no,scrollbars=1,resizable,width='+w+',height='+h+',left='+cw+',top='+ch+'');
842		}else{
843			hap_popup=window.open(url,'hap_popup_window','menubar=no,toolbar=no,location=no,width='+w+',height='+h+',left='+cw+',top='+ch+'');
844		}
845		//hap_popup=window.open(url,'name','width=700,height=300');//opera doesnt want to open popup with vars in options (instead opens new tab)!
846		if(!hap_popup) {
847			alert("Music Player can not be opened in a popup window because your browser is blocking Pop-Ups. Please allow Pop-Ups in browser for this site to use the Music Player.");
848			return false;
849		}
850		if (window.focus) {hap_popup.focus();}
851	}else{
852		//console.log('popup already opened!');	
853	}
854	return false;
855}
856
857function updatePlayerData(isPopup){
858	//console.log('updatePlayerData');
859	if(!hap_players[0] || !hap_settings)return false;
860	//start update settings to pass between players in popup and parent window (remove these function calls if you want to start from initail settings every time player in popup/parent is opened). This will copy last volume, whole playlist and active item.
861	if(!isNaN(hap_players[0].getVolume()))hap_settings.defaultVolume = hap_players[0].getVolume();//volume
862	if(!isNaN(hap_players[0].getActiveItem()))hap_settings.activeItem = hap_players[0].getActiveItem();//active item
863	
864	//console.log(hap_players[0].getVolume(), hap_players[0].getActiveItem(), hap_players[0].getMediaPlaying());
865	
866	//active playlist
867	var playlistLoaded = hap_players[0].getPlaylistLoaded();
868	if(playlistLoaded){
869		var hidden_playlist = hap_players[0].getPlaylistHidden();
870		if(!hidden_playlist){ 
871			var playlist = hap_players[0].find('.playlist_inner').find('ul');
872			if(playlist.length > 0){
873				var activePlaylist = playlist.attr('id');//get id attribute
874				if(isPopup && isIE){
875					var curr_playlist = jQuery(playlist.clone(true, true).wrap('<p>').parent().html());//used for popup in IE (HIERARCHY_REQUEST_ERROR)!! important!
876				}else{
877					var curr_playlist = playlist.clone(true, true);
878				}
879				jQuery(hap_settings.playlistList).find('#'+activePlaylist).remove();//remove playlist with active id from playlist_list, we are going to paste new version inside (with the same id attribute) in case playlist content has been changed (added/removed tracks/order etc...)
880				curr_playlist.appendTo(jQuery(hap_settings.playlistList));//copy current playlist into playlist_list
881				hap_settings.activePlaylist = {hidden: false, id:'#'+activePlaylist};//active playlist
882			}
883		}else{//hidden playlist
884			var playlist = hap_players[0].get_hidden_playlist_holder().children();//hidden_playlist_holder doesnt have ul node, just li nodes
885			if(playlist.length > 0){
886				var activePlaylist = 'playlist' + Math.floor((Math.random()*9999));//get id attribute
887				var curr_playlist = jQuery('<ul id='+activePlaylist+'/>');
888				if(isPopup && isIE){
889					jQuery(playlist.clone(true, true).wrap('<p>').parent().html()).appendTo(curr_playlist);//used for popup in IE (HIERARCHY_REQUEST_ERROR)!! important!
890				}else{
891					playlist.clone(true, true).appendTo(curr_playlist);
892				}
893				if(hap_players[0].getPlaylistList()){
894					curr_playlist.appendTo(hap_players[0].getPlaylistList());//copy current playlist into playlist_list
895					hap_settings.activePlaylist = {hidden: true, id:'#'+activePlaylist};//active playlist
896					hap_players[0].get_hidden_playlist_holder().html('');//empty hidden_playlist_holder
897				}
898			}
899		}
900		var mediaPlaying = hap_players[0].getMediaPlaying();
901		mediaPlaying ? hap_settings.autoPlay=true : hap_settings.autoPlay=false;
902		//seek to?, cookies , remember time (double check for all media types + yt separatelly!)
903	}else{
904		hap_settings.activePlaylist='';
905	}
906	//end update settings */	
907}
908
909/* END POPUP RELATED CODE */
910

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.