private void handleDragging(){
		Vector2 mousePosition = Event.current.mousePosition;
		DialogueEditorPhaseObject phase = null;
		if(Event.current.type == EventType.MouseDrag && __dragSelection != null){
			phase = DialogueEditorDataManager.data.dialogues[DialogueEditorDataManager.data.currentDialogueId].phases[__dragSelection.phaseId];
			phase.position = new Vector2((mousePosition.x + __dragSelection.mouseOffset.x), (mousePosition.y + __dragSelection.mouseOffset.y));
			if(phase.position.x < 10) phase.position.x = 10;
			if(phase.position.y < 10) phase.position.y = 10;
		}
		
		if(Event.current.type == EventType.MouseUp && __dragSelection != null){
			phase = DialogueEditorDataManager.data.dialogues[DialogueEditorDataManager.data.currentDialogueId].phases[__dragSelection.phaseId];
			if(phase != null){
				getPhaseScrollLimits();
			}
			__dragSelection = null;
		}
	}
	private void handleMouse(){
		if(Event.current.type == EventType.MouseUp){
			__dragSelection = null;
			__outputSelection = null;
		}
	}
	// BASE
	private Rect drawPhaseBase(DialogueEditorPhaseObject phase, int width, int height){
		Rect box = new Rect(phase.position.x, phase.position.y, width, height);
		GUI.Box(box, string.Empty, DialogueEditorGUI.gui.GetStyle("box_opaque"));
		
		Rect titleBarRect = new Rect(box.x + 2, box.y + 2, box.width - 4, 20);
		if(isPro){
			DialogueEditorGUI.drawShadowedRect(titleBarRect, 2);
		}else{
			GUI.Box(titleBarRect, string.Empty, DialogueEditorGUI.gui.GetStyle("box_opaque"));
			GUI.Box(titleBarRect, string.Empty, DialogueEditorGUI.gui.GetStyle("box_opaque"));
		}
		GUIStyle titleBarStyle = new GUIStyle("label");
		titleBarStyle.alignment = TextAnchor.MiddleCenter;
		
		Vector2 mousePosition = Event.current.mousePosition;
		if(titleBarRect.Contains(mousePosition)){
			if(isPro){
				DialogueEditorGUI.drawHighlightRect(titleBarRect, 1, -1);
			}else{
				GUI.Box(titleBarRect, string.Empty, DialogueEditorGUI.gui.GetStyle("box_opaque"));
				GUI.Box(titleBarRect, string.Empty, DialogueEditorGUI.gui.GetStyle("box_opaque"));
			}
		}
		
		if(isPro){
			GUI.color = new Color(0,0,0,0.3f);
			GUI.Label(new Rect(titleBarRect.x + 1, titleBarRect.y, titleBarRect.width, titleBarRect.height), DialogueEditorPhaseType.getPhases()[(int)phase.type].name, titleBarStyle);
		}
		GUI.color = GUI.contentColor;
		GUI.Label(new Rect(titleBarRect.x, titleBarRect.y - 1, titleBarRect.width, titleBarRect.height), DialogueEditorPhaseType.getPhases()[(int)phase.type].name, titleBarStyle);
		
		
		// Input
		Rect inputButtonRect = new Rect(titleBarRect.x + 2, titleBarRect.y + 2, 16, 16);
		//if(Event.current.type == EventType.MouseUp && inputButtonRect.Contains(mousePosition)){
		if(GUI.Button(inputButtonRect, string.Empty, DialogueEditorGUI.gui.GetStyle("connector_input"))){
			handlePhaseInputClicked(phase.id);
			Event.current.Use();
		}
		//GUI.Button(inputButtonRect, string.Empty, DialogueEditorGUI.gui.GetStyle("connector_input"));
		
		// Close
		Rect closeButtonRect = new Rect(titleBarRect.x + titleBarRect.width - 16 - 2, titleBarRect.y + 2, 16, 16);
		if(GUI.Button(closeButtonRect, string.Empty, DialogueEditorGUI.gui.GetStyle("phase_button_remove"))){
			handlePhaseRemoveClick(phase.id);
			Event.current.Use();
		}
		if(closeButtonRect.Contains(Event.current.mousePosition)){
			setTooltip("This button deletes the current page.\nThis can NOT be undone.");
		}
		
		if(Event.current.type == EventType.MouseDown && titleBarRect.Contains(mousePosition)){
			__dragSelection = new DialogueEditorDragPhaseObject(phase.id, new Vector2(titleBarRect.x - mousePosition.x, titleBarRect.y - mousePosition.y));
		}
		
		return new Rect(box.x, box.y, width, 25);
	}