PageSourceSearch

https://coran-en-ligne.com/js/swfobject.js

js coran-en-ligne.com collected 2026-10-02 18:59:44 UTC 23,467 bytes, 731 lines download raw bytes

1/*! SWFObject v2.1 <http://code.google.com/p/swfobject/>
2	Copyright (c) 2007-2008 Geoff Stearns, Michael Williams, and Bobby van der Sluis
3	This software is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
4*/
5
6var swfobject = function() {
7	
8	var UNDEF = "undefined",
9		OBJECT = "object",
10		SHOCKWAVE_FLASH = "Shockwave Flash",
11		SHOCKWAVE_FLASH_AX = "ShockwaveFlash.ShockwaveFlash",
12		FLASH_MIME_TYPE = "application/x-shockwave-flash",
13		EXPRESS_INSTALL_ID = "SWFObjectExprInst",
14		
15		win = window,
16		doc = document,
17		nav = navigator,
18		
19		domLoadFnArr = [],
20		regObjArr = [],
21		objIdArr = [],
22		listenersArr = [],
23		script,
24		timer = null,
25		storedAltContent = null,
26		storedAltContentId = null,
27		isDomLoaded = false,
28		isExpressInstallActive = false;
29	
30	/* Centralized function for browser feature detection
31		- Proprietary feature detection (conditional compiling) is used to detect Internet Explorer's features
32		- User agent string detection is only used when no alternative is possible
33		- Is executed directly for optimal performance
34	*/	
35	var ua = function() {
36		var w3cdom = typeof doc.getElementById != UNDEF && typeof doc.getElementsByTagName != UNDEF && typeof doc.createElement != UNDEF,
37			playerVersion = [0,0,0],
38			d = null;
39		if (typeof nav.plugins != UNDEF && typeof nav.plugins[SHOCKWAVE_FLASH] == OBJECT) {
40			d = nav.plugins[SHOCKWAVE_FLASH].description;
41			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+
42				d = d.replace(/^.*\s+(\S+\s+\S+$)/, "$1");
43				playerVersion[0] = parseInt(d.replace(/^(.*)\..*$/, "$1"), 10);
44				playerVersion[1] = parseInt(d.replace(/^.*\.(.*)\s.*$/, "$1"), 10);
45				playerVersion[2] = /r/.test(d) ? parseInt(d.replace(/^.*r(.*)$/, "$1"), 10) : 0;
46			}
47		}
48		else if (typeof win.ActiveXObject != UNDEF) {
49			var a = null, fp6Crash = false;
50			try {
51				a = new ActiveXObject(SHOCKWAVE_FLASH_AX + ".7");
52			}
53			catch(e) {
54				try { 
55					a = new ActiveXObject(SHOCKWAVE_FLASH_AX + ".6");
56					playerVersion = [6,0,21];
57					a.AllowScriptAccess = "always";	 // Introduced in fp6.0.47
58				}
59				catch(e) {
60					if (playerVersion[0] == 6) {
61						fp6Crash = true;
62					}
63				}
64				if (!fp6Crash) {
65					try {
66						a = new ActiveXObject(SHOCKWAVE_FLASH_AX);
67					}
68					catch(e) {}
69				}
70			}
71			if (!fp6Crash && a) { // a will return null when ActiveX is disabled
72				try {
73					d = a.GetVariable("$version");	// Will crash fp6.0.21/23/29
74					if (d) {
75						d = d.split(" ")[1].split(",");
76						playerVersion = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
77					}
78				}
79				catch(e) {}
80			}
81		}
82		var u = nav.userAgent.toLowerCase(),
83			p = nav.platform.toLowerCase(),
84			webkit = /webkit/.test(u) ? parseFloat(u.replace(/^.*webkit\/(\d+(\.\d+)?).*$/, "$1")) : false, // returns either the webkit version or false if not webkit
85			ie = false,
86			windows = p ? /win/.test(p) : /win/.test(u),
87			mac = p ? /mac/.test(p) : /mac/.test(u);
88		/*@cc_on
89			ie = true;
90			@if (@_win32)
91				windows = true;
92			@elif (@_mac)
93				mac = true;
94			@end
95		@*/
96		return { w3cdom:w3cdom, pv:playerVersion, webkit:webkit, ie:ie, win:windows, mac:mac };
97	}();
98
99	/* Cross-browser onDomLoad
100		- Based on Dean Edwards' solution: http://dean.edwards.name/weblog/2006/06/again/
101		- Will fire an event as soon as the DOM of a page is loaded (supported by Gecko based browsers - like Firefox -, IE, Opera9+, Safari)
102	*/ 
103	var onDomLoad = function() {
104		if (!ua.w3cdom) {
105			return;
106		}
107		addDomLoadEvent(main);
108		if (ua.ie && ua.win) {
109			try {	 // Avoid a possible Operation Aborted error
110				doc.write("<scr" + "ipt id=__ie_ondomload defer=true src=//:></scr" + "ipt>"); // String is split into pieces to avoid Norton AV to add code that can cause errors 
111				script = getElementById("__ie_ondomload");
112				if (script) {
113					addListener(script, "onreadystatechange", checkReadyState);
114				}
115			}
116			catch(e) {}
117		}
118		if (ua.webkit && typeof doc.readyState != UNDEF) {
119			timer = setInterval(function() { if (/loaded|complete/.test(doc.readyState)) { callDomLoadFunctions(); }}, 10);
120		}
121		if (typeof doc.addEventListener != UNDEF) {
122			doc.addEventListener("DOMContentLoaded", callDomLoadFunctions, null);
123		}
124		addLoadEvent(callDomLoadFunctions);
125	}();
126	
127	function checkReadyState() {
128		if (script.readyState == "complete") {
129			script.parentNode.removeChild(script);
130			callDomLoadFunctions();
131		}
132	}
133	
134	function callDomLoadFunctions() {
135		if (isDomLoaded) {
136			return;
137		}
138		if (ua.ie && ua.win) { // Test if we can really add elements to the DOM; we don't want to fire it too early
139			var s = createElement("span");
140			try { // Avoid a possible Operation Aborted error
141				var t = doc.getElementsByTagName("body")[0].appendChild(s);
142				t.parentNode.removeChild(t);
143			}
144			catch (e) {
145				return;
146			}
147		}
148		isDomLoaded = true;
149		if (timer) {
150			clearInterval(timer);
151			timer = null;
152		}
153		var dl = domLoadFnArr.length;
154		for (var i = 0; i < dl; i++) {
155			domLoadFnArr[i]();
156		}
157	}
158	
159	function addDomLoadEvent(fn) {
160		if (isDomLoaded) {
161			fn();
162		}
163		else { 
164			domLoadFnArr[domLoadFnArr.length] = fn; // Array.push() is only available in IE5.5+
165		}
166	}
167	
168	/* Cross-browser onload
169		- Based on James Edwards' solution: http://brothercake.com/site/resources/scripts/onload/
170		- Will fire an event as soon as a web page including all of its assets are loaded 
171	 */
172	function addLoadEvent(fn) {
173		if (typeof win.addEventListener != UNDEF) {
174			win.addEventListener("load", fn, false);
175		}
176		else if (typeof doc.addEventListener != UNDEF) {
177			doc.addEventListener("load", fn, false);
178		}
179		else if (typeof win.attachEvent != UNDEF) {
180			addListener(win, "onload", fn);
181		}
182		else if (typeof win.onload == "function") {
183			var fnOld = win.onload;
184			win.onload = function() {
185				fnOld();
186				fn();
187			};
188		}
189		else {
190			win.onload = fn;
191		}
192	}
193	
194	/* Main function
195		- Will preferably execute onDomLoad, otherwise onload (as a fallback)
196	*/
197	function main() { // Static publishing only
198		var rl = regObjArr.length;
199		for (var i = 0; i < rl; i++) { // For each registered object element
200			var id = regObjArr[i].id;
201			if (ua.pv[0] > 0) {
202				var obj = getElementById(id);
203				if (obj) {
204					regObjArr[i].width = obj.getAttribute("width") ? obj.getAttribute("width") : "0";
205					regObjArr[i].height = obj.getAttribute("height") ? obj.getAttribute("height") : "0";
206					if (hasPlayerVersion(regObjArr[i].swfVersion)) { // Flash plug-in version >= Flash content version: Houston, we have a match!
207						if (ua.webkit && ua.webkit < 312) { // Older webkit engines ignore the object element's nested param elements
208							fixParams(obj);
209						}
210						setVisibility(id, true);
211					}
212					else if (regObjArr[i].expressInstall && !isExpressInstallActive && hasPlayerVersion("6.0.65") && (ua.win || ua.mac)) { // Show the Adobe Express Install dialog if set by the web page author and if supported (fp6.0.65+ on Win/Mac OS only)
213						showExpressInstall(regObjArr[i]);
214					}
215					else { // Flash plug-in and Flash content version mismatch: display alternative content instead of Flash content
216						displayAltContent(obj);
217					}
218				}
219			}
220			else {	// If no fp is installed, we let the object element do its job (show alternative content)
221				setVisibility(id, true);
222			}
223		}
224	}
225	
226	/* Fix nested param elements, which are ignored by older webkit engines
227		- This includes Safari up to and including version 1.2.2 on Mac OS 10.3
228		- Fall back to the proprietary embed element
229	*/
230	function fixParams(obj) {
231		var nestedObj = obj.getElementsByTagName(OBJECT)[0];
232		if (nestedObj) {
233			var e = createElement("embed"), a = nestedObj.attributes;
234			if (a) {
235				var al = a.length;
236				for (var i = 0; i < al; i++) {
237					if (a[i].nodeName == "DATA") {
238						e.setAttribute("src", a[i].nodeValue);
239					}
240					else {
241						e.setAttribute(a[i].nodeName, a[i].nodeValue);
242					}
243				}
244			}
245			var c = nestedObj.childNodes;
246			if (c) {
247				var cl = c.length;
248				for (var j = 0; j < cl; j++) {
249					if (c[j].nodeType == 1 && c[j].nodeName == "PARAM") {
250						e.setAttribute(c[j].getAttribute("name"), c[j].getAttribute("value"));
251					}
252				}
253			}
254			obj.parentNode.replaceChild(e, obj);
255		}
256	}
257	
258	/* Show the Adobe Express Install dialog
259		- Reference: http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=6a253b75
260	*/
261	function showExpressInstall(regObj) {
262		isExpressInstallActive = true;
263		var obj = getElementById(regObj.id);
264		if (obj) {
265			if (regObj.altContentId) {
266				var ac = getElementById(regObj.altContentId);
267				if (ac) {
268					storedAltContent = ac;
269					storedAltContentId = regObj.altContentId;
270				}
271			}
272			else {
273				storedAltContent = abstractAltContent(obj);
274			}
275			if (!(/%$/.test(regObj.width)) && parseInt(regObj.width, 10) < 310) {
276				regObj.width = "310";
277			}
278			if (!(/%$/.test(regObj.height)) && parseInt(regObj.height, 10) < 137) {
279				regObj.height = "137";
280			}
281			doc.title = doc.title.slice(0, 47) + " - Flash Player Installation";
282			var pt = ua.ie && ua.win ? "ActiveX" : "PlugIn",
283				dt = doc.title,
284				fv = "MMredirectURL=" + win.location + "&MMplayerType=" + pt + "&MMdoctitle=" + dt,
285				replaceId = regObj.id;
286			// For IE when a SWF is loading (AND: not available in cache) wait for the onload event to fire to remove the original object element
287			// In IE you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work
288			if (ua.ie && ua.win && obj.readyState != 4) {
289				var newObj = createElement("div");
290				replaceId += "SWFObjectNew";
291				newObj.setAttribute("id", replaceId);
292				obj.parentNode.insertBefore(newObj, obj); // Insert placeholder div that will be replaced by the object element that loads expressinstall.swf
293				obj.style.display = "none";
294				var fn = function() {
295					obj.parentNode.removeChild(obj);
296				};
297				addListener(win, "onload", fn);
298			}
299			createSWF({ data:regObj.expressInstall, id:EXPRESS_INSTALL_ID, width:regObj.width, height:regObj.height }, { flashvars:fv }, replaceId);
300		}
301	}
302	
303	/* Functions to abstract and display alternative content
304	*/
305	function displayAltContent(obj) {
306		if (ua.ie && ua.win && obj.readyState != 4) {
307			// For IE when a SWF is loading (AND: not available in cache) wait for the onload event to fire to remove the original object element
308			// In IE you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work
309			var el = createElement("div");
310			obj.parentNode.insertBefore(el, obj); // Insert placeholder div that will be replaced by the alternative content
311			el.parentNode.replaceChild(abstractAltContent(obj), el);
312			obj.style.display = "none";
313			var fn = function() {
314				obj.parentNode.removeChild(obj);
315			};
316			addListener(win, "onload", fn);
317		}
318		else {
319			obj.parentNode.replaceChild(abstractAltContent(obj), obj);
320		}
321	} 
322
323	function abstractAltContent(obj) {
324		var ac = createElement("div");
325		if (ua.win && ua.ie) {
326			ac.innerHTML = obj.innerHTML;
327		}
328		else {
329			var nestedObj = obj.getElementsByTagName(OBJECT)[0];
330			if (nestedObj) {
331				var c = nestedObj.childNodes;
332				if (c) {
333					var cl = c.length;
334					for (var i = 0; i < cl; i++) {
335						if (!(c[i].nodeType == 1 && c[i].nodeName == "PARAM") && !(c[i].nodeType == 8)) {
336							ac.appendChild(c[i].cloneNode(true));
337						}
338					}
339				}
340			}
341		}
342		return ac;
343	}
344	
345	/* Cross-browser dynamic SWF creation
346	*/
347	function createSWF(attObj, parObj, id) {
348		var r, el = getElementById(id);
349		if (el) {
350			if (typeof attObj.id == UNDEF) { // if no 'id' is defined for the object element, it will inherit the 'id' from the alternative content
351				attObj.id = id;
352			}
353			if (ua.ie && ua.win) { // IE, the object element and W3C DOM methods do not combine: fall back to outerHTML
354				var att = "";
355				for (var i in attObj) {
356					if (attObj[i] != Object.prototype[i]) { // Filter out prototype additions from other potential libraries, like Object.prototype.toJSONString = function() {}
357						if (i.toLowerCase() == "data") {
358							parObj.movie = attObj[i];
359						}
360						else if (i.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword
361							att += ' class="' + attObj[i] + '"';
362						}
363						else if (i.toLowerCase() != "classid") {
364							att += ' ' + i + '="' + attObj[i] + '"';
365						}
366					}
367				}
368				var par = "";
369				for (var j in parObj) {
370					if (parObj[j] != Object.prototype[j]) { // Filter out prototype additions from other potential libraries
371						par += '<param name="' + j + '" value="' + parObj[j] + '" />';
372					}
373				}
374				el.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + att + '>' + par + '</object>';
375				objIdArr[objIdArr.length] = attObj.id; // Stored to fix object 'leaks' on unload (dynamic publishing only)
376				r = getElementById(attObj.id);	
377			}
378			else if (ua.webkit && ua.webkit < 312) { // Older webkit engines ignore the object element's nested param elements: fall back to the proprietary embed element
379				var e = createElement("embed");
380				e.setAttribute("type", FLASH_MIME_TYPE);
381				for (var k in attObj) {
382					if (attObj[k] != Object.prototype[k]) { // Filter out prototype additions from other potential libraries
383						if (k.toLowerCase() == "data") {
384							e.setAttribute("src", attObj[k]);
385						}
386						else if (k.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword
387							e.setAttribute("class", attObj[k]);
388						}
389						else if (k.toLowerCase() != "classid") { // Filter out IE specific attribute
390							e.setAttribute(k, attObj[k]);
391						}
392					}
393				}
394				for (var l in parObj) {
395					if (parObj[l] != Object.prototype[l]) { // Filter out prototype additions from other potential libraries
396						if (l.toLowerCase() != "movie") { // Filter out IE specific param element
397							e.setAttribute(l, parObj[l]);
398						}
399					}
400				}
401				el.parentNode.replaceChild(e, el);
402				r = e;
403			}
404			else { // Well-behaving browsers
405				var o = createElement(OBJECT);
406				o.setAttribute("type", FLASH_MIME_TYPE);
407				for (var m in attObj) {
408					if (attObj[m] != Object.prototype[m]) { // Filter out prototype additions from other potential libraries
409						if (m.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword
410							o.setAttribute("class", attObj[m]);
411						}
412						else if (m.toLowerCase() != "classid") { // Filter out IE specific attribute
413							o.setAttribute(m, attObj[m]);
414						}
415					}
416				}
417				for (var n in parObj) {
418					if (parObj[n] != Object.prototype[n] && n.toLowerCase() != "movie") { // Filter out prototype additions from other potential libraries and IE specific param element
419						createObjParam(o, n, parObj[n]);
420					}
421				}
422				el.parentNode.replaceChild(o, el);
423				r = o;
424			}
425		}
426		return r;
427	}
428	
429	function createObjParam(el, pName, pValue) {
430		var p = createElement("param");
431		p.setAttribute("name", pName);	
432		p.setAttribute("value", pValue);
433		el.appendChild(p);
434	}
435	
436	/* Cross-browser SWF removal
437		- Especially needed to safely and completely remove a SWF in Internet Explorer
438	*/
439	function removeSWF(id) {
440		var obj = getElementById(id);
441		if (obj && (obj.nodeName == "OBJECT" || obj.nodeName == "EMBED")) {
442			if (ua.ie && ua.win) {
443				if (obj.readyState == 4) {
444					removeObjectInIE(id);
445				}
446				else {
447					win.attachEvent("onload", function() {
448						removeObjectInIE(id);
449					});
450				}
451			}
452			else {
453				obj.parentNode.removeChild(obj);
454			}
455		}
456	}
457	
458	function removeObjectInIE(id) {
459		var obj = getElementById(id);
460		if (obj) {
461			for (var i in obj) {
462				if (typeof obj[i] == "function") {
463					obj[i] = null;
464				}
465			}
466			obj.parentNode.removeChild(obj);
467		}
468	}
469	
470	/* Functions to optimize JavaScript compression
471	*/
472	function getElementById(id) {
473		var el = null;
474		try {
475			el = doc.getElementById(id);
476		}
477		catch (e) {}
478		return el;
479	}
480	
481	function createElement(el) {
482		return doc.createElement(el);
483	}
484	
485	/* Updated attachEvent function for Internet Explorer
486		- Stores attachEvent information in an Array, so on unload the detachEvent functions can be called to avoid memory leaks
487	*/	
488	function addListener(target, eventType, fn) {
489		target.attachEvent(eventType, fn);
490		listenersArr[listenersArr.length] = [target, eventType, fn];
491	}
492	
493	/* Flash Player and SWF content version matching
494	*/
495	function hasPlayerVersion(rv) {
496		var pv = ua.pv, v = rv.split(".");
497		v[0] = parseInt(v[0], 10);
498		v[1] = parseInt(v[1], 10) || 0; // supports short notation, e.g. "9" instead of "9.0.0"
499		v[2] = parseInt(v[2], 10) || 0;
500		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;
501	}
502	
503	/* Cross-browser dynamic CSS creation
504		- Based on Bobby van der Sluis' solution: http://www.bobbyvandersluis.com/articles/dynamicCSS.php
505	*/	
506	function createCSS(sel, decl) {
507		if (ua.ie && ua.mac) {
508			return;
509		}
510		var h = doc.getElementsByTagName("head")[0], s = createElement("style");
511		s.setAttribute("type", "text/css");
512		s.setAttribute("media", "screen");
513		if (!(ua.ie && ua.win) && typeof doc.createTextNode != UNDEF) {
514			s.appendChild(doc.createTextNode(sel + " {" + decl + "}"));
515		}
516		h.appendChild(s);
517		if (ua.ie && ua.win && typeof doc.styleSheets != UNDEF && doc.styleSheets.length > 0) {
518			var ls = doc.styleSheets[doc.styleSheets.length - 1];
519			if (typeof ls.addRule == OBJECT) {
520				ls.addRule(sel, decl);
521			}
522		}
523	}
524	
525	function setVisibility(id, isVisible) {
526		var v = isVisible ? "visible" : "hidden";
527		if (isDomLoaded && getElementById(id)) {
528			getElementById(id).style.visibility = v;
529		}
530		else {
531			createCSS("#" + id, "visibility:" + v);
532		}
533	}
534
535	/* Filter to avoid XSS attacks 
536	*/
537	function urlEncodeIfNecessary(s) {
538		var regex = /[\\\"<>\.;]/;
539		var hasBadChars = regex.exec(s) != null;
540		return hasBadChars ? encodeURIComponent(s) : s;
541	}
542	
543	/* Release memory to avoid memory leaks caused by closures, fix hanging audio/video threads and force open sockets/NetConnections to disconnect (Internet Explorer only)
544	*/
545	var cleanup = function() {
546		if (ua.ie && ua.win) {
547			window.attachEvent("onunload", function() {
548				// remove listeners to avoid memory leaks
549				var ll = listenersArr.length;
550				for (var i = 0; i < ll; i++) {
551					listenersArr[i][0].detachEvent(listenersArr[i][1], listenersArr[i][2]);
552				}
553				// cleanup dynamically embedded objects to fix audio/video threads and force open sockets and NetConnections to disconnect
554				var il = objIdArr.length;
555				for (var j = 0; j < il; j++) {
556					removeSWF(objIdArr[j]);
557				}
558				// cleanup library's main closures to avoid memory leaks
559				for (var k in ua) {
560					ua[k] = null;
561				}
562				ua = null;
563				for (var l in swfobject) {
564					swfobject[l] = null;
565				}
566				swfobject = null;
567			});
568		}
569	}();
570	
571	
572	return {
573		/* Public API
574			- Reference: http://code.google.com/p/swfobject/wiki/SWFObject_2_0_documentation
575		*/ 
576		registerObject: function(objectIdStr, swfVersionStr, xiSwfUrlStr) {
577			if (!ua.w3cdom || !objectIdStr || !swfVersionStr) {
578				return;
579			}
580			var regObj = {};
581			regObj.id = objectIdStr;
582			regObj.swfVersion = swfVersionStr;
583			regObj.expressInstall = xiSwfUrlStr ? xiSwfUrlStr : false;
584			regObjArr[regObjArr.length] = regObj;
585			setVisibility(objectIdStr, false);
586		},
587		
588		getObjectById: function(objectIdStr) {
589			var r = null;
590			if (ua.w3cdom) {
591				var o = getElementById(objectIdStr);
592				if (o) {
593					var n = o.getElementsByTagName(OBJECT)[0];
594					if (!n || (n && typeof o.SetVariable != UNDEF)) {
595							r = o;
596					}
597					else if (typeof n.SetVariable != UNDEF) {
598						r = n;
599					}
600				}
601			}
602			return r;
603		},
604		
605		embedSWF: function(swfUrlStr, replaceElemIdStr, widthStr, heightStr, swfVersionStr, xiSwfUrlStr, flashvarsObj, parObj, attObj) {
606			if (!ua.w3cdom || !swfUrlStr || !replaceElemIdStr || !widthStr || !heightStr || !swfVersionStr) {
607				return;
608			}
609			widthStr += ""; // Auto-convert to string
610			heightStr += "";
611			if (hasPlayerVersion(swfVersionStr)) {
612				setVisibility(replaceElemIdStr, false);
613				var att = {};
614				if (attObj && typeof attObj === OBJECT) {
615					for (var i in attObj) {
616						if (attObj[i] != Object.prototype[i]) { // Filter out prototype additions from other potential libraries
617							att[i] = attObj[i];
618						}
619					}
620				}
621				att.data = swfUrlStr;
622				att.width = widthStr;
623				att.height = heightStr;
624				var par = {}; 
625				if (parObj && typeof parObj === OBJECT) {
626					for (var j in parObj) {
627						if (parObj[j] != Object.prototype[j]) { // Filter out prototype additions from other potential libraries
628							par[j] = parObj[j];
629						}
630					}
631				}
632				if (flashvarsObj && typeof flashvarsObj === OBJECT) {
633					for (var k in flashvarsObj) {
634						if (flashvarsObj[k] != Object.prototype[k]) { // Filter out prototype additions from other potential libraries
635							if (typeof par.flashvars != UNDEF) {
636								par.flashvars += "&" + k + "=" + flashvarsObj[k];
637							}
638							else {
639								par.flashvars = k + "=" + flashvarsObj[k];
640							}
641						}
642					}
643				}
644				addDomLoadEvent(function() {
645					createSWF(att, par, replaceElemIdStr);
646					if (att.id == replaceElemIdStr) {
647						setVisibility(replaceElemIdStr, true);
648					}
649				});
650			}
651			else if (xiSwfUrlStr && !isExpressInstallActive && hasPlayerVersion("6.0.65") && (ua.win || ua.mac)) {
652				isExpressInstallActive = true; // deferred execution
653				setVisibility(replaceElemIdStr, false);
654				addDomLoadEvent(function() {
655					var regObj = {};
656					regObj.id = regObj.altContentId = replaceElemIdStr;
657					regObj.width = widthStr;
658					regObj.height = heightStr;
659					regObj.expressInstall = xiSwfUrlStr;
660					showExpressInstall(regObj);
661				});
662			}
663		},
664		
665		getFlashPlayerVersion: function() {
666			return { major:ua.pv[0], minor:ua.pv[1], release:ua.pv[2] };
667		},
668		
669		hasFlashPlayerVersion: hasPlayerVersion,
670		
671		createSWF: function(attObj, parObj, replaceElemIdStr) {
672			if (ua.w3cdom) {
673				return createSWF(attObj, parObj, replaceElemIdStr);
674			}
675			else {
676				return undefined;
677			}
678		},
679		
680		removeSWF: function(objElemIdStr) {
681			if (ua.w3cdom) {
682				removeSWF(objElemIdStr);
683			}
684		},
685		
686		createCSS: function(sel, decl) {
687			if (ua.w3cdom) {
688				createCSS(sel, decl);
689			}
690		},
691		
692		addDomLoadEvent: addDomLoadEvent,
693		
694		addLoadEvent: addLoadEvent,
695		
696		getQueryParamValue: function(param) {
697			var q = doc.location.search || doc.location.hash;
698			if (param == null) {
699				return urlEncodeIfNecessary(q);
700			}
701			if (q) {
702				var pairs = q.substring(1).split("&");
703				for (var i = 0; i < pairs.length; i++) {
704					if (pairs[i].substring(0, pairs[i].indexOf("=")) == param) {
705						return urlEncodeIfNecessary(pairs[i].substring((pairs[i].indexOf("=") + 1)));
706					}
707				}
708			}
709			return "";
710		},
711		
712		// For internal usage only
713		expressInstallCallback: function() {
714			if (isExpressInstallActive && storedAltContent) {
715				var obj = getElementById(EXPRESS_INSTALL_ID);
716				if (obj) {
717					obj.parentNode.replaceChild(storedAltContent, obj);
718					if (storedAltContentId) {
719						setVisibility(storedAltContentId, true);
720						if (ua.ie && ua.win) {
721							storedAltContent.style.display = "block";
722						}
723					}
724					storedAltContent = null;
725					storedAltContentId = null;
726					isExpressInstallActive = false;
727				}
728			} 
729		}
730	};
731}();

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.