var Silverlight = {
	Initialize: function(callback) {
		var d = GetWindowDimensions( );
		var w = d.width;
		var h = d.height;
		
		Silverlight.createObjectEx({
		        // You will want to change this...
		        // ...a bug seems to be preventing relative paths.
				source: Configuration.XamlRoot,
				parentElement: D('slControlHost'),
				id: 'slControl',

				properties: {
					width: w,
					height: h,
					inplaceInstallPrompt: false,
					background: '#eee',
					isWindowless: 'false',
					framerate: '24',
					version: '1.0'
				},

				events: {
					onError: null,
					onLoad: delegate(this, callback)
				},

				context: null
			}
		);
	},
	
	CreateElement: function(xaml) {
	    var obj = D('slControl').content.createFromXaml(xaml);
	    return obj;
	},

	AddElement: function(parentId, element) {
		main.content.findName(parentId).children.add(element)
	},

    // See my blog entry at: 
    //   http: //www.netfxharmonics.com/2007/04/Converting-JSON-to-XAML.aspx
	ScanJSONElements: function(parent, data, doc) {
		var o = '';
		for(var e in data) {
			if(e) {
				if (typeof(data[e]) == 'object') {
					var name = e;
					if(e.indexOf('__') > -1) {
						name = e.substring(0, e.indexOf('__'));
					}

					var element;
					if(DOM.implementation && DOM.implementation.createDocument) {
						element = doc.createElementNS('', name, '');
					}
					else {
						element = doc.createElement(name);
					}
					parent.appendChild(element);
					Silverlight.ScanJSONElements(element, data[e], doc);
				}
				else {
					var attr;
					if(DOM.implementation && DOM.implementation.createDocument) {
						if(e.indexOf('xmlns') > -1) {
							attr = doc.createAttribute(e);
						}
						else {
							attr = doc.createAttributeNS('', e);
						}
					}
					else {
						attr = doc.createAttribute(e);
					}
					attr.nodeValue = data[e];
					parent.setAttributeNode(attr);
				}
			}
		}
		return o;
	},

	CreateXamlFromJSON: function(data) {
		var doc = null;
		if(DOM.implementation && DOM.implementation.createDocument) {
			doc = DOM.implementation.createDocument('', '', null);
			Silverlight.ScanJSONElements(doc, data, doc);

			var xmlSerializer = new XMLSerializer( );
			return xmlSerializer.serializeToString(doc);
		}
		else {
			doc = new ActiveXObject("MSXML2.DOMDocument");
			Silverlight.ScanJSONElements(doc, data, doc);
			
			return doc.xml.replace('xmlns=""', '');
		}
	}
};