added shuffle event, documented all events and undo/redo methods