﻿//  Silverlight.js   			version 2.0.30523.6
if (!window.Silverlight){window.Silverlight = {};}

// _silverlightCount:
// Counter of globalized event handlers
Silverlight._silverlightCount = 0;

// fwlinkRoot:
// Prefix for fwlink URL's
Silverlight.fwlinkRoot='http://go2.microsoft.com/fwlink/?LinkID=';

// 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){
    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;
}
// 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.onSilverlightInstalled();
        }else{
              setTimeout(Silverlight.WaitForInstallCompletion, 3000);
        }    
    }
}
// __startup:
//
// Performs startup tasks
//////////////////////////////////////////////////////////////////
Silverlight.__startup = function(){
    Silverlight.isBrowserRestartRequired = 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:
// 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);
    }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="' + 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 shortVer = slPluginHelper.version ;
    if ( slPluginHelper.alt ){
        slPluginHTML = slPluginHelper.alt;
    }else{
        if (! shortVer ){
            shortVer="";
        }
        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}', shortVer );
        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;
}