
/*
FILE CONCAT ADD FILE
PATH: /ft/resources/client/events.draggable.js
*/
EventManager.prototype.draggable = function(oArgs) {
            
	var ret = {};
	var self = this;
	
	var newUp = function() {
		self.remove(self.dragEvent);
		self.remove(self.upEvent);

		self.dragEvent = null;
		self.upEvent = null;
		oArgs.up.apply(this, arguments);
	}
	
	var newMove = function () {
		
		oArgs.move.apply(oArgs.context, arguments);

		if(!self.upEvent) {
			self.upEvent = self.add({
				element:arguments[1]
				,type:"mouseup"
				,handler:newUp
				,context:oArgs.context
			});
		}
	}

	var move = function() {
		if(!self.dragEvent){
			self.dragEvent = self.add({
				element:document
				,type:"mousemove"
				,handler:newMove
				,context:oArgs.context
			});
		}
	}

	var newDown = function() {
		oArgs.down.apply(this,  arguments);
		move();
	}
	
	var down = this.delegate(oArgs.parent, "mousedown", {

		selector: oArgs.selector
		,handler : newDown
		,context : oArgs.context
	});
	
	ret.down = down;

	if(oArgs.over) {
				
		var over = this.delegate(oArgs.parent, "mouseover", {
		
			 selector: oArgs.selector
			,handler : oArgs.over
			,context : oArgs.context
			,dynamicEvent : oArgs.dynamicEvent
		});
		
		ret.over = over;
	}

	return  ret;
}
