﻿/// <reference name="MicrosoftAjax.js" />
/// <reference name="Wol.Logging.Helper.js"/>
/// <reference name="Wol.Logging.Const.js"/>
/// <reference name="Wol.Logging.Enum.js"/>
/// <reference name="Wol.Logging.Logger.js"/>
/// <reference name="Wol.Logging.LoggerTemplate.js"/>


//<Silverlight_JS_Snippet>//
if (!window.SilverlightHelper) {
    window.SilverlightHelper = {};
}

//////////////////////////////////////////////////////////////////
//
// isInstalled:
//
// Checks to see if the correct version is installed
//
//////////////////////////////////////////////////////////////////

SilverlightHelper.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;
};

//</Silverlight_JS_Snippet>//

if (!window.SAHHelper) {

    window.SAHHelper = {};

    SAHHelper.isSLInstalled = function(slVersion) {
    
        if (slVersion == null) {
            slVersion = "2.0.31005.0";
        }

        return SilverlightHelper.isInstalled(slVersion);
    }




    SAHHelper.log = function(sahId, slInstalled) {

        if (!Wol.Logging) {
            Sys.Debug.assert(false, "Logging library is not available", true);
            return;
        }

        if (!Wol.Logging.isEnabled()) {
            return;
        }

        //log the Base loaded
        var myLogger = new Wol.Logging.Logger(Wol.Logging.commonLoggerTemplate());
        myLogger.setScalar(Wol.Logging.Const.FieldName.InteractionId, Wol.Logging.Const.InteractionTypeId.SilverlightComponentLoaded);
        myLogger.log();

        if (slInstalled) {
            //log silverlight available
            myLogger.setScalar(Wol.Logging.Const.FieldName.InteractionId, Wol.Logging.Const.InteractionTypeId.SilverlightPluginAvailable);
            myLogger.log();
        }
    }

    SAHHelper.registerLog = function(sahId, slInstalled) {

        if (!Wol.Logging) {
            Sys.Debug.assert(false, "Logging library is not available", true);
            return;
        }

        Wol.Logging.WhenReady.register(function() { SAHHelper.log(sahId, slInstalled) });
    }

    SAHHelper.loaded = function(slPnlId, dlPnlId, dlAvailable, slVersion) {

        var slPnl = $get(slPnlId);
        var dlPnl = $get(dlPnlId);
        var slInstalled = SAHHelper.isSLInstalled(slVersion);

        if (!slInstalled && dlAvailable && (slPnl != null) && (dlPnl != null)) {
            slPnl.style.display = "none";
            dlPnl.style.display = "block";
        }
        
        //register the control with the logging system
        SAHHelper.registerLog(slPnlId, slInstalled);
    }
}

