docs: function SilverlightRuntime(options) {
  		var I = this, initTimer;
  
  		options = Basic.extend({ xap_url: Env.xap_url }, options);
  
  		Runtime.call(this, options, type, {
  			access_binary: Runtime.capTrue,
  			access_image_binary: Runtime.capTrue,
  			display_media: Runtime.capTrue,
  			do_cors: Runtime.capTrue,
  			drag_and_drop: false,
  			report_upload_progress: Runtime.capTrue,
  			resize_image: Runtime.capTrue,
  			return_response_headers: function(value) {
  				return value && I.mode === 'client';
  			},
  			return_response_type: function(responseType) {
  				if (responseType !== 'json') {
  					return true;
  				} else {
  					return !!window.JSON;
  				}
  			},
  			return_status_code: function(code) {
  				return I.mode === 'client' || !Basic.arrayDiff(code, [200, 404]);
  			},
  			select_file: Runtime.capTrue,
  			select_multiple: Runtime.capTrue,
  			send_binary_string: Runtime.capTrue,
  			send_browser_cookies: function(value) {
  				return value && I.mode === 'browser';
  			},
  			send_custom_headers: function(value) {
  				return value && I.mode === 'client';
  			},
  			send_multipart: Runtime.capTrue,
  			slice_blob: Runtime.capTrue,
  			stream_upload: true,
  			summon_file_dialog: false,
  			upload_filesize: Runtime.capTrue,
  			use_http_method: function(methods) {
  				return I.mode === 'client' || !Basic.arrayDiff(methods, ['GET', 'POST']);
  			}
  		}, { 
  			// capabilities that require specific mode
  			return_response_headers: function(value) {
  				return value ? 'client' : 'browser';
  			},
  			return_status_code: function(code) {
  				return Basic.arrayDiff(code, [200, 404]) ? 'client' : ['client', 'browser'];
  			},
  			send_browser_cookies: function(value) {
  				return value ? 'browser' : 'client';
  			},
  			send_custom_headers: function(value) {
  				return value ? 'client' : 'browser';
  			},
  			use_http_method: function(methods) {
  				return Basic.arrayDiff(methods, ['GET', 'POST']) ? 'client' : ['client', 'browser'];
  			}
  		});
  
  
  		// minimal requirement
  		if (!isInstalled('2.0.31005.0') || Env.browser === 'Opera') {
  			this.mode = false;
  		}
  
  
  		Basic.extend(this, {
  			getShim: function() {
  				return Dom.get(this.uid).content.Moxie;
  			},
  
  			shimExec: function(component, action) {
  				var args = [].slice.call(arguments, 2);
  				return I.getShim().exec(this.uid, component, action, args);
  			},
  
  			init : function() {
  				var container;
  
  				container = this.getShimContainer();
  
  				container.innerHTML = '<object id="' + this.uid + '" data="data:application/x-silverlight," type="application/x-silverlight-2" width="100%" height="100%" style="outline:none;">' +
  					'<param name="source" value="' + options.xap_url + '"/>' +
  					'<param name="background" value="Transparent"/>' +
  					'<param name="windowless" value="true"/>' +
  					'<param name="enablehtmlaccess" value="true"/>' +
  					'<param name="initParams" value="uid=' + this.uid + ',target=' + Env.global_event_dispatcher + '"/>' +
  				'</object>';
  
  				// Init is dispatched by the shim
  				initTimer = setTimeout(function() {
  					if (I && !I.initialized) { // runtime might be already destroyed by this moment
  						I.trigger("Error", new x.RuntimeError(x.RuntimeError.NOT_INIT_ERR));
  					}
  				}, Env.OS !== 'Windows'? 10000 : 5000); // give it more time to initialize in non Windows OS (like Mac)
  			},
  
  			destroy: (function(destroy) { // extend default destroy method
  				return function() {
  					destroy.call(I);
  					clearTimeout(initTimer); // initialization check might be still onwait
  					options = initTimer = destroy = I = null;
  				};
  			}(this.destroy))
  
  		}, extensions);
  	}