///////////////////////////////////////////////////////////////////////////////////  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:////    <script type="text/javascript">//        if (!window.Silverlight)//        {//            window.Silverlight = {};//        }//        Silverlight.disableAutoStartup = true;//    </script> ///////////////////////////////////////////////////////////////////////////////////if (!Silverlight.disableAutoStartup){    if (window.addEventListener)    {        window.addEventListener('load', Silverlight.__startup, false);    }    else    {        window.attachEvent('onload', Silverlight.__startup);    }}///////////////////////////////////////////////////////////////////////////////// createObject://// Inserts a Silverlight <object> 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('<object type=\"application/x-silverlight\" data="data:application/x-silverlight,"');    if ( slProperties.id != null )    {        htmlBuilder.push(' id="' + Silverlight.HtmlAttributeEncode(slProperties.id) + '"');    }    if ( slProperties.width != null )    {        htmlBuilder.push(' width="' + slProperties.width+ '"');    }    if ( slProperties.height != null )    {        htmlBuilder.push(' height="' + slProperties.height + '"');    }    htmlBuilder.push(' >');        delete slProperties.id;    delete slProperties.width;    delete slProperties.height;        for (var name in slProperties)    {        if (slProperties[name])        {            htmlBuilder.push('<param name="'+Silverlight.HtmlAttributeEncode(name)+'" value="'+Silverlight.HtmlAttributeEncode(slProperties[name])+'" />');        }    }    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 = "<a href='javascript:Silverlight.getSilverlight(\"{1}\");' style='text-decoration: none;'><img src='{2}' alt='Get Microsoft Silverlight' style='border-style: none'/></a>";        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 <object> 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 <object> 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;};
