///////////////////////////////////////////////////////////////////////////////
//  SLS.js   			version 1.0
//  Provides Microsoft logging support for Silverlight applications.
//  Copyright (c) Microsoft Corporation. All rights reserved.
///////////////////////////////////////////////////////////////////////////////

if (!window.SLS)
    window.SLS = {};

SLS.logIndex = 0;
SLS.logWaitTime = 1250;
SLS.stateShowInstall = 1;
SLS.stateShowUpgrade = 2;
SLS.stateShowUnsupported = 3;
SLS.stateShowRestart = 4;
SLS.stateChooseInstall = 5;
SLS.stateChooseUpgrade = 6;
SLS.stateChooseReject = 7;
SLS.stateChooseAbandon = 8;
SLS.stateSuccess = 10;
//SLS.hqPlayerMsLogUri = "http://msmmod.orcsweb.com/"; 

SLS.logEntryFlow = function () {
};

SLS.logExitFlow = function () {
};

SLS.logInstall = function (installState) {
//	try
//	{
//		// svc parameters
//		var u = SLS.hqAppSessionId;
//		var i = SLS.logCount++;
//		var t = new Date().getTime();
//
//		// append script tag
//		var src = SLS.hqPlayerMsLogUri + "/appevent.svc/parms?u=" + u + "&i=" + i + '&t=' + t + '&an=' + SLS.appName + '&av=' + SLS.appVersion;
//		SLS.appendScript(i, src);
//	}
//	catch (e)
//	{
//		SLS.handleError("SLS.logInstall", e);
//	}
};


SLS.getClientState = function () {
    try {
        if (!SLS.clientState) {
            var userAgent = SLS.parseUserAgent(navigator.userAgent);
            var version = SLS.parseVersion(SLS.minSilverlightVersion);
            var isMinVersionInstalled = Silverlight.isInstalled(SLS.minSilverlightVersion);

            SLS.clientState =
			{
			    userAgent: userAgent,
			    isInstallRequired: !isMinVersionInstalled,
			    isUpgradeRequired: !isMinVersionInstalled && Silverlight.isInstalled(),
			    isSupportedUserAgent: SLS.isSupportedUserAgent(userAgent, version),
			    isAllowedUnsupportedUserAgent: SLS.isAllowedUnsupportedUserAgent(userAgent, version)
			};
        }

        return SLS.clientState;
    }
    catch (x) {
        SLS.handleError("SLS.getClientState", x);
    }
};

SLS.getSessionCookieName = function () {
    try {
        return SLS.logName + "_session";
    }
    catch (x) {
        SLS.handleError("SLS.getSessionCookieName", x);
    }
};

SLS.getEntryFlowCookieName = function () {
    try {
        return SLS.logName + "_entryFlow";
    }
    catch (x) {
        SLS.handleError("SLS.getEntryFlowCookieName", x);
    }
};

SLS.getInstallCookieName = function () {
    try {
        return SLS.logName + "_install";
    }
    catch (x) {
        SLS.handleError("SLS.getInstallCookieName", x);
    }
};

SLS.getUnsupportedCookieName = function () {
    try {
        return SLS.logName + "_unsupported";
    }
    catch (x) {
        SLS.handleError("SLS.getUnsupportedCookieName", x);
    }
};

SLS.getScriptId = function (index) {
    try {
        return SLS.logName + "_script" + index;
    }
    catch (x) {
        SLS.handleError("SLS.getScriptId", x);
    }
};

SLS.getSessionId = function () {
    try {
        var value = SLS.getCookie(SLS.getSessionCookieName());

        if (!value) {
            value = SLS.getUniqueId();
            SLS.setCookie(SLS.getSessionCookieName(), value);
        }

        return value;
    }
    catch (x) {
        SLS.handleError("SLS.getSessionId", x);
    }
};

SLS.getUniqueId = function () {
    try {
        var value = "";

        for (var j = 0; j < 32; j++) {
            if (j == 8 || j == 12 || j == 16 || j == 20)
                value += "-";

            value += Math.floor(Math.random() * 16).toString(16);
        }

        return value;
    }
    catch (x) {
        SLS.handleError("SLS.getUniqueId", x);
    }
};

SLS.getSilverlight = function () {
    try {
        var state = SLS.getClientState();

        if (state.isAllowedUnsupportedUserAgent && state.userAgent.os == "Windows")
            Silverlight.followFWLink("156091"); // direct download link
        else
            Silverlight.followFWLink("149156&v=" + SLS.minSilverlightVersion);
    }
    catch (x) {
        SLS.handleError("SLS.getSilverlight", x);
    }
};

SLS.getCookie = function (name) {
    try {
        var cookie = document.cookie;

        if (cookie && cookie.length > 0) {
            var items = cookie.split(";");

            for (i = 0; i < items.length; i++) {
                var item = items[i].split("=");

                if (name == SLS.trim(unescape(item[0]))) {
                    var value = item[1];
                    return (value) ? unescape(value) : value;
                }
            }
        }

        return null;
    }
    catch (x) {
        SLS.handleError("SLS.getCookie", x);
    }
};

SLS.setCookie = function (name, value, hours) {
    try {
        if (hours) {
            var now = new Date().getTime();
            var expires = new Date(now + hours * 60 * 60 * 1000).toGMTString();
            document.cookie = name + "=" + value + ";expires=" + expires;
        }
        else {
            document.cookie = name + "=" + value;
        }
    }
    catch (x) {
        SLS.handleError("SLS.setCookie", x);
    }
};

SLS.clearCookie = function (name) {
    try {
        document.cookie = name + "=;expires=Thu, 01-Jan-1970 00:00:01 GMT";
    }
    catch (x) {
        SLS.handleError("SLS.clearCookie", x);
    }
};

SLS.appendScript = function (index, src) {
    try {
        var script = document.createElement("script");
        script.type = "text/javascript";
        script.id = SLS.getScriptId(index);
        script.src = src;

        var head = document.getElementsByTagName("head")[0];
        head.appendChild(script);
    }
    catch (x) {
        SLS.handleError("SLS.appendScript", x);
    }
};

SLS.removeScript = function (index) {
    try {
        var id = SLS.getScriptId(index);
        var script = document.getElementById(id);

        if (script) {
            var head = document.getElementsByTagName("head")[0];
            head.removeChild(script);
        }
    }
    catch (x) {
        SLS.handleError("SLS.removeScript", x);
    }
};

SLS.spinWait = function (time) {
    try {
        if (time) {
            var start = new Date();

            while (new Date() - start < time)
                continue;
        }
    }
    catch (x) {
        SLS.handleError("SLS.spinWait", x);
    }
};

SLS.trim = function (value) {
    try {
        return value.replace(/^\s+|\s+$/g, "");
    }
    catch (x) {
        SLS.handleError("SLS.trim", x);
    }
};

SLS.isSupportedUserAgent = function (userAgent, version) {
    try {
        var ua = userAgent || SLS.parseUserAgent();
        var v = version || SLS.parseVersion();

        return !(
			(ua.os == "Unsupported") ||
			(ua.os == "Linux" && v > 1) ||
			(ua.os == "MacPPC" && v > 1) ||
			(ua.os == "MacPPC") ||
			(ua.os == "MacIntel") ||
			(ua.os == "Windows" && ua.browser == "Safari") ||
			(ua.browser == "Unsupported") ||
			(ua.browser == "Chrome") ||
			(ua.value.indexOf("Windows NT 5.0") >= 0 && v < 2));
    }
    catch (x) {
        SLS.handleError("SLS.isSupportedUserAgent", x);
    }
};

SLS.isAllowedUnsupportedUserAgent = function (userAgent, version) {
    try {
        var ua = userAgent || SLS.parseUserAgent();
        var v = version || SLS.parseVersion();

        return (
			(ua.os == "Windows" && ua.browser == "Chrome") ||
			(ua.os == "Linux" && v > 2));
    }
    catch (x) {
        SLS.handleError("SLS.isAllowedUnsupportedUserAgent", x);
    }
};

SLS.warnUnsupportedUserAgent = function (message) {
    try {
        var state = SLS.getClientState();

        if (!state.isSupportedUserAgent && SLS.getCookie(SLS.getUnsupportedCookieName()) != "1") {
            // prevent multiple calls
            SLS.setCookie(SLS.getUnsupportedCookieName(), "1", 8760);
            alert(message);
        }
    }
    catch (x) {
        SLS.handleError("SLS.warnUnsupportedUserAgent", x);
    }
};

SLS.parseUserAgent = function (value) {
    try {
        var ua = { value: value, os: "Unsupported", browser: "Unsupported" };

        if (ua.value.indexOf("Windows NT") >= 0 || ua.value.indexOf("Mozilla/4.0 (compatible; MSIE 6.0)") >= 0)
            ua.os = "Windows";
        else if (ua.value.indexOf("PPC Mac OS X") >= 0)
            ua.os = "MacPPC";
        else if (ua.value.indexOf("Intel Mac OS X") >= 0)
            ua.os = "MacIntel";
        else if (ua.value.indexOf("Linux") >= 0)
            ua.os = "Linux";

        if (ua.os != "Unsupported") {
            if (ua.value.indexOf("MSIE") >= 0) {
                if (ua.value.indexOf("Win64") == -1) {
                    if (parseInt(ua.value.split("MSIE")[1]) >= 6)
                        ua.browser = "MSIE";
                }
            }
            else if (ua.value.indexOf("Firefox") >= 0) {
                var array = ua.value.split("Firefox/")[1].split(".");
                var major = parseInt(array[0]);

                if (major >= 2) {
                    ua.browser = "Firefox";
                }
                else {
                    var minor = parseInt(array[1]);

                    if (major == 1 && minor >= 5)
                        ua.browser = "Firefox";
                }
            }
            else if (ua.value.indexOf("Chrome") >= 0) {
                ua.browser = "Chrome";
            }
            else if (ua.value.indexOf("Safari") >= 0) {
                ua.browser = "Safari";
            }
        }

        return ua;
    }
    catch (x) {
        SLS.handleError("SLS.parseUserAgent", x);
    }
};

SLS.parseVersion = function (value) {
    try {
        if (value) {
            var array = value.split(".");

            if (array.length > 1) {
                var major = parseInt(array[0]);

                if (isNaN(major) || major < 2)
                    return 1;
                else
                    return parseFloat(array[0] + "." + array[1]);
            }
        }

        return NaN;
    }
    catch (x) {
        SLS.handleError("SLS.parseVersion", x);
    }
};

SLS.handleError = function (source, error) {
    if (SLS.suppressErrors || !error)
        return;

    var msg = "Oops! An unexpected error occurred.\n";

    if (error.errorType) {
        if (error.errorType == "ImageError" || error.errorType == "MediaError")
            return;

        msg += "    \nSource: " + source;
        msg += "    \nCode: " + error.errorCode;
        msg += "    \nType: " + error.errorType;
        msg += "    \nMessage: " + error.errorMessage;

        if (error.errorType == "ParserError") {
            msg += "    \nFile: " + error.xamlFile;
            msg += "    \nLine: " + error.lineNumber;
            msg += "    \nPosition: " + error.charPosition;
        }
        else if (error.errorType == "RuntimeError") {
            if (error.lineNumber != 0) {
                msg += "    \nLine: " + error.lineNumber;
                msg += "    \nPosition: " + error.charPosition;
            }

            msg += "    \nMethod: " + error.methodName;
        }
    }
    else {
        msg += "    \nSource: " + source;
        msg += "    \nError: " + error;
    }

    throw new Error(msg);
};;
// namespaces
var Default = {};

//var bypass = false;
Default.progressBarWidth = 340;
Default.progressBarFudgeFactor = 1.05;
Default.stallLaunch = 750;
Default.displayRegions = ['startup','promptUnsupported','promptWarning','promptInstall','promptUgrade','promptFinishInstall','promptFinishUpgrading','threeDTV'];//,'silverlightControlHost'
Default.launch = function(){
	setTimeout("Default.showApp()",750);
}
//Default.showRegion = function(id) {
//	Default.hideRegions();
//	if(document.getElementById(id)){
//		document.getElementById(id).style.display='block';
//	}else{
//		//document.write('Missing '+id+' container - fatal error in web page elements');
//	}
//}
Default.hideRegions = function() {
	for(r in Default.displayRegions){
		var d = Default.displayRegions[r];
		//if(!document.getElementById(d)){
		//	var dc = document.createElement('div');
		//	dc.setAttribute('id',d);
		//	document.getElementById('wrapper').appendChild(dc);
		//}
		if(document.getElementById(d)){
			document.getElementById(d).style.display = 'none';
		}
	}
};

Default.showApp = function () {
//	var ua = navigator.userAgent;
//	if(ua.indexOf('Mac')>0){
//		Default.showRegion('threeDTV');
//		 $('#video-details').hide();
//         $('#catalog-wrapper').hide();
//	}else{
		try {
			var state = SLS.getClientState();
			//alert(state.isSupportedUserAgent + '\n'+state.isAllowedUnsupportedUserAgent);
			if (state.isSupportedUserAgent) {
				var slob =  '<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="640" height="360">\n';
					slob += '<param name="source" value="/files/PluginTester.xap"/>\n';
					slob += '<param name="onError" value="onSilverlightError" />\n';
					slob += '<param name="background" value="black" />\n';
					slob += '<param name="minRuntimeVersion" value="4.0.50303.0" />\n';
					slob += '<param name="autoUpgrade" value="true" />\n';
//					slob += '<param name="windowless" value="true" />\n';
					slob += '<param name="enableGPUAcceleration" value="true"/>\n';
//					slob += '<param name="onLoad" value="isLoaded" />\n';
					slob += '<param name="enablehtmlaccess" value="true"/>\n';
					slob += '<div id="SilverlightAlt"></div>\n';
					slob += '</object>\n';
					slob += '<script type="text/javascript">\n';
					slob += 'var SilverlightObject_OnLoad = Default.onSilverlightLoad;\n';
					slob += 'var SilverlightObject_OnError = Default.onSilverlightError;\n';
					slob += '</script>\n';
					document.getElementById('silverlightPluginTest').innerHTML = slob;
				
				document.getElementById('silverlightControlHost').style.display='block';
				$('#video-details').show();
	            $('#catalog-wrapper').show();	
				document.getElementById('install').style.display='none';
					
			}
			else {
				//Default.showPrompt('promptUnsupported');
				SLS.logInstall(SLS.stateShowUnsupported);
			}
		}
		catch (x) {
			SLS.handleError("Default.showApp", x);
		}
//	}
};

Default.showPrompt = function (prompt) {
	try {
		//Default.showRegion(prompt);
	}
	catch (x) {
		SLS.handleError("Default.showPrompt", x);
	}
};

Default.showHeader = function () {
	try {
	}
	catch (x) {
		SLS.handleError("Default.showHeader", x);
	}
};

Default.hideHeader = function () {
	try {
	}
	catch (x) {
		SLS.handleError("Default.hideHeader", x);
	}
};

Default.showSkinHeader = function (url) {
	try {
	}
	catch (x) {
		SLS.handleError("Default.showSkinHeader", x);
	}

}

Default.onPlayerLoaded = function () {
	try {
		window.setTimeout(Default.showHeader, 1200);
		SLS.warnUnsupportedUserAgent(Default.promptWarning);
	}
	catch (x) {
		SLS.handleError("Default.onPlayerLoaded", x);
	}
};


Default.onAdLoaded = function () {
	try {
	}
	catch (x) {
		SLS.handleError("Default.onAdLoaded", x);
	}
};

Default.showCompanionAd = function (url) {
	try {
	}
	catch (x) {
		SLS.handleError("Default.showCompanionAd", x);
	}
};

Default.onInstallSilverlightLinkClicked = function () {
	try {
		Default.showPrompt('promptFinishInstall');
		SLS.logInstall(SLS.stateChooseInstall);
		SLS.getSilverlight();
	}
	catch (x) {
		SLS.handleError("Default.onInstallSilverlightLinkClicked", x);
	}
};

Default.onUpgradeSilverlightLinkClicked = function () {
	try {
		Default.showPrompt('promptFinishUpgrade');
		SLS.logInstall(SLS.stateChooseUpgrade);
		SLS.getSilverlight();
	}
	catch (x) {
		SLS.handleError("Default.onUpgradeSilverlightLinkClicked", x);
	}
};

Default.onCancelSilverlightLinkClicked = function () {
	try {
		SLS.logInstall(SLS.stateChooseReject);
		//window.close();
	}
	catch (x) {
		SLS.handleError("Default.onCancelSilverlightLinkClicked", x);
	}
};

Default.onGetSilverlightLinkClicked = function () {
	try {
		SLS.getSilverlight();
	}
	catch (x) {
		SLS.handleError("Default.onGetSilverlightLinkClicked", x);
	}
};

Default.onStandardPlayerLinkClicked = function () {
	try {
	    window.close();
	}
	catch (x) {
		SLS.handleError("Default.onStandardPlayerLinkClicked", x);
	}
};

Default.onExternalLinkClicked = function () {
	try {
	}
	catch (x) {
		SLS.handleError("Default.onExternalLinkClicked", x);
	}
};

Default.onSilverlightLoad = function (sender) {
	try {
		if (Silverlight.IsVersionAvailableOnLoad(sender))
			SLS.logInstall(SLS.stateSuccess);
	}
	catch (x) {
		SLS.handleError("Default.onSilverlightLoad", x);
	}
};

Default.onSilverlightError = function (sender, e) {
	if (Silverlight.IsVersionAvailableOnError(sender, e))
		SLS.handleError("Default.onSilverlightError", e);
};

Silverlight.IsVersionAvailableOnLoad = function (sender) {
	try {
		var host = (sender) ? sender.getHost() : document.getElementById("SilverlightObject");
		return Silverlight.__verifySilverlight2UpgradeSuccess(host);
	}
	catch (x) {
		SLS.handleError("Silverlight.IsVersionAvailableOnLoad", x);
	}
};

Silverlight.onInstallRequired = function () {
	try {
		Default.showPrompt('promptInstall');
		SLS.logInstall(SLS.stateShowInstall);
	}
	catch (x) {
		SLS.handleError("Silverlight.onInstallRequired", x);
	}
};

Silverlight.onUpgradeRequired = function () {
	try {
		Default.showPrompt('promptUpgrade');
		SLS.logInstall(SLS.stateShowUpgrade);
	}
	catch (x) {
		SLS.handleError("Silverlight.onUpgradeRequired", x);
	}
};

Silverlight.onRestartRequired = function () {
	try {
		Default.showPrompt('promptRestart');
		SLS.logInstall(SLS.stateShowRestart);
	}
	catch (x) {
		SLS.handleError("Silverlight.onRestartRequired", x);
	}
};

Silverlight.onSilverlightInstalled = function () {
	try {
		var uri = Default.appLauncherPath;
		var query = window.location.search;

		if (query.length > 1)
			uri += "&" + query.substring(1);
		window.location.replace(uri);
	}
	catch (x) {
		SLS.handleError("Silverlight.onSilverlightInstalled", x);
	}
};

function onProgressChanged(sender, eventArgs) {	
}

function onDownloadComplete(sender, eventArgs) {
}

//if (window.addEventListener) {
//	window.addEventListener("load", SLS.logEntryFlow, false);
//	window.addEventListener("beforeunload", SLS.logExitFlow, false);
//}
//else {
//	window.attachEvent("onload", SLS.logEntryFlow);
//	window.attachEvent("onbeforeunload", SLS.logExitFlow);
//};
var Nvidia3d = {
	slmv:'4.0.50401.0',//Silverlight Minimum Version
	detectionImageId:'imageE',
	testImage:false,
	clientState:false,
	bypassDetection:false,
//	bypass3DReady:true,
	PassDetection:false,
	error:false,
	systemReqsUrl:'http://www.3dvisionlive.com/content/3d-vision-live/3dvision-system-requirements.html'
};


