-- Private Methods


function init(self)
	local element = self.Element
	local maid = self._Maid
	local dragBind = self._DragBind
	local lastMousePosition = Vector3.new()
	local dragInput
	
	maid:Mark(self._DragBind)
	maid:Mark(self._StartBind)
	maid:Mark(self._StopBind)
	
	maid:Mark(element.InputBegan:Connect(function(input)
		if (VALID_PRESS[input.UserInputType]) then
			lastMousePosition = input.Position
			self.IsDragging = true
			self._StartBind:Fire()
			
			local inputEndConn; inputEndConn = input.Changed:Connect(function()
				if input.UserInputState == Enum.UserInputState.End or input.UserInputState == Enum.UserInputState.Cancel then
					if inputEndConn then
						inputEndConn:Disconnect()
						inputEndConn = nil
						
						self.IsDragging = false
						self._StopBind:Fire()
					end
				end
			end)
		end
	end))
	
	maid:Mark(element.InputChanged:Connect(function(input)
		if (VALID_MOVEMENT[input.UserInputType]) then
			dragInput = input
		end
	end))
	
	maid:Mark(UIS.InputChanged:Connect(function(input, process)
		if input == dragInput and self.IsDragging then
			local delta = input.Position - lastMousePosition
			dragBind:Fire(element, input, delta)
		end
	end))
	
	--maid:Mark(element.InputBegan:Connect(function(input)
	--	if (VALID_PRESS[input.UserInputType]) then
	--		lastMousePosition = input.Position
	--		self.IsDragging = true
	--		self._StartBind:Fire()
	--	end
	--end))
	
	--maid:Mark(UIS.InputEnded:Connect(function(input)
	--	if (VALID_PRESS[input.UserInputType]) then
	--		self.IsDragging = false
	--		self._StopBind:Fire()
	--	end
	--end))
	
	--maid:Mark(UIS.InputChanged:Connect(function(input, process)
	--	if (self.IsDragging) then
	--		if (VALID_MOVEMENT[input.UserInputType]) then
	--			local delta = input.Position - lastMousePosition
	--			lastMousePosition = input.Position
	--			dragBind:Fire(element, input, delta)
	--		end
	--	end
	--end))
end
