PageSourceSearch

http://primordial.org.ua/wp-content/plugins/audio-player/assets/audio-player.js?ver=2.0.4.6

js primordial.org.ua collected 2026-10-01 08:50:58 UTC 29,366 bytes, 920 lines download raw bytes

1/*!	SWFObject v2.2 <http://code.google.com/p/swfobject/> 
2	is released under the MIT License <http://www.opensource.org/licenses/mit-license.php> 
3*/
4
5var audioplayer_swfobject = function() {
6	
7	var UNDEF = "undefined",
8		OBJECT = "object",
9		SHOCKWAVE_FLASH = "Shockwave Flash",
10		SHOCKWAVE_FLASH_AX = "ShockwaveFlash.ShockwaveFlash",
11		FLASH_MIME_TYPE = "application/x-shockwave-flash",
12		EXPRESS_INSTALL_ID = "SWFObjectExprInst",
13		ON_READY_STATE_CHANGE = "onreadystatechange",
14		
15		win = window,
16		doc = document,
17		nav = navigator,
18		
19		plugin = false,
20		domLoadFnArr = [main],
21		regObjArr = [],
22		objIdArr = [],
23		listenersArr = [],
24		storedAltContent,
25		storedAltContentId,
26		storedCallbackFn,
27		storedCallbackObj,
28		isDomLoaded = false,
29		isExpressInstallActive = false,
30		dynamicStylesheet,
31		dynamicStylesheetMedia,
32		autoHideShow = true,
33	
34	/* Centralized function for browser feature detection
35		- User agent string detection is only used when no good alternative is possible
36		- Is executed directly for optimal performance
37	*/	
38	ua = function() {
39		var w3cdom = typeof doc.getElementById != UNDEF && typeof doc.getElementsByTagName != UNDEF && typeof doc.createElement != UNDEF,
40			u = nav.userAgent.toLowerCase(),
41			p = nav.platform.toLowerCase(),
42			windows = p ? /win/.test(p) : /win/.test(u),
43			mac = p ? /mac/.test(p) : /mac/.test(u),
44			webkit = /webkit/.test(u) ? parseFloat(u.replace(/^.*webkit\/(\d+(\.\d+)?).*$/, "$1")) : false, // returns either the webkit version or false if not webkit
45			ie = !+"\v1", // feature detection based on Andrea Giammarchi's solution: http://webreflection.blogspot.com/2009/01/32-bytes-to-know-if-your-browser-is-ie.html
46			playerVersion = [0,0,0],
47			d = null;
48		if (typeof nav.plugins != UNDEF && typeof nav.plugins[SHOCKWAVE_FLASH] == OBJECT) {
49			d = nav.plugins[SHOCKWAVE_FLASH].description;
50			if (d && !(typeof nav.mimeTypes != UNDEF && nav.mimeTypes[FLASH_MIME_TYPE] && !nav.mimeTypes[FLASH_MIME_TYPE].enabledPlugin)) { // navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin indicates whether plug-ins are enabled or disabled in Safari 3+
51				plugin = true;
52				ie = false; // cascaded feature detection for Internet Explorer
53				d = d.replace(/^.*\s+(\S+\s+\S+$)/, "$1");
54				playerVersion[0] = parseInt(d.replace(/^(.*)\..*$/, "$1"), 10);
55				playerVersion[1] = parseInt(d.replace(/^.*\.(.*)\s.*$/, "$1"), 10);
56				playerVersion[2] = /[a-zA-Z]/.test(d) ? parseInt(d.replace(/^.*[a-zA-Z]+(.*)$/, "$1"), 10) : 0;
57			}
58		}
59		else if (typeof win.ActiveXObject != UNDEF) {
60			try {
61				var a = new ActiveXObject(SHOCKWAVE_FLASH_AX);
62				if (a) { // a will return null when ActiveX is disabled
63					d = a.GetVariable("$version");
64					if (d) {
65						ie = true; // cascaded feature detection for Internet Explorer
66						d = d.split(" ")[1].split(",");
67						playerVersion = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
68					}
69				}
70			}
71			catch(e) {}
72		}
73		return { w3:w3cdom, pv:playerVersion, wk:webkit, ie:ie, win:windows, mac:mac };
74	}(),
75	
76	/* Cross-browser onDomLoad
77		- Will fire an event as soon as the DOM of a web page is loaded
78		- Internet Explorer workaround based on Diego Perini's solution: http://javascript.nwbox.com/IEContentLoaded/
79		- Regular onload serves as fallback
80	*/ 
81	onDomLoad = function() {
82		if (!ua.w3) { return; }
83		if ((typeof doc.readyState != UNDEF && doc.readyState == "complete") || (typeof doc.readyState == UNDEF && (doc.getElementsByTagName("body")[0] || doc.body))) { // function is fired after onload, e.g. when script is inserted dynamically 
84			callDomLoadFunctions();
85		}
86		if (!isDomLoaded) {
87			if (typeof doc.addEventListener != UNDEF) {
88				doc.addEventListener("DOMContentLoaded", callDomLoadFunctions, false);
89			}		
90			if (ua.ie && ua.win) {
91				doc.attachEvent(ON_READY_STATE_CHANGE, function() {
92					if (doc.readyState == "complete") {
93						doc.detachEvent(ON_READY_STATE_CHANGE, arguments.callee);
94						callDomLoadFunctions();
95					}
96				});
97				if (win == top) { // if not inside an iframe
98					(function(){
99						if (isDomLoaded) { return; }
100						try {
101							doc.documentElement.doScroll("left");
102						}
103						catch(e) {
104							setTimeout(arguments.callee, 0);
105							return;
106						}
107						callDomLoadFunctions();
108					})();
109				}
110			}
111			if (ua.wk) {
112				(function(){
113					if (isDomLoaded) { return; }
114					if (!/loaded|complete/.test(doc.readyState)) {
115						setTimeout(arguments.callee, 0);
116						return;
117					}
118					callDomLoadFunctions();
119				})();
120			}
121			addLoadEvent(callDomLoadFunctions);
122		}
123	}();
124	
125	function callDomLoadFunctions() {
126		if (isDomLoaded) { return; }
127		try { // test if we can really add/remove elements to/from the DOM; we don't want to fire it too early
128			var t = doc.getElementsByTagName("body")[0].appendChild(createElement("span"));
129			t.parentNode.removeChild(t);
130		}
131		catch (e) { return; }
132		isDomLoaded = true;
133		var dl = domLoadFnArr.length;
134		for (var i = 0; i < dl; i++) {
135			domLoadFnArr[i]();
136		}
137	}
138	
139	function addDomLoadEvent(fn) {
140		if (isDomLoaded) {
141			fn();
142		}
143		else { 
144			domLoadFnArr[domLoadFnArr.length] = fn; // Array.push() is only available in IE5.5+
145		}
146	}
147	
148	/* Cross-browser onload
149		- Based on James Edwards' solution: http://brothercake.com/site/resources/scripts/onload/
150		- Will fire an event as soon as a web page including all of its assets are loaded 
151	 */
152	function addLoadEvent(fn) {
153		if (typeof win.addEventListener != UNDEF) {
154			win.addEventListener("load", fn, false);
155		}
156		else if (typeof doc.addEventListener != UNDEF) {
157			doc.addEventListener("load", fn, false);
158		}
159		else if (typeof win.attachEvent != UNDEF) {
160			addListener(win, "onload", fn);
161		}
162		else if (typeof win.onload == "function") {
163			var fnOld = win.onload;
164			win.onload = function() {
165				fnOld();
166				fn();
167			};
168		}
169		else {
170			win.onload = fn;
171		}
172	}
173	
174	/* Main function
175		- Will preferably execute onDomLoad, otherwise onload (as a fallback)
176	*/
177	function main() { 
178		if (plugin) {
179			testPlayerVersion();
180		}
181		else {
182			matchVersions();
183		}
184	}
185	
186	/* Detect the Flash Player version for non-Internet Explorer browsers
187		- Detecting the plug-in version via the object element is more precise than using the plugins collection item's description:
188		  a. Both release and build numbers can be detected
189		  b. Avoid wrong descriptions by corrupt installers provided by Adobe
190		  c. Avoid wrong descriptions by multiple Flash Player entries in the plugin Array, caused by incorrect browser imports
191		- Disadvantage of this method is that it depends on the availability of the DOM, while the plugins collection is immediately available
192	*/
193	function testPlayerVersion() {
194		var b = doc.getElementsByTagName("body")[0];
195		var o = createElement(OBJECT);
196		o.setAttribute("type", FLASH_MIME_TYPE);
197		var t = b.appendChild(o);
198		if (t) {
199			var counter = 0;
200			(function(){
201				if (typeof t.GetVariable != UNDEF) {
202					var d = t.GetVariable("$version");
203					if (d) {
204						d = d.split(" ")[1].split(",");
205						ua.pv = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
206					}
207				}
208				else if (counter < 10) {
209					counter++;
210					setTimeout(arguments.callee, 10);
211					return;
212				}
213				b.removeChild(o);
214				t = null;
215				matchVersions();
216			})();
217		}
218		else {
219			matchVersions();
220		}
221	}
222	
223	/* Perform Flash Player and SWF version matching; static publishing only
224	*/
225	function matchVersions() {
226		var rl = regObjArr.length;
227		if (rl > 0) {
228			for (var i = 0; i < rl; i++) { // for each registered object element
229				var id = regObjArr[i].id;
230				var cb = regObjArr[i].callbackFn;
231				var cbObj = {success:false, id:id};
232				if (ua.pv[0] > 0) {
233					var obj = getElementById(id);
234					if (obj) {
235						if (hasPlayerVersion(regObjArr[i].swfVersion) && !(ua.wk && ua.wk < 312)) { // Flash Player version >= published SWF version: Houston, we have a match!
236							setVisibility(id, true);
237							if (cb) {
238								cbObj.success = true;
239								cbObj.ref = getObjectById(id);
240								cb(cbObj);
241							}
242						}
243						else if (regObjArr[i].expressInstall && canExpressInstall()) { // show the Adobe Express Install dialog if set by the web page author and if supported
244							var att = {};
245							att.data = regObjArr[i].expressInstall;
246							att.width = obj.getAttribute("width") || "0";
247							att.height = obj.getAttribute("height") || "0";
248							if (obj.getAttribute("class")) { att.styleclass = obj.getAttribute("class"); }
249							if (obj.getAttribute("align")) { att.align = obj.getAttribute("align"); }
250							// parse HTML object param element's name-value pairs
251							var par = {};
252							var p = obj.getElementsByTagName("param");
253							var pl = p.length;
254							for (var j = 0; j < pl; j++) {
255								if (p[j].getAttribute("name").toLowerCase() != "movie") {
256									par[p[j].getAttribute("name")] = p[j].getAttribute("value");
257								}
258							}
259							showExpressInstall(att, par, id, cb);
260						}
261						else { // Flash Player and SWF version mismatch or an older Webkit engine that ignores the HTML object element's nested param elements: display alternative content instead of SWF
262							displayAltContent(obj);
263							if (cb) { cb(cbObj); }
264						}
265					}
266				}
267				else {	// if no Flash Player is installed or the fp version cannot be detected we let the HTML object element do its job (either show a SWF or alternative content)
268					setVisibility(id, true);
269					if (cb) {
270						var o = getObjectById(id); // test whether there is an HTML object element or not
271						if (o && typeof o.SetVariable != UNDEF) { 
272							cbObj.success = true;
273							cbObj.ref = o;
274						}
275						cb(cbObj);
276					}
277				}
278			}
279		}
280	}
281	
282	function getObjectById(objectIdStr) {
283		var r = null;
284		var o = getElementById(objectIdStr);
285		if (o && o.nodeName == "OBJECT") {
286			if (typeof o.SetVariable != UNDEF) {
287				r = o;
288			}
289			else {
290				var n = o.getElementsByTagName(OBJECT)[0];
291				if (n) {
292					r = n;
293				}
294			}
295		}
296		return r;
297	}
298	
299	/* Requirements for Adobe Express Install
300		- only one instance can be active at a time
301		- fp 6.0.65 or higher
302		- Win/Mac OS only
303		- no Webkit engines older than version 312
304	*/
305	function canExpressInstall() {
306		return !isExpressInstallActive && hasPlayerVersion("6.0.65") && (ua.win || ua.mac) && !(ua.wk && ua.wk < 312);
307	}
308	
309	/* Show the Adobe Express Install dialog
310		- Reference: http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=6a253b75
311	*/
312	function showExpressInstall(att, par, replaceElemIdStr, callbackFn) {
313		isExpressInstallActive = true;
314		storedCallbackFn = callbackFn || null;
315		storedCallbackObj = {success:false, id:replaceElemIdStr};
316		var obj = getElementById(replaceElemIdStr);
317		if (obj) {
318			if (obj.nodeName == "OBJECT") { // static publishing
319				storedAltContent = abstractAltContent(obj);
320				storedAltContentId = null;
321			}
322			else { // dynamic publishing
323				storedAltContent = obj;
324				storedAltContentId = replaceElemIdStr;
325			}
326			att.id = EXPRESS_INSTALL_ID;
327			if (typeof att.width == UNDEF || (!/%$/.test(att.width) && parseInt(att.width, 10) < 310)) { att.width = "310"; }
328			if (typeof att.height == UNDEF || (!/%$/.test(att.height) && parseInt(att.height, 10) < 137)) { att.height = "137"; }
329			doc.title = doc.title.slice(0, 47) + " - Flash Player Installation";
330			var pt = ua.ie && ua.win ? "ActiveX" : "PlugIn",
331				fv = "MMredirectURL=" + win.location.toString().replace(/&/g,"%26") + "&MMplayerType=" + pt + "&MMdoctitle=" + doc.title;
332			if (typeof par.flashvars != UNDEF) {
333				par.flashvars += "&" + fv;
334			}
335			else {
336				par.flashvars = fv;
337			}
338			// IE only: when a SWF is loading (AND: not available in cache) wait for the readyState of the object element to become 4 before removing it,
339			// because you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work
340			if (ua.ie && ua.win && obj.readyState != 4) {
341				var newObj = createElement("div");
342				replaceElemIdStr += "SWFObjectNew";
343				newObj.setAttribute("id", replaceElemIdStr);
344				obj.parentNode.insertBefore(newObj, obj); // insert placeholder div that will be replaced by the object element that loads expressinstall.swf
345				obj.style.display = "none";
346				(function(){
347					if (obj.readyState == 4) {
348						obj.parentNode.removeChild(obj);
349					}
350					else {
351						setTimeout(arguments.callee, 10);
352					}
353				})();
354			}
355			createSWF(att, par, replaceElemIdStr);
356		}
357	}
358	
359	/* Functions to abstract and display alternative content
360	*/
361	function displayAltContent(obj) {
362		if (ua.ie && ua.win && obj.readyState != 4) {
363			// IE only: when a SWF is loading (AND: not available in cache) wait for the readyState of the object element to become 4 before removing it,
364			// because you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work
365			var el = createElement("div");
366			obj.parentNode.insertBefore(el, obj); // insert placeholder div that will be replaced by the alternative content
367			el.parentNode.replaceChild(abstractAltContent(obj), el);
368			obj.style.display = "none";
369			(function(){
370				if (obj.readyState == 4) {
371					obj.parentNode.removeChild(obj);
372				}
373				else {
374					setTimeout(arguments.callee, 10);
375				}
376			})();
377		}
378		else {
379			obj.parentNode.replaceChild(abstractAltContent(obj), obj);
380		}
381	} 
382
383	function abstractAltContent(obj) {
384		var ac = createElement("div");
385		if (ua.win && ua.ie) {
386			ac.innerHTML = obj.innerHTML;
387		}
388		else {
389			var nestedObj = obj.getElementsByTagName(OBJECT)[0];
390			if (nestedObj) {
391				var c = nestedObj.childNodes;
392				if (c) {
393					var cl = c.length;
394					for (var i = 0; i < cl; i++) {
395						if (!(c[i].nodeType == 1 && c[i].nodeName == "PARAM") && !(c[i].nodeType == 8)) {
396							ac.appendChild(c[i].cloneNode(true));
397						}
398					}
399				}
400			}
401		}
402		return ac;
403	}
404	
405	/* Cross-browser dynamic SWF creation
406	*/
407	function createSWF(attObj, parObj, id) {
408		var r, el = getElementById(id);
409		if (ua.wk && ua.wk < 312) { return r; }
410		if (el) {
411			if (typeof attObj.id == UNDEF) { // if no 'id' is defined for the object element, it will inherit the 'id' from the alternative content
412				attObj.id = id;
413			}
414			if (ua.ie && ua.win) { // Internet Explorer + the HTML object element + W3C DOM methods do not combine: fall back to outerHTML
415				var att = "";
416				for (var i in attObj) {
417					if (attObj[i] != Object.prototype[i]) { // filter out prototype additions from other potential libraries
418						if (i.toLowerCase() == "data") {
419							parObj.movie = attObj[i];
420						}
421						else if (i.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword
422							att += ' class="' + attObj[i] + '"';
423						}
424						else if (i.toLowerCase() != "classid") {
425							att += ' ' + i + '="' + attObj[i] + '"';
426						}
427					}
428				}
429				var par = "";
430				for (var j in parObj) {
431					if (parObj[j] != Object.prototype[j]) { // filter out prototype additions from other potential libraries
432						par += '<param name="' + j + '" value="' + parObj[j] + '" />';
433					}
434				}
435				el.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + att + '>' + par + '</object>';
436				objIdArr[objIdArr.length] = attObj.id; // stored to fix object 'leaks' on unload (dynamic publishing only)
437				r = getElementById(attObj.id);	
438			}
439			else { // well-behaving browsers
440				var o = createElement(OBJECT);
441				o.setAttribute("type", FLASH_MIME_TYPE);
442				for (var m in attObj) {
443					if (attObj[m] != Object.prototype[m]) { // filter out prototype additions from other potential libraries
444						if (m.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword
445							o.setAttribute("class", attObj[m]);
446						}
447						else if (m.toLowerCase() != "classid") { // filter out IE specific attribute
448							o.setAttribute(m, attObj[m]);
449						}
450					}
451				}
452				for (var n in parObj) {
453					if (parObj[n] != Object.prototype[n] && n.toLowerCase() != "movie") { // filter out prototype additions from other potential libraries and IE specific param element
454						createObjParam(o, n, parObj[n]);
455					}
456				}
457				el.parentNode.replaceChild(o, el);
458				r = o;
459			}
460		}
461		return r;
462	}
463	
464	function createObjParam(el, pName, pValue) {
465		var p = createElement("param");
466		p.setAttribute("name", pName);	
467		p.setAttribute("value", pValue);
468		el.appendChild(p);
469	}
470	
471	/* Cross-browser SWF removal
472		- Especially needed to safely and completely remove a SWF in Internet Explorer
473	*/
474	function removeSWF(id) {
475		var obj = getElementById(id);
476		if (obj && obj.nodeName == "OBJECT") {
477			if (ua.ie && ua.win) {
478				obj.style.display = "none";
479				(function(){
480					if (obj.readyState == 4) {
481						removeObjectInIE(id);
482					}
483					else {
484						setTimeout(arguments.callee, 10);
485					}
486				})();
487			}
488			else {
489				obj.parentNode.removeChild(obj);
490			}
491		}
492	}
493	
494	function removeObjectInIE(id) {
495		var obj = getElementById(id);
496		if (obj) {
497			for (var i in obj) {
498				if (typeof obj[i] == "function") {
499					obj[i] = null;
500				}
501			}
502			obj.parentNode.removeChild(obj);
503		}
504	}
505	
506	/* Functions to optimize JavaScript compression
507	*/
508	function getElementById(id) {
509		var el = null;
510		try {
511			el = doc.getElementById(id);
512		}
513		catch (e) {}
514		return el;
515	}
516	
517	function createElement(el) {
518		return doc.createElement(el);
519	}
520	
521	/* Updated attachEvent function for Internet Explorer
522		- Stores attachEvent information in an Array, so on unload the detachEvent functions can be called to avoid memory leaks
523	*/	
524	function addListener(target, eventType, fn) {
525		target.attachEvent(eventType, fn);
526		listenersArr[listenersArr.length] = [target, eventType, fn];
527	}
528	
529	/* Flash Player and SWF content version matching
530	*/
531	function hasPlayerVersion(rv) {
532		var pv = ua.pv, v = rv.split(".");
533		v[0] = parseInt(v[0], 10);
534		v[1] = parseInt(v[1], 10) || 0; // supports short notation, e.g. "9" instead of "9.0.0"
535		v[2] = parseInt(v[2], 10) || 0;
536		return (pv[0] > v[0] || (pv[0] == v[0] && pv[1] > v[1]) || (pv[0] == v[0] && pv[1] == v[1] && pv[2] >= v[2])) ? true : false;
537	}
538	
539	/* Cross-browser dynamic CSS creation
540		- Based on Bobby van der Sluis' solution: http://www.bobbyvandersluis.com/articles/dynamicCSS.php
541	*/	
542	function createCSS(sel, decl, media, newStyle) {
543		if (ua.ie && ua.mac) { return; }
544		var h = doc.getElementsByTagName("head")[0];
545		if (!h) { return; } // to also support badly authored HTML pages that lack a head element
546		var m = (media && typeof media == "string") ? media : "screen";
547		if (newStyle) {
548			dynamicStylesheet = null;
549			dynamicStylesheetMedia = null;
550		}
551		if (!dynamicStylesheet || dynamicStylesheetMedia != m) { 
552			// create dynamic stylesheet + get a global reference to it
553			var s = createElement("style");
554			s.setAttribute("type", "text/css");
555			s.setAttribute("media", m);
556			dynamicStylesheet = h.appendChild(s);
557			if (ua.ie && ua.win && typeof doc.styleSheets != UNDEF && doc.styleSheets.length > 0) {
558				dynamicStylesheet = doc.styleSheets[doc.styleSheets.length - 1];
559			}
560			dynamicStylesheetMedia = m;
561		}
562		// add style rule
563		if (ua.ie && ua.win) {
564			if (dynamicStylesheet && typeof dynamicStylesheet.addRule == OBJECT) {
565				dynamicStylesheet.addRule(sel, decl);
566			}
567		}
568		else {
569			if (dynamicStylesheet && typeof doc.createTextNode != UNDEF) {
570				dynamicStylesheet.appendChild(doc.createTextNode(sel + " {" + decl + "}"));
571			}
572		}
573	}
574	
575	function setVisibility(id, isVisible) {
576		if (!autoHideShow) { return; }
577		var v = isVisible ? "visible" : "hidden";
578		if (isDomLoaded && getElementById(id)) {
579			getElementById(id).style.visibility = v;
580		}
581		else {
582			createCSS("#" + id, "visibility:" + v);
583		}
584	}
585
586	/* Filter to avoid XSS attacks
587	*/
588	function urlEncodeIfNecessary(s) {
589		var regex = /[\\\"<>\.;]/;
590		var hasBadChars = regex.exec(s) != null;
591		return hasBadChars && typeof encodeURIComponent != UNDEF ? encodeURIComponent(s) : s;
592	}
593	
594	/* Release memory to avoid memory leaks caused by closures, fix hanging audio/video threads and force open sockets/NetConnections to disconnect (Internet Explorer only)
595	*/
596	var cleanup = function() {
597		if (ua.ie && ua.win) {
598			window.attachEvent("onunload", function() {
599				// remove listeners to avoid memory leaks
600				var ll = listenersArr.length;
601				for (var i = 0; i < ll; i++) {
602					listenersArr[i][0].detachEvent(listenersArr[i][1], listenersArr[i][2]);
603				}
604				// cleanup dynamically embedded objects to fix audio/video threads and force open sockets and NetConnections to disconnect
605				var il = objIdArr.length;
606				for (var j = 0; j < il; j++) {
607					removeSWF(objIdArr[j]);
608				}
609				// cleanup library's main closures to avoid memory leaks
610				for (var k in ua) {
611					ua[k] = null;
612				}
613				ua = null;
614				for (var l in audioplayer_swfobject) {
615					audioplayer_swfobject[l] = null;
616				}
617				audioplayer_swfobject = null;
618			});
619		}
620	}();
621	
622	return {
623		/* Public API
624			- Reference: http://code.google.com/p/swfobject/wiki/documentation
625		*/ 
626		registerObject: function(objectIdStr, swfVersionStr, xiSwfUrlStr, callbackFn) {
627			if (ua.w3 && objectIdStr && swfVersionStr) {
628				var regObj = {};
629				regObj.id = objectIdStr;
630				regObj.swfVersion = swfVersionStr;
631				regObj.expressInstall = xiSwfUrlStr;
632				regObj.callbackFn = callbackFn;
633				regObjArr[regObjArr.length] = regObj;
634				setVisibility(objectIdStr, false);
635			}
636			else if (callbackFn) {
637				callbackFn({success:false, id:objectIdStr});
638			}
639		},
640		
641		getObjectById: function(objectIdStr) {
642			if (ua.w3) {
643				return getObjectById(objectIdStr);
644			}
645		},
646		
647		embedSWF: function(swfUrlStr, replaceElemIdStr, widthStr, heightStr, swfVersionStr, xiSwfUrlStr, flashvarsObj, parObj, attObj, callbackFn) {
648			var callbackObj = {success:false, id:replaceElemIdStr};
649			if (ua.w3 && !(ua.wk && ua.wk < 312) && swfUrlStr && replaceElemIdStr && widthStr && heightStr && swfVersionStr) {
650				setVisibility(replaceElemIdStr, false);
651				addDomLoadEvent(function() {
652					widthStr += ""; // auto-convert to string
653					heightStr += "";
654					var att = {};
655					if (attObj && typeof attObj === OBJECT) {
656						for (var i in attObj) { // copy object to avoid the use of references, because web authors often reuse attObj for multiple SWFs
657							att[i] = attObj[i];
658						}
659					}
660					att.data = swfUrlStr;
661					att.width = widthStr;
662					att.height = heightStr;
663					var par = {}; 
664					if (parObj && typeof parObj === OBJECT) {
665						for (var j in parObj) { // copy object to avoid the use of references, because web authors often reuse parObj for multiple SWFs
666							par[j] = parObj[j];
667						}
668					}
669					if (flashvarsObj && typeof flashvarsObj === OBJECT) {
670						for (var k in flashvarsObj) { // copy object to avoid the use of references, because web authors often reuse flashvarsObj for multiple SWFs
671							if (typeof par.flashvars != UNDEF) {
672								par.flashvars += "&" + k + "=" + flashvarsObj[k];
673							}
674							else {
675								par.flashvars = k + "=" + flashvarsObj[k];
676							}
677						}
678					}
679					if (hasPlayerVersion(swfVersionStr)) { // create SWF
680						var obj = createSWF(att, par, replaceElemIdStr);
681						if (att.id == replaceElemIdStr) {
682							setVisibility(replaceElemIdStr, true);
683						}
684						callbackObj.success = true;
685						callbackObj.ref = obj;
686					}
687					else if (xiSwfUrlStr && canExpressInstall()) { // show Adobe Express Install
688						att.data = xiSwfUrlStr;
689						showExpressInstall(att, par, replaceElemIdStr, callbackFn);
690						return;
691					}
692					else { // show alternative content
693						setVisibility(replaceElemIdStr, true);
694					}
695					if (callbackFn) { callbackFn(callbackObj); }
696				});
697			}
698			else if (callbackFn) { callbackFn(callbackObj);	}
699		},
700		
701		switchOffAutoHideShow: function() {
702			autoHideShow = false;
703		},
704		
705		ua: ua,
706		
707		getFlashPlayerVersion: function() {
708			return { major:ua.pv[0], minor:ua.pv[1], release:ua.pv[2] };
709		},
710		
711		hasFlashPlayerVersion: hasPlayerVersion,
712		
713		createSWF: function(attObj, parObj, replaceElemIdStr) {
714			if (ua.w3) {
715				return createSWF(attObj, parObj, replaceElemIdStr);
716			}
717			else {
718				return undefined;
719			}
720		},
721		
722		showExpressInstall: function(att, par, replaceElemIdStr, callbackFn) {
723			if (ua.w3 && canExpressInstall()) {
724				showExpressInstall(att, par, replaceElemIdStr, callbackFn);
725			}
726		},
727		
728		removeSWF: function(objElemIdStr) {
729			if (ua.w3) {
730				removeSWF(objElemIdStr);
731			}
732		},
733		
734		createCSS: function(selStr, declStr, mediaStr, newStyleBoolean) {
735			if (ua.w3) {
736				createCSS(selStr, declStr, mediaStr, newStyleBoolean);
737			}
738		},
739		
740		addDomLoadEvent: addDomLoadEvent,
741		
742		addLoadEvent: addLoadEvent,
743		
744		getQueryParamValue: function(param) {
745			var q = doc.location.search || doc.location.hash;
746			if (q) {
747				if (/\?/.test(q)) { q = q.split("?")[1]; } // strip question mark
748				if (param == null) {
749					return urlEncodeIfNecessary(q);
750				}
751				var pairs = q.split("&");
752				for (var i = 0; i < pairs.length; i++) {
753					if (pairs[i].substring(0, pairs[i].indexOf("=")) == param) {
754						return urlEncodeIfNecessary(pairs[i].substring((pairs[i].indexOf("=") + 1)));
755					}
756				}
757			}
758			return "";
759		},
760		
761		// For internal usage only
762		expressInstallCallback: function() {
763			if (isExpressInstallActive) {
764				var obj = getElementById(EXPRESS_INSTALL_ID);
765				if (obj && storedAltContent) {
766					obj.parentNode.replaceChild(storedAltContent, obj);
767					if (storedAltContentId) {
768						setVisibility(storedAltContentId, true);
769						if (ua.ie && ua.win) { storedAltContent.style.display = "block"; }
770					}
771					if (storedCallbackFn) { storedCallbackFn(storedCallbackObj); }
772				}
773				isExpressInstallActive = false;
774			} 
775		}
776	};
777}();
778var AudioPlayer = function () {
779	var instances = [];
780	var groups = {};
781	var activePlayers = {};
782	var playerURL = "";
783	var defaultOptions = {};
784	var currentVolume = -1;
785	var requiredFlashVersion = "9";
786	
787	function getPlayer(playerID) {
788		if (document.all && !window[playerID]) {
789			for (var i = 0; i < document.forms.length; i++) {
790				if (document.forms[i][playerID]) {
791					return document.forms[i][playerID];
792					break;
793				}
794			}
795		}
796		return document.all ? window[playerID] : document[playerID];
797	}
798	
799	function addListener (playerID, type, func) {
800		getPlayer(playerID).addListener(type, func);
801	}
802	
803	return {
804		setup: function (url, options) {
805			playerURL = url;
806			defaultOptions = options;
807			if (audioplayer_swfobject.hasFlashPlayerVersion(requiredFlashVersion)) {
808				audioplayer_swfobject.switchOffAutoHideShow();
809				audioplayer_swfobject.createCSS("p.audioplayer_container span", "visibility:hidden;height:24px;overflow:hidden;padding:0;border:none;");
810			}
811		},
812
813		getPlayer: function (playerID) {
814			return getPlayer(playerID);
815		},
816		
817		addListener: function (playerID, type, func) {
818			addListener(playerID, type, func);
819		},
820		
821		embed: function (elementID, options) {
822			var instanceOptions = {};
823			var key;
824			
825			var flashParams = {};
826			var flashVars = {};
827			var flashAttributes = {};
828	
829			// Merge default options and instance options
830			for (key in defaultOptions) {
831				instanceOptions[key] = defaultOptions[key];
832			}
833			for (key in options) {
834				instanceOptions[key] = options[key];
835			}
836			
837			if (instanceOptions.transparentpagebg == "yes") {
838				flashParams.bgcolor = "#FFFFFF";
839				flashParams.wmode = "transparent";
840			} else {
841				if (instanceOptions.pagebg) {
842					flashParams.bgcolor = "#" + instanceOptions.pagebg;
843				}
844				flashParams.wmode = "opaque";
845			}
846			
847			flashParams.menu = "false";
848			
849			for (key in instanceOptions) {
850				if (key == "pagebg" || key == "width" || key == "transparentpagebg") {
851					continue;
852				}
853				flashVars[key] = instanceOptions[key];
854			}
855			
856			flashAttributes.name = elementID;
857			flashAttributes.style = "outline: none";
858			
859			flashVars.playerID = elementID;
860			
861			audioplayer_swfobject.embedSWF(playerURL, elementID, instanceOptions.width.toString(), "24", requiredFlashVersion, false, flashVars, flashParams, flashAttributes);
862			
863			instances.push(elementID);
864			
865			if (options.group) {
866				groups[elementID] = options.group;
867			}
868		},
869		
870		syncVolumes: function (playerID, volume) {	
871			if (groups[playerID]) return;
872			currentVolume = volume;
873			for (var i = 0; i < instances.length; i++) {
874				if (!groups[instances[i]] && instances[i] != playerID) {
875					getPlayer(instances[i]).setVolume(currentVolume);
876				}
877			}
878		},
879		
880		activate: function (playerID, info) {
881			for (var activePlayerID in activePlayers) {
882				if (activePlayerID == playerID) {
883					continue;
884				}
885				if (groups[playerID] != groups[activePlayerID]) {
886					this.close(activePlayerID);
887					continue;
888				}
889				if (!(groups[playerID] || groups[activePlayerID])) {
890					this.close(activePlayerID);
891				}
892			}
893			activePlayers[playerID] = 1;
894		},
895		
896		load: function (playerID, soundFile, titles, artists) {
897			getPlayer(playerID).load(soundFile, titles, artists);
898		},
899		
900		close: function (playerID) {
901			getPlayer(playerID).close();
902			if (playerID in activePlayers) {
903				delete activePlayers[playerID];
904			}
905		},
906		
907		open: function (playerID, index) {
908			if (index == undefined) {
909				index = 1;
910			}
911			getPlayer(playerID).open(index == undefined ? 0 : index-1);
912		},
913		
914		getVolume: function (playerID) {
915			return currentVolume;
916		}
917		
918	}
919	
920}();

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.