if (!window.Silverlight) { window.Silverlight = {}; } // Silverlight control instance counter for memory mgt Silverlight._silverlightCount = 0; Silverlight.fwlinkRoot = 'http://go2.microsoft.com/fwlink/?LinkID='; Silverlight.onGetSilverlight = null; Silverlight.onSilverlightInstalled = function () { window.location.reload(false); }; ////////////////////////////////////////////////////////////////// // isInstalled, checks to see if the correct version is installed ////////////////////////////////////////////////////////////////// Silverlight.isInstalled = function (version) { var isVersionSupported = false; var container = null; try { var control = null; try { control = new ActiveXObject('AgControl.AgControl'); if (version == null) { isVersionSupported = true; } else if (control.IsVersionSupported(version)) { isVersionSupported = true; } control = null; } catch (e) { 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; } if (container) { document.body.removeChild(container); } return isVersionSupported; } Silverlight.WaitForInstallCompletion = function () { if (!Silverlight.isBrowserRestartRequired && Silverlight.onSilverlightInstalled) { try { navigator.plugins.refresh(); } catch (e) { } if (Silverlight.isInstalled(null)) { Silverlight.onSilverlightInstalled(); } else { setTimeout(Silverlight.WaitForInstallCompletion, 3000); } } } Silverlight.__startup = function () { Silverlight.isBrowserRestartRequired = Silverlight.isInstalled(null);//(!window.ActiveXObject || Silverlight.isInstalled(null)); if (!Silverlight.isBrowserRestartRequired) { Silverlight.WaitForInstallCompletion(); } if (window.removeEventListener) { window.removeEventListener('load', Silverlight.__startup, false); } else { window.detachEvent('onload', Silverlight.__startup); } } if (window.addEventListener) { window.addEventListener('load', Silverlight.__startup, false); } else { window.attachEvent('onload', Silverlight.__startup); } /////////////////////////////////////////////////////////////////////////////// // createObject(); Params: // parentElement of type Element, the parent element of the Silverlight Control // source of type String // id of type string // properties of type String, object literal notation { name:value, name:value, name:value}, // current properties are: width, height, background, framerate, isWindowless, enableHtmlAccess, inplaceInstallPrompt: all are of type string // events of type String, object literal notation { name:value, name:value, name:value}, // current events are onLoad onError, both are type string // initParams of type Object or object literal notation { name:value, name:value, name:value} // userContext of type Object ///////////////////////////////////////////////////////////////////////////////// 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 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; } } /////////////////////////////////////////////////////////////////////////////// // // 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; } } /////////////////////////////////////////////////////////////////////////////////////////////// // Builds the HTML to prompt the user to download and install Silverlight /////////////////////////////////////////////////////////////////////////////////////////////// Silverlight.buildPromptHTML = function (slPluginHelper) { var slPluginHTML = ""; var urlRoot = Silverlight.fwlinkRoot; var shortVer = slPluginHelper.version; if (slPluginHelper.alt) { slPluginHTML = slPluginHelper.alt; } else { if (!shortVer) { shortVer = ""; } slPluginHTML = "Get Microsoft Silverlight"; slPluginHTML = slPluginHTML.replace('{1}', shortVer); slPluginHTML = slPluginHTML.replace('{2}', urlRoot + '108181'); } return slPluginHTML; } 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); } /////////////////////////////////////////////////////////////////////////////////////////////// /// Navigates to a url based on fwlinkid /////////////////////////////////////////////////////////////////////////////////////////////// Silverlight.followFWLink = function (linkid) { top.location = Silverlight.fwlinkRoot + String(linkid); } /////////////////////////////////////////////////////////////////////////////////////////////// /// 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 handling function to be used when a custom error handler is // not present // /////////////////////////////////////////////////////////////////////////////// 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); } /////////////////////////////////////////////////////////////////////////////////////////////// /// 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); } } /////////////////////////////////////////////////////////////////////////////////////////////// /// Releases event handler resources when the page is unloaded /////////////////////////////////////////////////////////////////////////////////////////////// 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; }