﻿<?xml version="1.0" encoding="utf-8" ?>
<application-components>
	<application-component id = "draggable" participant-id = "draggable">
		<![CDATA[
			component_destroy:function(){
				var oT = this.GetTracker();
				if(oT && oT.getReadyState() == 4){
					oT.ReleaseDraggable(this);
				}
			},
			component_init : function(){
				var oEngine = org.cote.js.engine.EngineService.getEngine(this.getReferenceId()), _p = this.getPointers();
				/*
				if(oEngine == null || typeof oEngine != "object"){
						alert("Invalid engine reference");
						this.destroy();
						return;
				}
				*/
				//var oX = org.cote.js.xhtml.XHTMLComponent.newInstance(0,0,"drag-tracker",this.getReferenceId(),"drag-tracker","Gizmos/component.dragtracker.xml");

				// If the tracker doesn't exist, create it
				//
				var oTracker = this.GetTracker();
				if(!oTracker){
					var oA = org.cote.js.appcomp.ApplicationComponent.newInstance("DragTracker");
					oA.loadComponent("drag-tracker","Gizmos/component.dragtracker.xml");
				}
				else{
					this.serveTransaction("trackerload");
				}
			
				this.getContainer().style.position = "relative";

			},
			GetTracker : function(){
				return org.cote.js.registry.ObjectRegistry.getObject("DragTracker");
			},
			_handle_trackerload : function(s, d){
				//this.getContainer().innerHTML = "[ draggable - [ee]]";
			},
			_handle_mouseover : function(e){
				 var evt = org.cote.js.dom.event._gevt(e);
				 var oSrc = org.cote.js.dom.event._gevt_src(evt);
				 var dt = this.GetTracker();
				 //document.title = (new Date()).getTime();
				 if(!dt.IsCapturing() || dt.GetCaptured() == this || dt.GetDropping() == this) return;
				//document.title = (new Date()).getTime() + ":" + dt.IsCapturing() + " / " + this.getObjectId() + ":" + dt.GetCaptured().getObjectId();
				 dt.RequestDroppable(this);
				org.cote.js.dom.event._gevt_cancel(evt);
				evt.returnValue = false;
						
				return false;

			},
			
			_handle_mousedown : function(e){
				var evt, t, l;
				
				//this.getContainer().innerHTML = "[ draggable - [md]]";
				evt = org.cote.js.dom.event._gevt(e);
				var oSrc = org.cote.js.dom.event._gevt_src(evt);
				if(oSrc != this.getContainer()) return;
						
				//alert($E.dom.event._gevt_src(evt).nodeName);
				l = evt.clientX - org.cote.js.dom.css.getAbsoluteLeft(this.getContainer());
				t = evt.clientY - org.cote.js.dom.css.getAbsoluteTop(this.getContainer());
				this.GetTracker().CaptureDraggable(this, l, t);
				org.cote.js.dom.event._gevt_cancel(evt);
				evt.returnValue = false;
						
				return false;
			},
			_handle_mouseup : function(e){
				//this.getContainer().innerHTML = "[ draggable - [mu]]";
				this.GetTracker().ReleaseDraggable(this);
			}
		]]>
	</application-component>
</application-components>

