<application-components>
	<application-component id = "dyn_config_item">
		<![CDATA[
			component_init:function(){
				/* dynamically created component from provider */
			}
		]]>
	</application-component>
	<application-component id = "dyn_config">
		<![CDATA[
			component_init:function(){

				var o = document.createElement("p"), e;
				o.setAttribute("acid","dyn_config_item");
				e = org.cote.js.engine.EngineService.getEngine(this.getContainerId());
				e.engine_element.appendChild(o);
				org.cote.js.engine.EngineService.bindElement(this.getContainerId(),o);

			}

		]]>
	</application-component>
	
	<application-component id = "data_provider">
		<![CDATA[
			component_init:function(){
				var _m = org.cote.js.message.MessageService,
					_e = org.cote.js.engine.EngineService,
					task_service,
					task
				;
				
				_m.sendMessage("MCPInitializer Component Init","200.1");

				if(!this.getTokenStack().addToken(this,"data_provider",this)){
					_m.sendMessage("Unable to add token","200.4");
				}

				task_service = _e.getTaskService();
				task = task_service.getTaskByName("data_provider");
				if(!task || !task_service.isTaskComplete(task)){
					this.importTask();
					task = task_service.getTaskByName("data_provider_task");
					if(task){
						task_service.executeTask(task);
					}
					else{
						_m.sendMessage("Failed to load provider initialization task.","200.4");
					}
				}
				else if(task && task_service.isTaskComplete(task)){
					/* serve back to self -- this could just be a direct invocation */
					if(!this.serveTransaction("task_complete",0,1,"data_provider")){
						_m.sendMessage("Did not serve transaction.","200.4");
					}
				}
				else{
					_m.sendMessage("Failed to start initialization task.","200.4");
				}
			},
			importTask:function(){
				var _a = org.cote.js.util.driver.ApplicationDriver,
					_e = org.cote.js.engine.EngineService,
					task_service,
					task,
					_x = org.cote.js.xml
				;

				task_service = _e.getTaskService();
				task = task_service.addTask(
					"data_provider_task",
					"xml",
					_a.getConfig().getParam("provider_tasks"),
					"import-task",
					"data_provider"
				);
			},
			_handle_task_complete:function(s,p){
				var _m = org.cote.js.message.MessageService,
					_e = org.cote.js.engine.EngineService,
					e
				;
				e = _e.getEngine(this.getContainerId());
				if(e){
					_m.sendMessage("mcp_initialize: Task completed.","200.1");
					_e.applyConfiguration(e,"demonstration_12:providers");
				}
				else{
					_m.sendMessage("MCPInitializer Failed to Find Engine Reference","200.4",1);
				}

			},
			component_destroy:function(){
				org.cote.js.message.MessageService.sendMessage("MCPInitializer Component Destroy","200.1");
			}
		]]>
	</application-component>
	<application-component id = "provider_util">
		<![CDATA[
			component_init:function(){
				var _m = org.cote.js.message.MessageService;
				_m.sendMessage("Provider Utility Component Init","200.1");
				
				this.createHandler("provide",0,0,1);

				if(!this.getTokenStack().addToken(this,"provider_util",this)){
					_m.sendMessage("Unable to add Provider Util Token","200.4");
				}

				org.cote.js.engine.EngineService.getTaskService().returnDependency("provider_util");
			},
			getOrganizations : function(i,x,n){
				var s,o;
				s = "/projects/engine/demonstrations/demonstration_12/organizations.aspx";
				//s = "/projects/imnmotion/jsp/getOrganizations.aspx";
				o = x.createElement("import-xml");
				o.setAttribute("src",s);
				n.appendChild(o);
			},
			postOrganizations : function(i,x,n){
				s = "/projects/engine/demonstrations/demonstration_12/organizations.aspx";
				var v = org.cote.js.xml.postXml(s,"foo=bar");
				if(v){
					org.cote.js.xml.setInnerXHTML(n,v.documentElement.firstChild,0,x);
				}
			},
			_handle_provide:function(i,x,n,f){
				/*
					i = id
					f = function
					x = xml document
					n = node context
					
					p = provider path
				*/
				var r = 0, o;
				if(!x || !n){
					org.cote.js.message.MessageService.sendMessage("Invalid XML Context","200.4");
				}
				if(typeof this[f] == "function"){
					r = this[f](i,x,n);
				}
				else{
					org.cote.js.message.MessageService.sendMessage("Invalid function '" + f + "' in handle_dispatch","200.4");
				}

			
			}

		]]>
	</application-component>
</application-components>
