3 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
4 <title>The source code</title>
5 <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
6 <script type="text/javascript" src="../resources/prettify/prettify.js"></script>
8 <body onload="prettyPrint();">
9 <pre class="prettyprint lang-js">/*!
10 * Ext JS Library 3.2.1
11 * Copyright(c) 2006-2010 Ext JS, Inc.
13 * http://www.extjs.com/license
15 /*! SWFObject v2.2 <http://code.google.com/p/swfobject/>
16 is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
19 var swfobject = function() {
21 var UNDEF = "undefined",
23 SHOCKWAVE_FLASH = "Shockwave Flash",
24 SHOCKWAVE_FLASH_AX = "ShockwaveFlash.ShockwaveFlash",
25 FLASH_MIME_TYPE = "application/x-shockwave-flash",
26 EXPRESS_INSTALL_ID = "SWFObjectExprInst",
27 ON_READY_STATE_CHANGE = "onreadystatechange",
34 domLoadFnArr = [main],
43 isExpressInstallActive = false,
45 dynamicStylesheetMedia,
48 /* Centralized function for browser feature detection
49 - User agent string detection is only used when no good alternative is possible
50 - Is executed directly for optimal performance
53 var w3cdom = typeof doc.getElementById != UNDEF && typeof doc.getElementsByTagName != UNDEF && typeof doc.createElement != UNDEF,
54 u = nav.userAgent.toLowerCase(),
55 p = nav.platform.toLowerCase(),
56 windows = p ? /win/.test(p) : /win/.test(u),
57 mac = p ? /mac/.test(p) : /mac/.test(u),
58 webkit = /webkit/.test(u) ? parseFloat(u.replace(/^.*webkit\/(\d+(\.\d+)?).*$/, "$1")) : false, // returns either the webkit version or false if not webkit
59 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
60 playerVersion = [0,0,0],
62 if (typeof nav.plugins != UNDEF && typeof nav.plugins[SHOCKWAVE_FLASH] == OBJECT) {
63 d = nav.plugins[SHOCKWAVE_FLASH].description;
64 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+
66 ie = false; // cascaded feature detection for Internet Explorer
67 d = d.replace(/^.*\s+(\S+\s+\S+$)/, "$1");
68 playerVersion[0] = parseInt(d.replace(/^(.*)\..*$/, "$1"), 10);
69 playerVersion[1] = parseInt(d.replace(/^.*\.(.*)\s.*$/, "$1"), 10);
70 playerVersion[2] = /[a-zA-Z]/.test(d) ? parseInt(d.replace(/^.*[a-zA-Z]+(.*)$/, "$1"), 10) : 0;
73 else if (typeof win.ActiveXObject != UNDEF) {
75 var a = new ActiveXObject(SHOCKWAVE_FLASH_AX);
76 if (a) { // a will return null when ActiveX is disabled
77 d = a.GetVariable("$version");
79 ie = true; // cascaded feature detection for Internet Explorer
80 d = d.split(" ")[1].split(",");
81 playerVersion = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
87 return { w3:w3cdom, pv:playerVersion, wk:webkit, ie:ie, win:windows, mac:mac };
90 /* Cross-browser onDomLoad
91 - Will fire an event as soon as the DOM of a web page is loaded
92 - Internet Explorer workaround based on Diego Perini's solution: http://javascript.nwbox.com/IEContentLoaded/
93 - Regular onload serves as fallback
95 onDomLoad = function() {
96 if (!ua.w3) { return; }
97 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
98 callDomLoadFunctions();
101 if (typeof doc.addEventListener != UNDEF) {
102 doc.addEventListener("DOMContentLoaded", callDomLoadFunctions, false);
104 if (ua.ie && ua.win) {
105 doc.attachEvent(ON_READY_STATE_CHANGE, function() {
106 if (doc.readyState == "complete") {
107 doc.detachEvent(ON_READY_STATE_CHANGE, arguments.callee);
108 callDomLoadFunctions();
111 if (win == top) { // if not inside an iframe
113 if (isDomLoaded) { return; }
115 doc.documentElement.doScroll("left");
118 setTimeout(arguments.callee, 0);
121 callDomLoadFunctions();
127 if (isDomLoaded) { return; }
128 if (!/loaded|complete/.test(doc.readyState)) {
129 setTimeout(arguments.callee, 0);
132 callDomLoadFunctions();
135 addLoadEvent(callDomLoadFunctions);
139 function callDomLoadFunctions() {
140 if (isDomLoaded) { return; }
141 try { // test if we can really add/remove elements to/from the DOM; we don't want to fire it too early
142 var t = doc.getElementsByTagName("body")[0].appendChild(createElement("span"));
143 t.parentNode.removeChild(t);
145 catch (e) { return; }
147 var dl = domLoadFnArr.length;
148 for (var i = 0; i < dl; i++) {
153 function addDomLoadEvent(fn) {
158 domLoadFnArr[domLoadFnArr.length] = fn; // Array.push() is only available in IE5.5+
162 /* Cross-browser onload
163 - Based on James Edwards' solution: http://brothercake.com/site/resources/scripts/onload/
164 - Will fire an event as soon as a web page including all of its assets are loaded
166 function addLoadEvent(fn) {
167 if (typeof win.addEventListener != UNDEF) {
168 win.addEventListener("load", fn, false);
170 else if (typeof doc.addEventListener != UNDEF) {
171 doc.addEventListener("load", fn, false);
173 else if (typeof win.attachEvent != UNDEF) {
174 addListener(win, "onload", fn);
176 else if (typeof win.onload == "function") {
177 var fnOld = win.onload;
178 win.onload = function() {
189 - Will preferably execute onDomLoad, otherwise onload (as a fallback)
200 /* Detect the Flash Player version for non-Internet Explorer browsers
201 - Detecting the plug-in version via the object element is more precise than using the plugins collection item's description:
202 a. Both release and build numbers can be detected
203 b. Avoid wrong descriptions by corrupt installers provided by Adobe
204 c. Avoid wrong descriptions by multiple Flash Player entries in the plugin Array, caused by incorrect browser imports
205 - Disadvantage of this method is that it depends on the availability of the DOM, while the plugins collection is immediately available
207 function testPlayerVersion() {
208 var b = doc.getElementsByTagName("body")[0];
209 var o = createElement(OBJECT);
210 o.setAttribute("type", FLASH_MIME_TYPE);
211 var t = b.appendChild(o);
215 if (typeof t.GetVariable != UNDEF) {
216 var d = t.GetVariable("$version");
218 d = d.split(" ")[1].split(",");
219 ua.pv = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
222 else if (counter < 10) {
224 setTimeout(arguments.callee, 10);
237 /* Perform Flash Player and SWF version matching; static publishing only
239 function matchVersions() {
240 var rl = regObjArr.length;
242 for (var i = 0; i < rl; i++) { // for each registered object element
243 var id = regObjArr[i].id;
244 var cb = regObjArr[i].callbackFn;
245 var cbObj = {success:false, id:id};
247 var obj = getElementById(id);
249 if (hasPlayerVersion(regObjArr[i].swfVersion) && !(ua.wk && ua.wk < 312)) { // Flash Player version >= published SWF version: Houston, we have a match!
250 setVisibility(id, true);
252 cbObj.success = true;
253 cbObj.ref = getObjectById(id);
257 else if (regObjArr[i].expressInstall && canExpressInstall()) { // show the Adobe Express Install dialog if set by the web page author and if supported
259 att.data = regObjArr[i].expressInstall;
260 att.width = obj.getAttribute("width") || "0";
261 att.height = obj.getAttribute("height") || "0";
262 if (obj.getAttribute("class")) { att.styleclass = obj.getAttribute("class"); }
263 if (obj.getAttribute("align")) { att.align = obj.getAttribute("align"); }
264 // parse HTML object param element's name-value pairs
266 var p = obj.getElementsByTagName("param");
268 for (var j = 0; j < pl; j++) {
269 if (p[j].getAttribute("name").toLowerCase() != "movie") {
270 par[p[j].getAttribute("name")] = p[j].getAttribute("value");
273 showExpressInstall(att, par, id, cb);
275 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
276 displayAltContent(obj);
277 if (cb) { cb(cbObj); }
281 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)
282 setVisibility(id, true);
284 var o = getObjectById(id); // test whether there is an HTML object element or not
285 if (o && typeof o.SetVariable != UNDEF) {
286 cbObj.success = true;
296 function getObjectById(objectIdStr) {
298 var o = getElementById(objectIdStr);
299 if (o && o.nodeName == "OBJECT") {
300 if (typeof o.SetVariable != UNDEF) {
304 var n = o.getElementsByTagName(OBJECT)[0];
313 /* Requirements for Adobe Express Install
314 - only one instance can be active at a time
315 - fp 6.0.65 or higher
317 - no Webkit engines older than version 312
319 function canExpressInstall() {
320 return !isExpressInstallActive && hasPlayerVersion("6.0.65") && (ua.win || ua.mac) && !(ua.wk && ua.wk < 312);
323 /* Show the Adobe Express Install dialog
324 - Reference: http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=6a253b75
326 function showExpressInstall(att, par, replaceElemIdStr, callbackFn) {
327 isExpressInstallActive = true;
328 storedCallbackFn = callbackFn || null;
329 storedCallbackObj = {success:false, id:replaceElemIdStr};
330 var obj = getElementById(replaceElemIdStr);
332 if (obj.nodeName == "OBJECT") { // static publishing
333 storedAltContent = abstractAltContent(obj);
334 storedAltContentId = null;
336 else { // dynamic publishing
337 storedAltContent = obj;
338 storedAltContentId = replaceElemIdStr;
340 att.id = EXPRESS_INSTALL_ID;
341 if (typeof att.width == UNDEF || (!/%$/.test(att.width) && parseInt(att.width, 10) < 310)) { att.width = "310"; }
342 if (typeof att.height == UNDEF || (!/%$/.test(att.height) && parseInt(att.height, 10) < 137)) { att.height = "137"; }
343 doc.title = doc.title.slice(0, 47) + " - Flash Player Installation";
344 var pt = ua.ie && ua.win ? "ActiveX" : "PlugIn",
345 fv = "MMredirectURL=" + win.location.toString().replace(/&/g,"%26") + "&MMplayerType=" + pt + "&MMdoctitle=" + doc.title;
346 if (typeof par.flashvars != UNDEF) {
347 par.flashvars += "&" + fv;
352 // 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,
353 // because you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work
354 if (ua.ie && ua.win && obj.readyState != 4) {
355 var newObj = createElement("div");
356 replaceElemIdStr += "SWFObjectNew";
357 newObj.setAttribute("id", replaceElemIdStr);
358 obj.parentNode.insertBefore(newObj, obj); // insert placeholder div that will be replaced by the object element that loads expressinstall.swf
359 obj.style.display = "none";
361 if (obj.readyState == 4) {
362 obj.parentNode.removeChild(obj);
365 setTimeout(arguments.callee, 10);
369 createSWF(att, par, replaceElemIdStr);
373 /* Functions to abstract and display alternative content
375 function displayAltContent(obj) {
376 if (ua.ie && ua.win && obj.readyState != 4) {
377 // 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,
378 // because you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work
379 var el = createElement("div");
380 obj.parentNode.insertBefore(el, obj); // insert placeholder div that will be replaced by the alternative content
381 el.parentNode.replaceChild(abstractAltContent(obj), el);
382 obj.style.display = "none";
384 if (obj.readyState == 4) {
385 obj.parentNode.removeChild(obj);
388 setTimeout(arguments.callee, 10);
393 obj.parentNode.replaceChild(abstractAltContent(obj), obj);
397 function abstractAltContent(obj) {
398 var ac = createElement("div");
399 if (ua.win && ua.ie) {
400 ac.innerHTML = obj.innerHTML;
403 var nestedObj = obj.getElementsByTagName(OBJECT)[0];
405 var c = nestedObj.childNodes;
408 for (var i = 0; i < cl; i++) {
409 if (!(c[i].nodeType == 1 && c[i].nodeName == "PARAM") && !(c[i].nodeType == 8)) {
410 ac.appendChild(c[i].cloneNode(true));
419 /* Cross-browser dynamic SWF creation
421 function createSWF(attObj, parObj, id) {
422 var r, el = getElementById(id);
423 if (ua.wk && ua.wk < 312) { return r; }
425 if (typeof attObj.id == UNDEF) { // if no 'id' is defined for the object element, it will inherit the 'id' from the alternative content
428 if (ua.ie && ua.win) { // Internet Explorer + the HTML object element + W3C DOM methods do not combine: fall back to outerHTML
430 for (var i in attObj) {
431 if (attObj[i] != Object.prototype[i]) { // filter out prototype additions from other potential libraries
432 if (i.toLowerCase() == "data") {
433 parObj.movie = attObj[i];
435 else if (i.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword
436 att += ' class="' + attObj[i] + '"';
438 else if (i.toLowerCase() != "classid") {
439 att += ' ' + i + '="' + attObj[i] + '"';
444 for (var j in parObj) {
445 if (parObj[j] != Object.prototype[j]) { // filter out prototype additions from other potential libraries
446 par += '<param name="' + j + '" value="' + parObj[j] + '" />';
449 el.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + att + '>' + par + '</object>';
450 objIdArr[objIdArr.length] = attObj.id; // stored to fix object 'leaks' on unload (dynamic publishing only)
451 r = getElementById(attObj.id);
453 else { // well-behaving browsers
454 var o = createElement(OBJECT);
455 o.setAttribute("type", FLASH_MIME_TYPE);
456 for (var m in attObj) {
457 if (attObj[m] != Object.prototype[m]) { // filter out prototype additions from other potential libraries
458 if (m.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword
459 o.setAttribute("class", attObj[m]);
461 else if (m.toLowerCase() != "classid") { // filter out IE specific attribute
462 o.setAttribute(m, attObj[m]);
466 for (var n in parObj) {
467 if (parObj[n] != Object.prototype[n] && n.toLowerCase() != "movie") { // filter out prototype additions from other potential libraries and IE specific param element
468 createObjParam(o, n, parObj[n]);
471 el.parentNode.replaceChild(o, el);
478 function createObjParam(el, pName, pValue) {
479 var p = createElement("param");
480 p.setAttribute("name", pName);
481 p.setAttribute("value", pValue);
485 /* Cross-browser SWF removal
486 - Especially needed to safely and completely remove a SWF in Internet Explorer
488 function removeSWF(id) {
489 var obj = getElementById(id);
490 if (obj && obj.nodeName == "OBJECT") {
491 if (ua.ie && ua.win) {
492 obj.style.display = "none";
494 if (obj.readyState == 4) {
495 removeObjectInIE(id);
498 setTimeout(arguments.callee, 10);
503 obj.parentNode.removeChild(obj);
508 function removeObjectInIE(id) {
509 var obj = getElementById(id);
512 if (typeof obj[i] == "function") {
516 obj.parentNode.removeChild(obj);
520 /* Functions to optimize JavaScript compression
522 function getElementById(id) {
525 el = doc.getElementById(id);
531 function createElement(el) {
532 return doc.createElement(el);
535 /* Updated attachEvent function for Internet Explorer
536 - Stores attachEvent information in an Array, so on unload the detachEvent functions can be called to avoid memory leaks
538 function addListener(target, eventType, fn) {
539 target.attachEvent(eventType, fn);
540 listenersArr[listenersArr.length] = [target, eventType, fn];
543 /* Flash Player and SWF content version matching
545 function hasPlayerVersion(rv) {
546 var pv = ua.pv, v = rv.split(".");
547 v[0] = parseInt(v[0], 10);
548 v[1] = parseInt(v[1], 10) || 0; // supports short notation, e.g. "9" instead of "9.0.0"
549 v[2] = parseInt(v[2], 10) || 0;
550 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;
553 /* Cross-browser dynamic CSS creation
554 - Based on Bobby van der Sluis' solution: http://www.bobbyvandersluis.com/articles/dynamicCSS.php
556 function createCSS(sel, decl, media, newStyle) {
557 if (ua.ie && ua.mac) { return; }
558 var h = doc.getElementsByTagName("head")[0];
559 if (!h) { return; } // to also support badly authored HTML pages that lack a head element
560 var m = (media && typeof media == "string") ? media : "screen";
562 dynamicStylesheet = null;
563 dynamicStylesheetMedia = null;
565 if (!dynamicStylesheet || dynamicStylesheetMedia != m) {
566 // create dynamic stylesheet + get a global reference to it
567 var s = createElement("style");
568 s.setAttribute("type", "text/css");
569 s.setAttribute("media", m);
570 dynamicStylesheet = h.appendChild(s);
571 if (ua.ie && ua.win && typeof doc.styleSheets != UNDEF && doc.styleSheets.length > 0) {
572 dynamicStylesheet = doc.styleSheets[doc.styleSheets.length - 1];
574 dynamicStylesheetMedia = m;
577 if (ua.ie && ua.win) {
578 if (dynamicStylesheet && typeof dynamicStylesheet.addRule == OBJECT) {
579 dynamicStylesheet.addRule(sel, decl);
583 if (dynamicStylesheet && typeof doc.createTextNode != UNDEF) {
584 dynamicStylesheet.appendChild(doc.createTextNode(sel + " {" + decl + "}"));
589 function setVisibility(id, isVisible) {
590 if (!autoHideShow) { return; }
591 var v = isVisible ? "visible" : "hidden";
592 if (isDomLoaded && getElementById(id)) {
593 getElementById(id).style.visibility = v;
596 createCSS("#" + id, "visibility:" + v);
600 /* Filter to avoid XSS attacks
602 function urlEncodeIfNecessary(s) {
603 var regex = /[\\\"<>\.;]/;
604 var hasBadChars = regex.exec(s) != null;
605 return hasBadChars && typeof encodeURIComponent != UNDEF ? encodeURIComponent(s) : s;
608 /* Release memory to avoid memory leaks caused by closures, fix hanging audio/video threads and force open sockets/NetConnections to disconnect (Internet Explorer only)
610 var cleanup = function() {
611 if (ua.ie && ua.win) {
612 window.attachEvent("onunload", function() {
613 // remove listeners to avoid memory leaks
614 var ll = listenersArr.length;
615 for (var i = 0; i < ll; i++) {
616 listenersArr[i][0].detachEvent(listenersArr[i][1], listenersArr[i][2]);
618 // cleanup dynamically embedded objects to fix audio/video threads and force open sockets and NetConnections to disconnect
619 var il = objIdArr.length;
620 for (var j = 0; j < il; j++) {
621 removeSWF(objIdArr[j]);
623 // cleanup library's main closures to avoid memory leaks
628 for (var l in swfobject) {
638 - Reference: http://code.google.com/p/swfobject/wiki/documentation
640 registerObject: function(objectIdStr, swfVersionStr, xiSwfUrlStr, callbackFn) {
641 if (ua.w3 && objectIdStr && swfVersionStr) {
643 regObj.id = objectIdStr;
644 regObj.swfVersion = swfVersionStr;
645 regObj.expressInstall = xiSwfUrlStr;
646 regObj.callbackFn = callbackFn;
647 regObjArr[regObjArr.length] = regObj;
648 setVisibility(objectIdStr, false);
650 else if (callbackFn) {
651 callbackFn({success:false, id:objectIdStr});
655 getObjectById: function(objectIdStr) {
657 return getObjectById(objectIdStr);
661 embedSWF: function(swfUrlStr, replaceElemIdStr, widthStr, heightStr, swfVersionStr, xiSwfUrlStr, flashvarsObj, parObj, attObj, callbackFn) {
662 var callbackObj = {success:false, id:replaceElemIdStr};
663 if (ua.w3 && !(ua.wk && ua.wk < 312) && swfUrlStr && replaceElemIdStr && widthStr && heightStr && swfVersionStr) {
664 setVisibility(replaceElemIdStr, false);
665 addDomLoadEvent(function() {
666 widthStr += ""; // auto-convert to string
669 if (attObj && typeof attObj === OBJECT) {
670 for (var i in attObj) { // copy object to avoid the use of references, because web authors often reuse attObj for multiple SWFs
674 att.data = swfUrlStr;
675 att.width = widthStr;
676 att.height = heightStr;
678 if (parObj && typeof parObj === OBJECT) {
679 for (var j in parObj) { // copy object to avoid the use of references, because web authors often reuse parObj for multiple SWFs
683 if (flashvarsObj && typeof flashvarsObj === OBJECT) {
684 for (var k in flashvarsObj) { // copy object to avoid the use of references, because web authors often reuse flashvarsObj for multiple SWFs
685 if (typeof par.flashvars != UNDEF) {
686 par.flashvars += "&" + k + "=" + flashvarsObj[k];
689 par.flashvars = k + "=" + flashvarsObj[k];
693 if (hasPlayerVersion(swfVersionStr)) { // create SWF
694 var obj = createSWF(att, par, replaceElemIdStr);
695 if (att.id == replaceElemIdStr) {
696 setVisibility(replaceElemIdStr, true);
698 callbackObj.success = true;
699 callbackObj.ref = obj;
701 else if (xiSwfUrlStr && canExpressInstall()) { // show Adobe Express Install
702 att.data = xiSwfUrlStr;
703 showExpressInstall(att, par, replaceElemIdStr, callbackFn);
706 else { // show alternative content
707 setVisibility(replaceElemIdStr, true);
709 if (callbackFn) { callbackFn(callbackObj); }
712 else if (callbackFn) { callbackFn(callbackObj); }
715 switchOffAutoHideShow: function() {
716 autoHideShow = false;
721 getFlashPlayerVersion: function() {
722 return { major:ua.pv[0], minor:ua.pv[1], release:ua.pv[2] };
725 hasFlashPlayerVersion: hasPlayerVersion,
727 createSWF: function(attObj, parObj, replaceElemIdStr) {
729 return createSWF(attObj, parObj, replaceElemIdStr);
736 showExpressInstall: function(att, par, replaceElemIdStr, callbackFn) {
737 if (ua.w3 && canExpressInstall()) {
738 showExpressInstall(att, par, replaceElemIdStr, callbackFn);
742 removeSWF: function(objElemIdStr) {
744 removeSWF(objElemIdStr);
748 createCSS: function(selStr, declStr, mediaStr, newStyleBoolean) {
750 createCSS(selStr, declStr, mediaStr, newStyleBoolean);
754 addDomLoadEvent: addDomLoadEvent,
756 addLoadEvent: addLoadEvent,
758 getQueryParamValue: function(param) {
759 var q = doc.location.search || doc.location.hash;
761 if (/\?/.test(q)) { q = q.split("?")[1]; } // strip question mark
763 return urlEncodeIfNecessary(q);
765 var pairs = q.split("&");
766 for (var i = 0; i < pairs.length; i++) {
767 if (pairs[i].substring(0, pairs[i].indexOf("=")) == param) {
768 return urlEncodeIfNecessary(pairs[i].substring((pairs[i].indexOf("=") + 1)));
775 // For internal usage only
776 expressInstallCallback: function() {
777 if (isExpressInstallActive) {
778 var obj = getElementById(EXPRESS_INSTALL_ID);
779 if (obj && storedAltContent) {
780 obj.parentNode.replaceChild(storedAltContent, obj);
781 if (storedAltContentId) {
782 setVisibility(storedAltContentId, true);
783 if (ua.ie && ua.win) { storedAltContent.style.display = "block"; }
785 if (storedCallbackFn) { storedCallbackFn(storedCallbackObj); }
787 isExpressInstallActive = false;