Public Class Find 'TODO: will changing file in npu while find is open fuck things? probably
	Dim StartBounds, EndBounds As Integer
	Dim FindOptions As RichTextBoxFinds
	Public Property npu As NPUWindow
	Private Sub FindStuff(sender As Object, e As EventArgs) Handles NextButton.Click, PreviousButton.Click
		If EndBounds = 0 Then EndBounds = npu.TextFileHolder.TextLength
		If sender.name = "PreviousButton" Then 'BACKWARDS
			FindOptions = RichTextBoxFinds.Reverse Or GetFindSettings()
			StartBounds = 0
			EndBounds -= 1
		Else 'FORWARDS
			FindOptions = RichTextBoxFinds.None Or GetFindSettings()
			EndBounds = npu.TextFileHolder.TextLength
			StartBounds += 1
		End If
		Dim FindMeCountable As String() = New String(0) {FindMe.Text.ToLower}
		FindStatus.Text = ("Found " & CountFindMeAppearances() & " results").Replace("1 results", "1 result")
		ResetFormatting()
		If FindStatus.Text = "Found 0 results" Then
			Beep()
		Else
			Dim findResult As Integer = npu.TextFileHolder.Find(FindMe.Text, StartBounds, EndBounds, FindOptions)
			If findResult = -1 Then
				FindStatus.Text = "Reached last instance, looping"
				StartBounds = 0
				EndBounds = npu.TextFileHolder.TextLength
			End If
			npu.TextFileHolder.[Select](npu.TextFileHolder.Find(FindMe.Text, StartBounds, EndBounds, FindOptions), FindMe.Text.Length)
			npu.TextFileHolder.SelectionFont = New Font(npu.TextFileHolder.Font, FontStyle.Bold)
			npu.TextFileHolder.SelectionBackColor = Color.Yellow
			If StartBounds < 0 Then StartBounds = 0
			If EndBounds < 0 Then EndBounds = npu.TextFileHolder.TextLength
			StartBounds = npu.TextFileHolder.Find(FindMe.Text, StartBounds, EndBounds, FindOptions)
			EndBounds = npu.TextFileHolder.Find(FindMe.Text, StartBounds, EndBounds, FindOptions) + FindMe.Text.Length
			npu.TextFileHolder.SelectionStart = StartBounds
			If sender.name = "PreviousButton" Then npu.TextFileHolder.SelectionStart = EndBounds
			npu.TextFileHolder.ScrollToCaret() 'TODO: Fix jumpiness
		End If
	End Sub
	Public Sub ResetFormatting() Handles Me.Closed
		Dim SelectPos As Integer = npu.TextFileHolder.SelectionStart
		npu.TextFileHolder.[Select](0, npu.TextFileHolder.TextLength)
		npu.TextFileHolder.SelectionFont = New Font(npu.TextFileHolder.Font, FontStyle.Regular)
		npu.TextFileHolder.SelectionBackColor = npu.TextFileHolder.BackColor
		npu.TextFileHolder.Select(SelectPos, 0)
	End Sub

	Private Sub HighlightAllButton_Click(sender As Object, e As EventArgs) Handles HighlightAllButton.Click
		StartBounds = 0
		EndBounds = npu.TextFileHolder.TextLength
		Dim LastFound As Integer = 0
		Try
			While True
				npu.TextFileHolder.[Select](npu.TextFileHolder.Find(FindMe.Text, LastFound, npu.TextFileHolder.TextLength, RichTextBoxFinds.None), FindMe.Text.Length)
				npu.TextFileHolder.SelectionFont = New Font(npu.TextFileHolder.Font, FontStyle.Bold)
				npu.TextFileHolder.SelectionBackColor = Color.Yellow
				LastFound = npu.TextFileHolder.Find(FindMe.Text, LastFound, npu.TextFileHolder.TextLength, RichTextBoxFinds.None) + 1
			End While
		Catch ex As Exception
			Dim FindMeCountable As String() = New String(0) {FindMe.Text.ToLower}
			FindStatus.Text = ("Found " & npu.TextFileHolder.Text.ToString.ToLower.Split(FindMeCountable, StringSplitOptions.None).Length - 1 & " results").Replace("1 results", "1 result")
		End Try

	End Sub

	Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
		Close()
	End Sub

	Private Sub FindMe_TextChanged(sender As Object, e As EventArgs) Handles FindMe.TextChanged
		HighlightAllButton.Enabled = FindMe.Text <> ""
		PreviousButton.Enabled = FindMe.Text <> ""
		NextButton.Enabled = FindMe.Text <> ""
	End Sub

	Private Function GetFindSettings()
		Return 0 + (4 * Math.Abs(CInt(MatchCaseCheckBox.Checked))) + (2 * Math.Abs(CInt(WholeWordCheckBox.Checked)))
	End Function

	Public Function CountFindMeAppearances()
		Dim FindMeCountable As String() = New String(0) {FindMe.Text.ToLower}
		Select Case GetFindSettings()
			Case 0
				Return npu.TextFileHolder.Text.ToString.ToLower.Split(FindMeCountable, StringSplitOptions.None).Length - 1

			Case 2 'WHOLE WORD
				Return CountWholeWordFindMeAppearances(FindMe.Text, FindOptions, False)

			Case 4 'MATCH CASE
				FindMeCountable = New String(0) {FindMe.Text}
				Return npu.TextFileHolder.Text.ToString.Split(FindMeCountable, StringSplitOptions.None).Length - 1

			Case 6 'ALL OPTIONS
				Return CountWholeWordFindMeAppearances(FindMe.Text, FindOptions, True)

			Case Else
				Return npu.TextFileHolder.Text.ToString.ToLower.Split(FindMeCountable, StringSplitOptions.None).Length - 1
		End Select
	End Function
End Class