// 2007-10-16:  Note from Alan Cobb: www.alancobb.com
//
//	This is a reformatted version of Silverlight.js from the 
//	2007-09 v1.0 Silverlight SDK.  The stock Silverlight.js 
//	comes as a single line of Javascript 7000+ characters
//	long.  This version was reformatted to allow easier 
//	debugging and single stepping.  It should not be used in 
//	production code, but I don't think it violates the 
//	Silverlight license, because it does not modify any of 
//	the actual code, just the formatting.
//
//	To do this reformatting, I first used a trial copy of 
//	Polystyle: http://www.polystyle.com/, then I added 
//	lines of '*' to more visibly separate the functions.
//	
///////////////////////////////////////////////////////////////////////////////
//
//  Silverlight.js   			version 1.0
//
//  This file is provided by Microsoft as a helper file for websites that
//  incorporate Silverlight Objects. This file is provided under the Silverlight
//  SDK 1.0 license available at http://go.microsoft.com/fwlink/?linkid=94240.
//  You may not use or distribute this file or the code in this file except as
//  expressly permitted under that license.
//
//  Copyright (c) 2007 Microsoft Corporation. All rights reserved.
//
///////////////////////////////////////////////////////////////////////////////

if( ! window.Silverlight )
	window.Silverlight = {};

Silverlight._silverlightCount = 0;
Silverlight.ua = null;
Silverlight.available = false;
Silverlight.fwlinkRoot = "http://go.microsoft.com/fwlink/?LinkID=";

//***************************************************************
Silverlight.detectUserAgent = function()
{
	var a = window.navigator.userAgent;
	Silverlight.ua =
		{
		OS: "Unsupported",
		Browser: "Unsupported"
		};

	if( a.indexOf( "Windows NT" ) >= 0 )
		Silverlight.ua.OS = "Windows";

	else if( a.indexOf( "PPC Mac OS X" ) >= 0 )
		Silverlight.ua.OS = "MacPPC";

	else if( a.indexOf( "Intel Mac OS X" ) >= 0 )
		Silverlight.ua.OS = "MacIntel";

	if( Silverlight.ua.OS != "Unsupported" )
		if( a.indexOf( "MSIE" ) >= 0 )
		{
			if( navigator.userAgent.indexOf( "Win64" ) == - 1 )
				if( parseInt( a.split( "MSIE" )[1] ) >= 6 )
					Silverlight.ua.Browser = "MSIE"
		}
		else if( a.indexOf( "Firefox" ) >= 0 )
		{
			var b = a.split( "Firefox/" )[1].split( "." ), c = parseInt( b[0] );

			if( c >= 2 )
				Silverlight.ua.Browser = "Firefox";
			else
			{
				var d = parseInt( b[1] );

				if( c == 1 && d >= 5 )
					Silverlight.ua.Browser = "Firefox"
			}
		}

		else if( a.indexOf( "Safari" ) >= 0 )
			Silverlight.ua.Browser = "Safari"
};

Silverlight.detectUserAgent();

//***************************************************************
Silverlight.isInstalled = function(d)
{
	var c = false, a = null;

	try
	{
		var b = null;

		if( Silverlight.ua.Browser == "MSIE" )
			b = new ActiveXObject( "AgControl.AgControl" );
		else if( navigator.plugins["Silverlight Plug-In"] )
		{
			a = document.createElement( "div" );
			document.body.appendChild( a );

			if( Silverlight.ua.Browser == "Safari" )
				a.innerHTML = '<embed type="application/x-silverlight" />';
			else
				a.innerHTML
					= '<object type="application/x-silverlight"  data="data:," />';
			b = a.childNodes[0]
		}
		document.body.innerHTML;

		if( b.IsVersionSupported( d ) )
			c = true;
		b = null;
		Silverlight.available = true
	}
	catch (e)
	{
		c = false
	}

	if( a )
		document.body.removeChild( a );
	return c
};

//***************************************************************
Silverlight.createObject = function(l, g, m, j, k, i, h)
{
	var b = {}, a = j, c = k;

	a.source = l;
	b.parentElement = g;
	b.id = Silverlight.HtmlAttributeEncode( m );
	b.width = Silverlight.HtmlAttributeEncode( a.width );
	b.height = Silverlight.HtmlAttributeEncode( a.height );
	b.ignoreBrowserVer = Boolean( a.ignoreBrowserVer );
	b.inplaceInstallPrompt = Boolean( a.inplaceInstallPrompt );
	var e = a.version.split( "." );
	b.shortVer = e[0] + "." + e[1];
	b.version = a.version;
	a.initParams = i;
	a.windowless = a.isWindowless;
	a.maxFramerate = a.framerate;

	for (var d in c)
		if( c[d] && d != "onLoad" && d != "onError" )
		{
			a[d] = c[d];
			c[d] = null
		}
	delete a.width;
	delete a.height;
	delete a.id;
	delete a.onLoad;
	delete a.onError;
	delete a.ignoreBrowserVer;
	delete a.inplaceInstallPrompt;
	delete a.version;
	delete a.isWindowless;
	delete a.framerate;
	delete a.data;
	delete a.src;

	if( Silverlight.isInstalled( b.version ) )
	{
		if( Silverlight._silverlightCount == 0 )
			if( window.addEventListener )
				window.addEventListener( "onunload", Silverlight.__cleanup,
					false );
			else
				window.attachEvent( "onunload", Silverlight.__cleanup );
		var f = Silverlight._silverlightCount++;
		a.onLoad = "__slLoad" + f;
		a.onError = "__slError" + f;
		window[a.onLoad] = function(a)
		{
			if( c.onLoad )
				c.onLoad( document.getElementById( b.id ), h, a )
		};
		window[a.onError] = function(a, b)
		{
			if( c.onError )
				c.onError( a, b );
			else
				Silverlight.default_error_handler( a, b )
		};
		slPluginHTML = Silverlight.buildHTML( b, a )
	}
	else
		slPluginHTML = Silverlight.buildPromptHTML( b );

	if( b.parentElement )
		b.parentElement.innerHTML = slPluginHTML;
	else
		return slPluginHTML
};

//***************************************************************
Silverlight.supportedUserAgent = function()
{
	var a = Silverlight.ua,
		b =
			a.OS == "Unsupported" || a.Browser == "Unsupported"
				|| a.OS == "Windows" && a.Browser == "Safari"
				|| a.OS.indexOf( "Mac" ) >= 0 && a.Browser == "IE";
	return ! b
};

//***************************************************************
Silverlight.buildHTML = function(c, d)
{
	var a = [], e, i, g, f, h;

	if( Silverlight.ua.Browser == "Safari" )
	{
		a.push( "<embed " );
		e = "";
		i = " ";
		g = '="';
		f = '"';
		h = ' type="application/x-silverlight"/>'
			+ "<iframe style='visibility:hidden;height:0;width:0'/>"
	}
	else
	{
		a.push( '<object type="application/x-silverlight" data="data:,"' );
		e = ">";
		i = ' <param name="';
		g = '" value="';
		f = '" />';
		h = "</object>"
	}
	a.push( ' id="' + c.id + '" width="' + c.width + '" height="' + c.height
		+ '" ' + e );

	for (var b in d)
		if( d[b] )
			a.push( i + Silverlight.HtmlAttributeEncode( b ) + g
				+ Silverlight.HtmlAttributeEncode( d[b] ) + f );
	a.push( h );
	return a.join( "" )
};

//***************************************************************
Silverlight.default_error_handler = function(e, b)
{
	var d, c = b.ErrorType;
	d = b.ErrorCode;
	var a = "\nSilverlight error message     \n";
	a += "ErrorCode: " + d + "\n";
	a += "ErrorType: " + c + "       \n";
	a += "Message: " + b.ErrorMessage + "     \n";

	if( c == "ParserError" )
	{
		a += "XamlFile: " + b.xamlFile + "     \n";
		a += "Line: " + b.lineNumber + "     \n";
		a += "Position: " + b.charPosition + "     \n"
	}
	else if( c == "RuntimeError" )
	{
		if( b.lineNumber != 0 )
		{
			a += "Line: " + b.lineNumber + "     \n";
			a += "Position: " + b.charPosition + "     \n"
		}
		a += "MethodName: " + b.methodName + "     \n"
	}
	alert( a )
};

//***************************************************************
Silverlight.createObjectEx = function(b)
{
	var a = b,
		c =
			Silverlight.createObject( a.source, a.parentElement, a.id,
				a.properties, a.events, a.initParams, a.context );

	if( a.parentElement == null )
		return c
};

//***************************************************************
Silverlight.buildPromptHTML = function(l)
{
	var a = null, d = Silverlight.fwlinkRoot, c = Silverlight.ua.OS,
		b = "92822", e, f = "Get Microsoft Silverlight", m = "0x409";

	if( l.inplaceInstallPrompt )
	{
		var n = "98109", i;

		if( Silverlight.available )
		{
			e = "96189";
			i = "96422"
		}
		else
		{
			e = "96188";
			i = "96422"
		}
		var h = "93481", g = "93483";

		if( c == "Windows" )
		{
			b = "92799";
			h = "92803";
			g = "92805"
		}
		else if( c == "MacIntel" )
		{
			b = "92808";
			h = "92804";
			g = "92806"
		}
		else if( c == "MacPPC" )
		{
			b = "92807";
			h = "92815";
			g = "92816"
		}
		var k =
			'By clicking <b>"Get Microsoft Silverlight"</b> you accept the<br /><a title="Silverlight License Agreement" href="{2}" target="_top" style="text-decoration: underline; color: #96C5E1"><b>Silverlight license agreement</b></a>',
			j =
				'Silverlight updates automatically, <a title="Silverlight Privacy Statement" href="{3}" target="_top" style="text-decoration: underline; color: #96C5E1"><b>learn more</b></a>';
		a
			= '<table border="0" cellpadding="0" cellspacing="0" width="206px"><tr><td><img style="display: block; cursor: pointer; border= 0;" title="'
			+ f + '" alt="' + f
				+ '" onclick="javascript:Silverlight.followFWLink({0});" src="{1}" /></td></tr><tr><td style="width: 206px; margin: 0px; background: #FFFFFF; color: #C7C7C7; text-align: left; border-left-style: solid; border-right-style: solid; padding-left: 6px; padding-right: 6px; padding-top: 3px; padding-bottom: 0px; border-width: 2px; border-color: #c7c7bd; font-family: Verdana; font-size: 55%">'
			+ k
				+ '</td></tr><tr><td><img src="{5}" style="border: 0; display: block" /></td></tr><tr><td style="width: 206px; margin: 0px; background: #D8EFF9; color: #C7C7C7; text-align: left; border-left-style: solid; border-right-style: solid; padding-left: 6px; padding-right: 6px; padding-top: 0px; padding-bottom: 2px; border-width: 2px; border-color: #c7c7bd; font-family: Verdana; font-size: 55%">'
			+ j
				+ '</td></tr><tr><td><img alt="" src="{4}" /></td></tr></table>';
		a = a.replace( "{2}", d + h );
		a = a.replace( "{3}", d + g );
		a = a.replace( "{4}", d + i );
		a = a.replace( "{5}", d + n )
	}
	else
	{
		if( Silverlight.available )
			e = "94377";
		else
			e = "92801";

		if( c == "Windows" )
			b = "92800";

		else if( c == "MacIntel" )
			b = "92812";

		else if( c == "MacPPC" )
			b = "92811";
		a
			= '<div style="display:block; width: 205px; height: 67px;"><img onclick="javascript:Silverlight.followFWLink({0});" style="border:0; cursor:pointer" src="{1}" title="'
			+ f + '" alt="' + f + '"/></div>'
	}
	a = a.replace( "{0}", b );
	a = a.replace( "{1}", d + e + "&amp;clcid=" + m );
	return a
};

//***************************************************************
Silverlight.__cleanup = function()
{
	for (var a = Silverlight._silverlightCount - 1; a >= 0; a--)
	{
		window["__slLoad" + a] = null;
		window["__slError" + a] = null
	}

	if( window.removeEventListener )
		window.removeEventListener( "unload", Silverlight.__cleanup, false );
	else
		window.detachEvent( "onunload", Silverlight.__cleanup )
};

//***************************************************************
Silverlight.followFWLink = function(a)
{
	top.location = Silverlight.fwlinkRoot + String( a )
};

//***************************************************************
Silverlight.HtmlAttributeEncode = function(c)
{
	var a, b = "";

	if( c == null )
		return null;

	for (var d = 0; d < c.length; d++)
	{
		a = c.charCodeAt( d );

		if( a > 96 && a < 123 || a > 64 && a < 91 || a > 43 && a < 58 && a != 47
			|| a == 95 )
			b = b + String.fromCharCode( a );
		else
			b = b + "&#" + a + ";"
	}
	return b
}