/////////////////////////////////////////////////////////////////////////////// // // Silverlight.js version 2.0.31030.0 // // This file is provided by Microsoft as a helper file for websites that // incorporate Silverlight Objects. This file is provided under the Microsoft // Public License available at // http://code.msdn.microsoft.com/silverlightjs/Project/License.aspx. // You may not use or distribute this file or the code in this file except as // expressly permitted under that license. // // Copyright (c) Microsoft Corporation. All rights reserved. // /////////////////////////////////////////////////////////////////////////////// if (!window.Silverlight) { window.Silverlight = { }; } ////////////////////////////////////////////////////////////////// // // _silverlightCount: // // Counter of globalized event handlers // ////////////////////////////////////////////////////////////////// Silverlight._silverlightCount = 0; ////////////////////////////////////////////////////////////////// // // __onSilverlightInstalledCalled: // // Prevents onSilverlightInstalled from being called multiple // times // ////////////////////////////////////////////////////////////////// Silverlight.__onSilverlightInstalledCalled = false; ////////////////////////////////////////////////////////////////// // // fwlinkRoot: // // Prefix for fwlink URL's // ////////////////////////////////////////////////////////////////// Silverlight.fwlinkRoot='http://go2.microsoft.com/fwlink/?LinkID='; ////////////////////////////////////////////////////////////////// // // __installationEventFired: // // Ensures that only one Installation State event is fired. // ////////////////////////////////////////////////////////////////// Silverlight.__installationEventFired = false; ////////////////////////////////////////////////////////////////// // // onGetSilverlight: // // Called by Silverlight.GetSilverlight to notify the page that a user // has requested the Silverlight installer // ////////////////////////////////////////////////////////////////// Silverlight.onGetSilverlight = null; ////////////////////////////////////////////////////////////////// // // onSilverlightInstalled: // // Called by Silverlight.WaitForInstallCompletion when the page detects // that Silverlight has been installed. The event handler is not called // in upgrade scenarios. // ////////////////////////////////////////////////////////////////// Silverlight.onSilverlightInstalled = function () {window.location.reload(false);}; ////////////////////////////////////////////////////////////////// // // isInstalled: // // Checks to see if the correct version is installed // ////////////////////////////////////////////////////////////////// Silverlight.isInstalled = function(version) { if (version == undefined) version = null; var isVersionSupported = false; var container = null; try { var control = null; var tryNS = false; if (window.ActiveXObject) { try { control = new ActiveXObject('AgControl.AgControl'); if (version === null) { isVersionSupported = true; } else if (control.IsVersionSupported(version)) { isVersionSupported = true; } control = null; } catch (e) { tryNS = true; } } else { tryNS = true; } if (tryNS) { var plugin = navigator.plugins["Silverlight Plug-In"]; if (plugin) { if (version === null) { isVersionSupported = true; } else { var actualVer = plugin.description; if (actualVer === "1.0.30226.2") actualVer = "2.0.30226.2"; var actualVerArray = actualVer.split("."); while (actualVerArray.length > 3) { actualVerArray.pop(); } while (actualVerArray.length < 4) { actualVerArray.push(0); } var reqVerArray = version.split("."); while (reqVerArray.length > 4) { reqVerArray.pop(); } var requiredVersionPart; var actualVersionPart; var index = 0; do { requiredVersionPart = parseInt(reqVerArray[index]); actualVersionPart = parseInt(actualVerArray[index]); index++; } while (index < reqVerArray.length && requiredVersionPart === actualVersionPart); if (requiredVersionPart <= actualVersionPart && !isNaN(requiredVersionPart)) { isVersionSupported = true; } } } } } catch (e) { isVersionSupported = false; } return isVersionSupported; }; ////////////////////////////////////////////////////////////////// // // WaitForInstallCompletion: // // Occasionally checks for Silverlight installation status. If it // detects that Silverlight has been installed then it calls // Silverlight.onSilverlightInstalled();. This is only supported // if Silverlight was not previously installed on this computer. // ////////////////////////////////////////////////////////////////// Silverlight.WaitForInstallCompletion = function() { if ( ! Silverlight.isBrowserRestartRequired && Silverlight.onSilverlightInstalled ) { try { navigator.plugins.refresh(); } catch(e) { } if (Silverlight.isInstalled(null) && !Silverlight.__onSilverlightInstalledCalled) { Silverlight.onSilverlightInstalled(); Silverlight.__onSilverlightInstalledCalled = true; } else { setTimeout(Silverlight.WaitForInstallCompletion, 3000); } } }; ////////////////////////////////////////////////////////////////// // // __startup: // // Performs startup tasks. ////////////////////////////////////////////////////////////////// Silverlight.__startup = function() { navigator.plugins.refresh(); Silverlight.isBrowserRestartRequired = Silverlight.isInstalled(null); if (!Silverlight.isBrowserRestartRequired) { Silverlight.WaitForInstallCompletion(); if (!Silverlight.__installationEventFired) { Silverlight.onInstallRequired(); Silverlight.__installationEventFired = true; } } else if (window.navigator.mimeTypes) { var mimeSL2 = navigator.mimeTypes["application/x-silverlight-2"]; var mimeSL2b2 = navigator.mimeTypes["application/x-silverlight-2-b2"]; var mimeSL2b1 = navigator.mimeTypes["application/x-silverlight-2-b1"]; var mimeHighestBeta = mimeSL2b1; if (mimeSL2b2) mimeHighestBeta = mimeSL2b2; if (!mimeSL2 && (mimeSL2b1 || mimeSL2b2)) { if (!Silverlight.__installationEventFired) { Silverlight.onUpgradeRequired(); Silverlight.__installationEventFired = true; } } else if (mimeSL2 && mimeHighestBeta) { if (mimeSL2.enabledPlugin && mimeHighestBeta.enabledPlugin) { if (mimeSL2.enabledPlugin.description != mimeHighestBeta.enabledPlugin.description) { if (!Silverlight.__installationEventFired) { Silverlight.onRestartRequired(); Silverlight.__installationEventFired = true; } } } } } if (!Silverlight.disableAutoStartup) { if (window.removeEventListener) { window.removeEventListener('load', Silverlight.__startup, false); } else { window.detachEvent('onload', Silverlight.__startup); } } }; /////////////////////////////////////////////////////////////////////////////// // // This block wires up Silverlight.__startup to be executed once the page // loads. This is the desired behavior for most sites. If, however, a site // prefers to control the timing of the Silverlight.__startup call then it should // put the following block of javascript into the webpage before this file is // included: // // // ///////////////////////////////////////////////////////////////////////////////// if (!Silverlight.disableAutoStartup) { if (window.addEventListener) { window.addEventListener('load', Silverlight.__startup, false); } else { window.attachEvent('onload', Silverlight.__startup); } } /////////////////////////////////////////////////////////////////////////////// // createObject: // // Inserts a Silverlight tag or installation experience into the HTML // DOM based on the current installed state of Silverlight. // ///////////////////////////////////////////////////////////////////////////////// Silverlight.createObject = function(source, parentElement, id, properties, events, initParams, userContext) { var slPluginHelper = new Object(); var slProperties = properties; var slEvents = events; slPluginHelper.version = slProperties.version; slProperties.source = source; slPluginHelper.alt = slProperties.alt; //rename properties to their tag property names. For bacwards compatibility //with Silverlight.js version 1.0 if ( initParams ) slProperties.initParams = initParams; if ( slProperties.isWindowless && !slProperties.windowless) slProperties.windowless = slProperties.isWindowless; if ( slProperties.framerate && !slProperties.maxFramerate) slProperties.maxFramerate = slProperties.framerate; if ( id && !slProperties.id) slProperties.id = id; // remove elements which are not to be added to the instantiation tag delete slProperties.ignoreBrowserVer; delete slProperties.inplaceInstallPrompt; delete slProperties.version; delete slProperties.isWindowless; delete slProperties.framerate; delete slProperties.data; delete slProperties.src; delete slProperties.alt; // detect that the correct version of Silverlight is installed, else display install if (Silverlight.isInstalled(slPluginHelper.version)) { //move unknown events to the slProperties array for (var name in slEvents) { if ( slEvents[name]) { if ( name == "onLoad" && typeof slEvents[name] == "function" && slEvents[name].length != 1 ) { var onLoadHandler = slEvents[name]; slEvents[name]=function (sender){ return onLoadHandler(document.getElementById(id), userContext, sender)}; } var handlerName = Silverlight.__getHandlerName(slEvents[name]); if ( handlerName != null ) { slProperties[name] = handlerName; slEvents[name] = null; } else { throw "typeof events."+name+" must be 'function' or 'string'"; } } } slPluginHTML = Silverlight.buildHTML(slProperties); } //The control could not be instantiated. Show the installation prompt else { slPluginHTML = Silverlight.buildPromptHTML(slPluginHelper); } // insert or return the HTML if(parentElement) { parentElement.innerHTML = slPluginHTML; } else { return slPluginHTML; } }; /////////////////////////////////////////////////////////////////////////////// // // buildHTML: // // create HTML that instantiates the control // /////////////////////////////////////////////////////////////////////////////// Silverlight.buildHTML = function( slProperties) { var htmlBuilder = []; htmlBuilder.push(''); delete slProperties.id; delete slProperties.width; delete slProperties.height; for (var name in slProperties) { if (slProperties[name]) { htmlBuilder.push(''); } } htmlBuilder.push('<\/object>'); return htmlBuilder.join(''); }; ////////////////////////////////////////////////////////////////// // // createObjectEx: // // takes a single parameter of all createObject // parameters enclosed in {} // ////////////////////////////////////////////////////////////////// Silverlight.createObjectEx = function(params) { var parameters = params; var html = Silverlight.createObject(parameters.source, parameters.parentElement, parameters.id, parameters.properties, parameters.events, parameters.initParams, parameters.context); if (parameters.parentElement == null) { return html; } }; /////////////////////////////////////////////////////////////////////////////////////////////// // // buildPromptHTML // // Builds the HTML to prompt the user to download and install Silverlight // /////////////////////////////////////////////////////////////////////////////////////////////// Silverlight.buildPromptHTML = function(slPluginHelper) { var slPluginHTML = ""; var urlRoot = Silverlight.fwlinkRoot; var version = slPluginHelper.version ; if ( slPluginHelper.alt ) { slPluginHTML = slPluginHelper.alt; } else { if (! version) { version=""; } slPluginHTML = "Get Microsoft Silverlight"; slPluginHTML = slPluginHTML.replace('{1}', version); slPluginHTML = slPluginHTML.replace('{2}', urlRoot + '108181'); } return slPluginHTML; }; /////////////////////////////////////////////////////////////////////////////////////////////// // // getSilverlight: // // Navigates the browser to the appropriate Silverlight installer // /////////////////////////////////////////////////////////////////////////////////////////////// Silverlight.getSilverlight = function(version) { if (Silverlight.onGetSilverlight ) { Silverlight.onGetSilverlight(); } var shortVer = ""; var reqVerArray = String(version).split("."); if (reqVerArray.length > 1) { var majorNum = parseInt(reqVerArray[0] ); if ( isNaN(majorNum) || majorNum < 2 ) { shortVer = "1.0"; } else { shortVer = reqVerArray[0]+'.'+reqVerArray[1]; } } var verArg = ""; if (shortVer.match(/^\d+\056\d+$/) ) { verArg = "&v="+shortVer; } Silverlight.followFWLink("114576" + verArg); }; /////////////////////////////////////////////////////////////////////////////////////////////// // // followFWLink: // // Navigates to a url based on fwlinkid // /////////////////////////////////////////////////////////////////////////////////////////////// Silverlight.followFWLink = function(linkid) { top.location=Silverlight.fwlinkRoot+String(linkid); }; /////////////////////////////////////////////////////////////////////////////////////////////// // // HtmlAttributeEncode: // // Encodes special characters in input strings as charcodes // /////////////////////////////////////////////////////////////////////////////////////////////// Silverlight.HtmlAttributeEncode = function( strInput ) { var c; var retVal = ''; if(strInput == null) { return null; } for(var cnt = 0; cnt < strInput.length; cnt++) { c = strInput.charCodeAt(cnt); if (( ( c > 96 ) && ( c < 123 ) ) || ( ( c > 64 ) && ( c < 91 ) ) || ( ( c > 43 ) && ( c < 58 ) && (c!=47)) || ( c == 95 )) { retVal = retVal + String.fromCharCode(c); } else { retVal = retVal + '&#' + c + ';'; } } return retVal; }; /////////////////////////////////////////////////////////////////////////////// // // default_error_handler: // // Default error handling function // /////////////////////////////////////////////////////////////////////////////// Silverlight.default_error_handler = function (sender, args) { var iErrorCode; var errorType = args.ErrorType; iErrorCode = args.ErrorCode; var errMsg = "\nSilverlight error message \n" ; errMsg += "ErrorCode: "+ iErrorCode + "\n"; errMsg += "ErrorType: " + errorType + " \n"; errMsg += "Message: " + args.ErrorMessage + " \n"; if (errorType == "ParserError") { errMsg += "XamlFile: " + args.xamlFile + " \n"; errMsg += "Line: " + args.lineNumber + " \n"; errMsg += "Position: " + args.charPosition + " \n"; } else if (errorType == "RuntimeError") { if (args.lineNumber != 0) { errMsg += "Line: " + args.lineNumber + " \n"; errMsg += "Position: " + args.charPosition + " \n"; } errMsg += "MethodName: " + args.methodName + " \n"; } alert (errMsg); }; /////////////////////////////////////////////////////////////////////////////////////////////// // // __cleanup: // // Releases event handler resources when the page is unloaded // /////////////////////////////////////////////////////////////////////////////////////////////// Silverlight.__cleanup = function () { for (var i = Silverlight._silverlightCount - 1; i >= 0; i--) { window['__slEvent' + i] = null; } Silverlight._silverlightCount = 0; if (window.removeEventListener) { window.removeEventListener('unload', Silverlight.__cleanup , false); } else { window.detachEvent('onunload', Silverlight.__cleanup ); } }; /////////////////////////////////////////////////////////////////////////////////////////////// // // __getHandlerName: // // Generates named event handlers for delegates. // /////////////////////////////////////////////////////////////////////////////////////////////// Silverlight.__getHandlerName = function (handler) { var handlerName = ""; if ( typeof handler == "string") { handlerName = handler; } else if ( typeof handler == "function" ) { if (Silverlight._silverlightCount == 0) { if (window.addEventListener) { window.addEventListener('onunload', Silverlight.__cleanup , false); } else { window.attachEvent('onunload', Silverlight.__cleanup ); } } var count = Silverlight._silverlightCount++; handlerName = "__slEvent"+count; window[handlerName]=handler; } else { handlerName = null; } return handlerName; }; ////////////////////////////////////////////////////////////////// // // onRequiredVersionAvailable: // // Called by version verification control to notify the page that // an appropriate build of Silverlight is available. The page // should respond by injecting the appropriate Silverlight control // ////////////////////////////////////////////////////////////////// Silverlight.onRequiredVersionAvailable = function() { }; ////////////////////////////////////////////////////////////////// // // onRestartRequired: // // Called by version verification control to notify the page that // an appropriate build of Silverlight is installed but not loaded. // The page should respond by injecting a clear and visible // "Thanks for installing. Please restart your browser and return // to mysite.com" or equivalent into the browser DOM // ////////////////////////////////////////////////////////////////// Silverlight.onRestartRequired = function() { }; ////////////////////////////////////////////////////////////////// // // onUpgradeRequired: // // Called by version verification control to notify the page that // Silverlight must be upgraded. The page should respond by // injecting a clear, visible, and actionable upgrade message into // the DOM. The message must inform the user that they need to // upgrade Silverlight to use the page. They are already somewhat // familiar with the Silverlight product when they encounter this. // Silverlight should be mentioned so the user expects to see that // string in the installer UI. However, the Silverlight-powered // application should be the focus of the solicitation. The user // wants the app. Silverlight is a means to the app. // // The upgrade solicitation will have a button that directs // the user to the Silverlight installer. Upon click the button // should both kick off a download of the installer URL and replace // the Upgrade text with "Thanks for downloading. When the upgarde // is complete please restart your browser and return to // mysite.com" or equivalent. // // Note: For a more interesting upgrade UX we can use Silverlight // 1.0-style XAML for this upgrade experience. Contact PiotrP for // details. // ////////////////////////////////////////////////////////////////// Silverlight.onUpgradeRequired = function() { }; ////////////////////////////////////////////////////////////////// // // onInstallRequired: // // Called by Silverlight.checkInstallStatus to notify the page // that Silverlight has not been installed by this user. // The page should respond by // injecting a clear, visible, and actionable upgrade message into // the DOM. The message must inform the user that they need to // download and install components needed to use the page. // Silverlight should be mentioned so the user expects to see that // string in the installer UI. However, the Silverlight-powered // application should be the focus of the solicitation. The user // wants the app. Silverlight is a means to the app. // // The installation solicitation will have a button that directs // the user to the Silverlight installer. Upon click the button // should both kick off a download of the installer URL and replace // the Upgrade text with "Thanks for downloading. When installation // is complete you may need to refresh the page to view this // content" or equivalent. // ////////////////////////////////////////////////////////////////// Silverlight.onInstallRequired = function() { }; ////////////////////////////////////////////////////////////////// // // IsVersionAvailableOnError: // // This function should be called at the beginning of a web page's // Silverlight error handler. It will determine if the required // version of Silverlight is installed and available in the // current process. // // During its execution the function will trigger one of the // Silverlight installation state events, if appropriate. // // Sender and Args should be passed through from the calling // onError handler's parameters. // // The associated Sivlerlight tag must have // minRuntimeVersion set and should have autoUpgrade set to false. // ////////////////////////////////////////////////////////////////// Silverlight.IsVersionAvailableOnError = function(sender, args) { var retVal = false; try { if (args.ErrorCode == 8001 && !Silverlight.__installationEventFired) { Silverlight.onUpgradeRequired(); Silverlight.__installationEventFired = true; } else if (args.ErrorCode == 8002 && !Silverlight.__installationEventFired) { Silverlight.onRestartRequired(); Silverlight.__installationEventFired = true; } // this handles upgrades from 1.0. That control did not // understand the minRuntimeVerison parameter. It also // did not know how to parse XAP files, so would throw // Parse Error (5014). A Beta 2 control may throw 2106 else if (args.ErrorCode == 5014 || args.ErrorCode == 2106) { if (Silverlight.__verifySilverlight2UpgradeSuccess(args.getHost())) { retVal = true; } } else { retVal = true; } } catch (e) { } return retVal; }; ////////////////////////////////////////////////////////////////// // // IsVersionAvailableOnLoad: // // This function should be called at the beginning of a web page's // Silverlight onLoad handler. It will determine if the required // version of Silverlight is installed and available in the // current process. // // During its execution the function will trigger one of the // Silverlight installation state events, if appropriate. // // Sender should be passed through from the calling // onError handler's parameters. // // The associated Sivlerlight tag must have // minRuntimeVersion set and should have autoUpgrade set to false. // ////////////////////////////////////////////////////////////////// Silverlight.IsVersionAvailableOnLoad = function(sender) { var retVal = false; try { if (Silverlight.__verifySilverlight2UpgradeSuccess(sender.getHost())) { retVal = true; } } catch (e) { } return retVal; }; ////////////////////////////////////////////////////////////////// // // __verifySilverlight2UpgradeSuccess: // // This internal function helps identify installation state by // taking advantage of behavioral differences between the // 1.0 and 2.0 releases of Silverlight. // ////////////////////////////////////////////////////////////////// Silverlight.__verifySilverlight2UpgradeSuccess = function(host) { var retVal = false; var version = "2.0.31005"; var installationEvent = null; try { if (host.IsVersionSupported(version + ".99")) { installationEvent = Silverlight.onRequiredVersionAvailable; retVal = true; } else if (host.IsVersionSupported(version + ".0")) { installationEvent = Silverlight.onRestartRequired; } else { installationEvent = Silverlight.onUpgradeRequired; } if (installationEvent && !Silverlight.__installationEventFired) { installationEvent(); Silverlight.__installationEventFired = true; } } catch (e) { } return retVal; };