#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_outfile=Cinema_v2.exe
#AutoIt3Wrapper_Res_Fileversion=6.5.0.1
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#cs
	|---------------Definition---------------|
	|				-=Cinema=-				 |
	|---------------Autor--------------------|
	|Name	 	:		nefas				 |
	|Datum	 	:		23.02.2010			 |
	|Last Edit	:		25.02.2010			 |
	|---------------Version------------------|
	|ALPHA	 : /							 |
	|BETA	 : 6.5							 |
	|RC		 : /							 |
	|FINAL	 : /							 |
	|----------------------------------------|
#ce
#Region ###  Includes #############################################################################
#include <GuiListView.au3>
#include <IE.au3>
#include <Inet.au3>
#include <String.au3>
#include <GuiTab.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#Include <GuiListBox.au3>
#EndRegion ###  Includes #############################################################################
Opt("TrayAutoPause", 0) ;0=keine Pause, 1=Pause
Opt("GUICloseOnESC", 0) ;1=ESC beendet, 0=ESC schließt nich
;~ Opt("GUIOnEventMode", 0)
;~ Opt("TrayMenuMode", 1) ;0=append, 1=no default menu, 2=no automatic check, 4=menuitemID  not return
Opt("TrayIconDebug", 0) ;0=no info, 1=debug line info
#Region ### Variablen #############################################################################
Dim $Array_Cinema[100][100]
Dim $frmWait
Global $ListView_Kino, $hStatus, $SiteCount = 0, $MoreSites = 0,$SiteCount_2 = 0, $SiteCounter = 0
Dim $Date = "25.02.2010"
Dim $Version ="Beta 5.5"


#EndRegion ### Variablen #############################################################################

#Region ### GUI MainForm ##########################################################################
$MainForm = GUICreate("Kino Programm by nefas", 980, 370, 193, 115)
$Label1 = GUICtrlCreateLabel("Stadt:", 8, 13, 55, 17)
$txtCity = GUICtrlCreateInput("", 40, 8, 120, 21)
$cmdGo = GUICtrlCreateButton("Go", 162, 8, 27, 21, $WS_GROUP)
$lbl_2 = GUICtrlCreateLabel("Tag:: ", 200, 13, 40, 17)
$radio_Heute = GUICtrlCreateRadio("Heute", 235, 13, 50, 17)
$radio_Morgen = GUICtrlCreateRadio("", 335, 13, 80, 17)
$radio_UeberMorgen = GUICtrlCreateRadio("", 435, 13, 80, 17)
$radio_UeberUeberMorgen = GUICtrlCreateRadio("", 535, 13, 80, 17)
;~ $chk_Genauigkeit = GUICtrlCreateCheckbox("Genau",8,35)
$lbl_3 = GUICtrlCreateLabel("Adresse: ", 160, 40, 40, 17)
$lbl_Adresse = GUICtrlCreateLabel("", 210, 40, 350, 17)
GUICtrlSetColor(-1, 0x0000FF)
$lbl_4 = GUICtrlCreateLabel("Tel.: ", 560, 40, 20, 17)
$lbl_TelNum = GUICtrlCreateLabel("", 590, 40, 100, 17)
GUICtrlSetColor(-1, 0x0000FF)
$ListView_Kino = GUICtrlCreateListView("",8,56,150,300)
_GUICtrlListView_AddColumn($ListView_Kino, "Kino-Name", 145, 0)
_GUICtrlListView_SetExtendedListViewStyle($ListView_Kino, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES,$LVS_EX_ONECLICKACTIVATE))
$ListView_Film = GUICtrlCreateListView("", 160, 56, 810, 300)
_GUICtrlListView_AddColumn($ListView_Film, "Titel", 200, 2)
_GUICtrlListView_AddColumn($ListView_Film, "Laufzeit", 75, 2)
_GUICtrlListView_AddColumn($ListView_Film, "FSK", 200, 2)
_GUICtrlListView_AddColumn($ListView_Film, "Genre", 150, 2)
_GUICtrlListView_AddColumn($ListView_Film, "Start Zeit", 180, 2)
_GUICtrlListView_SetExtendedListViewStyle($ListView_Film, BitOR($LVS_EX_FULLROWSELECT,$LVS_EX_GRIDLINES,$LVS_EX_ONECLICKACTIVATE))
GUICtrlSetState($radio_Heute, $GUI_CHECKED)
GUISetState()
#EndRegion ### GUI MainForm ##########################################################################

GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
_ReduceMemory()

While 1
	$nMsg = GUIGetMsg(1)
	Select
		Case $nMsg[0] = $GUI_EVENT_CLOSE
			Exit
		Case $nMsg[0] = $ListView_Kino And $nMsg[1] = $MainForm
			GetFilmList()
		Case $nMsg[0] = $cmdGo
			$MoreSites = 0
			$SiteCount_2 = 0
			$SiteCounter = 0
			getSource()
		Case $nMsg[0] = $radio_Heute And BitAND(GUICtrlRead($radio_Heute), $GUI_CHECKED) = $GUI_CHECKED
			$MoreSites = 0
			$SiteCount_2 = 0
			$SiteCounter = 0
			getSource()
		Case $nMsg[0] = $radio_Morgen And BitAND(GUICtrlRead($radio_Morgen), $GUI_CHECKED) = $GUI_CHECKED
			$MoreSites = 0
			$SiteCount_2 = 0
			$SiteCounter = 0
			getSource()
		Case $nMsg[0] = $radio_UeberMorgen And BitAND(GUICtrlRead($radio_UeberMorgen), $GUI_CHECKED) = $GUI_CHECKED
			$MoreSites = 0
			$SiteCount_2 = 0
			$SiteCounter = 0
			getSource()
		Case $nMsg[0] = $radio_UeberUeberMorgen And BitAND(GUICtrlRead($radio_UeberUeberMorgen), $GUI_CHECKED) = $GUI_CHECKED
			$MoreSites = 0
			$SiteCount_2 = 0
			$SiteCounter = 0
			getSource()
	EndSelect
WEnd

#Region ### Func _Wait ############################################################################
Func _Wait()
	ConsoleWrite('@@ (94) :(' & @MIN & ':' & @SEC & ') _Wait()' & @CR) ;### Function Trace
	GUISetState(@SW_DISABLE, $MainForm)
	$Kino_Pos = WinGetPos ( "Kino Programm")



	$frmWait = GUICreate("", 161, 34, $Kino_Pos[0] + 400,$Kino_Pos[1] + 150, BitOR($WS_MINIMIZEBOX, $WS_DLGFRAME, $WS_POPUP, $WS_GROUP, $WS_CLIPSIBLINGS))
	$Label1 = GUICtrlCreateLabel("Bitte warten...", 0, 0, 160, 33)
	GUICtrlSetFont(-1, 18, 800, 0, "MS Sans Serif")
	GUICtrlSetColor(-1, 0xFFFFE1)
	GUICtrlSetBkColor(-1, 0xA6CAF0)
	GUISetState()
EndFunc   ;==>_Wait
#EndRegion ### Func _Wait ############################################################################


#Region ### Func getSource ########################################################################
Func getSource($ii = -1)
	ConsoleWrite('@@ (108) :(' & @MIN & ':' & @SEC & ') getSource()' & @CR) ;### Function Trace


	If GUICtrlRead($txtCity) = "" Then
		MsgBox(0, "Warnung", "Bitte geben Sie einen Stadtnamen oder ein Plz. ein!")
	Else

		If $MoreSites = 0 Then
			_Wait()
		EndIf

		Dim $CityName = GUICtrlRead($txtCity)
		Dim $i = 0
		Dim $url
		Dim $sHTML
		Dim $oIE
		Dim $temp_array
		Dim $j = 0


		$CityName = StringReplace($CityName, 'ü', 'ue')
		$CityName = StringReplace($CityName, 'ä', 'ae')
		$CityName = StringReplace($CityName, 'ö', 'oe')
		$CityName = StringReplace($CityName, 'ß', 'ss')

		If GUICtrlRead($radio_Morgen) = $GUI_CHECKED Then
			$url = 'http://www.google.de/movies?hl=de&near=' & $CityName & '&date=1&start=' & $SiteCount_2
		ElseIf GUICtrlRead($radio_UeberMorgen) = $GUI_CHECKED Then
			$url = 'http://www.google.de/movies?hl=de&near=' & $CityName & '&date=2&start=' & $SiteCount_2
		ElseIf GUICtrlRead($radio_UeberUeberMorgen) = $GUI_CHECKED Then
			$url = 'http://www.google.de/movies?hl=de&near=' & $CityName & '&date=3&start=' & $SiteCount_2
		Else
			$url = 'http://www.google.de/movies?hl=de&near=' & $CityName & '&date=0&start=' & $SiteCount_2
		EndIf

		$oIE = _IECreate($url, 0, 0)
		$sHTML = _IEBodyReadHTML($oIE)
		_IEQuit($oIE)

		If $MoreSites = 0 Then
			For $i = 0 To UBound($Array_Cinema, 1) - 1
				For $jj = 0 To UBound($Array_Cinema, 2) - 1
					$Array_Cinema[$i][$jj] = ""
				Next
			Next
		EndIf

		$aArray = StringSplit($sHTML, @CRLF, 1)
		For $i = 0 To UBound($aArray) - 1
			Select
				Case $aArray[$i] = "<DIV class=theater>"
					$j = 0
					$i += 2
					$ii += 1
					$temp_array = _StringBetween($aArray[$i], "<SPAN dir=ltr>", "</SPAN>")
					If @error = 0 Then $Array_Cinema[$ii][$j] = $temp_array[0]
					$i += 1
					$j += 1
					$temp_array = _StringBetween($aArray[$i], "<DIV class=info>", "<A class=")
					If @error = 0 Then $Array_Cinema[$ii][$j] = $temp_array[0]
				Case $aArray[$i] = "<DIV class=movie>"
					$i += 1
					$j += 1
					$temp_array = _StringBetween($aArray[$i], "<SPAN dir=ltr>", "</SPAN>")
					If @error = 0 Then $Array_Cinema[$ii][$j] = $temp_array[0]
					$j += 1
					$temp_array = _StringBetween($aArray[$i], "</NOBR>", "</SPAN>")
					If @error = 0 Then $Array_Cinema[$ii][$j] = $temp_array[0]
					$i += 1
					$j += 1
					$temp_array = _StringBetween($aArray[$i], "<DIV class=times>", "</DIV>")
					If @error = 0 Then $Array_Cinema[$ii][$j] = $temp_array[0]
				Case StringInStr($aArray[$i], 'date=1">')
					$temp_array = _StringBetween($aArray[$i], 'date=1">', "</A></DIV>")
					If @error = 0 Then GUICtrlSetData($radio_Morgen, $temp_array[0])
				Case StringInStr($aArray[$i], 'date=2">')
					$temp_array = _StringBetween($aArray[$i], 'date=2">', "</A></DIV>")
					If @error = 0 Then GUICtrlSetData($radio_UeberMorgen, $temp_array[0])
				Case StringInStr($aArray[$i], 'date=3">')
					$temp_array = _StringBetween($aArray[$i], 'date=3">', "</A></DIV>")
					If @error = 0 Then GUICtrlSetData($radio_UeberUeberMorgen, $temp_array[0])
				Case StringInStr($aArray[$i], '<TD noWrap><A href')
					If $MoreSites = 0 Then
						$SiteCount += 1
					EndIf
			EndSelect
		Next
		If $MoreSites = 0 Then
			$MoreSites = 1
			While  $SiteCounter < $SiteCount
				$SiteCounter += 1
				$SiteCount_2 += 10
				getSource($ii)
			WEnd
		EndIf

		Find_Cinema()
	EndIf
	GUIDelete($frmWait)
	GUISetState(@SW_ENABLE, $MainForm)
	WinActivate ( "Kino Programm")



EndFunc   ;==>getSource
#EndRegion ### Func getSource ########################################################################

#Region ### Func GetFilmList #########################################################################
Func GetFilmList()
	ConsoleWrite('@@ (236) :(' & @MIN & ':' & @SEC & ') GetFilmList()' & @CR) ;### Function Trace
	$Index = _GUICtrlListView_GetHotItem($ListView_Kino)
	If $Index > -1 Then
		_GUICtrlListView_BeginUpdate(GUICtrlGetHandle($ListView_Film))

		Dim $i_ListView = 0
		_GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($ListView_Film))
		$String_Seperated = StringSplit($Array_Cinema[$Index][1], " - ", 1)
				GUICtrlSetData($lbl_Adresse, $String_Seperated[1])
				If $String_Seperated[0] = 2 Then
					GUICtrlSetData($lbl_TelNum, $String_Seperated[2])
				EndIf
		For $j = 2 To UBound($Array_Cinema, 2) - 1
			If $Array_Cinema[$Index][$j] <> "" Then
				_GUICtrlListView_AddItem($ListView_Film, $Array_Cinema[$Index][$j])
				$j += 1
				$Temp = StringTrimLeft($Array_Cinema[$Index][$j], 10)
				If $Temp <> "" Then
					$TempArray = StringSplit($Temp, "- ", 1)
					If $TempArray[0] = 1 Then
						$TempArray[1] = StringTrimRight($TempArray[1], 3)
						_GUICtrlListView_AddSubItem($ListView_Film, $i_ListView, $TempArray[1], 1)
					ElseIf $TempArray[0] = 2 Then
					$TempArray[1] = StringTrimRight($TempArray[1], 3)
					$TempArray[2] = StringTrimRight($TempArray[2], 3)
					$TempArray[2] = StringTrimLeft($TempArray[2], 5)
					_GUICtrlListView_AddSubItem($ListView_Film, $i_ListView, $TempArray[1], 1)
					_GUICtrlListView_AddSubItem($ListView_Film, $i_ListView, $TempArray[2], 2)
					ElseIf $TempArray[0] = 3 Then
						$TempArray[1] = StringTrimRight($TempArray[1], 3)
						$TempArray[2] = StringTrimRight($TempArray[2], 3)
						$TempArray[2] = StringTrimLeft($TempArray[2], 5)
						$TempArray[3] = StringTrimRight($TempArray[3], 1)
						_GUICtrlListView_AddSubItem($ListView_Film, $i_ListView, $TempArray[1], 1)
						_GUICtrlListView_AddSubItem($ListView_Film, $i_ListView, $TempArray[2], 2)
						_GUICtrlListView_AddSubItem($ListView_Film, $i_ListView, $TempArray[3], 3)
					EndIf
				EndIf
				$j += 1
				$Temp = StringReplace($Array_Cinema[$Index][$j], "&nbsp;", ";", 0)
				_GUICtrlListView_AddSubItem($ListView_Film, $i_ListView, $Temp, 4)
				$i_ListView += 1
			EndIf
		Next
		_GUICtrlListView_EndUpdate(GUICtrlGetHandle($ListView_Film))
	EndIf
EndFunc
#EndRegion ### Func GetFilmList ###################################################################

#Region ### Func Find_Cinema ######################################################################
Func Find_Cinema()
	ConsoleWrite('@@ (288) :(' & @MIN & ':' & @SEC & ') Find_Cinema()' & @CR) ;### Function Trace

	_GUICtrlListView_BeginUpdate(GUICtrlGetHandle($ListView_Kino))
	_GUICtrlListView_BeginUpdate(GUICtrlGetHandle($ListView_Film))
	_GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($ListView_Kino))
	_GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($ListView_Film))

;~ ----------- Problem noch nict gelöst ------------
;~ 	If GUICtrlRead($chk_Genauigkeit) = $GUI_CHECKED Then

;~ 		For $i = UBound($Array_Cinema, 1) - 1 To 0 Step -1
;~ 			$pruef = StringInStr($Array_Cinema[$i][1], GUICtrlRead($txtCity))
;~ 			If $pruef = 0 Then
;~ 				_ArrayDelete($Array_Cinema, $i)
;~ 			EndIf
;~ 		Next
;~ 	EndIf
;~ ----------- Problem noch nict gelöst ------------
	For $i = 0 To UBound($Array_Cinema, 1) - 1
		If $Array_Cinema[$i][0] <> "" Then
		_GUICtrlListView_AddItem($ListView_Kino,$Array_Cinema[$i][0])
		EndIf
	Next
	_GUICtrlListView_EndUpdate(GUICtrlGetHandle($ListView_Kino))
	_GUICtrlListView_EndUpdate(GUICtrlGetHandle($ListView_Film))

EndFunc   ;==>Find_Cinema
#EndRegion ### Func Find_Cinema ######################################################################



Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
	ConsoleWrite('@@ (312) :(' & @MIN & ':' & @SEC & ') WM_NOTIFY()' & @CR) ;### Function Trace
    #forceref $hWnd, $iMsg, $iwParam
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $tInfo
    $hWndListView = $ListView_Kino
    If Not IsHWnd($ListView_Kino) Then $hWndListView = GUICtrlGetHandle($ListView_Kino)

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
        Case $hWndListView
            Switch $iCode
                Case $LVN_COLUMNCLICK ; Es wurde auf eine Spalte geklickt
                    $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
                    ; Kein Rückgabewert
                Case $LVN_KEYDOWN ; Es wurde eine Taste gedrückt
                    $tInfo = DllStructCreate($tagNMLVKEYDOWN, $ilParam)
                    ; Kein Rückgabewert
                Case $NM_CLICK ; Wird vom ListView gesendet, wenn der Benutzer ein Item mit der linken Maustaste anklickt
                    $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
                    GetFilmList()
                    ; Kein Rückgabewert
                Case $NM_DBLCLK ; Wird vom ListView gesendet, wenn der Benutzer ein Item mit der linken Maustaste doppelklickt
                    $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
                    ; Kein Rückgabewert
                Case $NM_KILLFOCUS ; Das Control hat den Eingabefokus verloren
                    ; Kein Rückgabewert
                Case $NM_RCLICK ; Wird vom ListView gesendet, wenn der Benutzer ein Item mit der rechten Maustaste anklickt
                    $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
                    ;Return 1 ; Verhindert die weitere Standard-Nachrichtenbehandlung
                    Return 0 ; Erlaubt die weitere Standard-Nachrichtenbehandlung
                Case $NM_RDBLCLK ; Wird vom ListView gesendet, wenn der Benutzer ein Item mit der rechten Maustaste doppelklickt
                    $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
                    ; Kein Rückgabewert
                Case $NM_RETURN ; Das Control hat den Eingabefokus und der Benutzer hat die ENTER-Taste gedrückt
                    ; Kein Rückgabewert
                Case $NM_SETFOCUS ; Das Control hat den Eingabefokus erhalten
                    ; Kein Rückgabewert
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY

Func _ReduceMemory($i_PID = -1)
	ConsoleWrite('@@ (519) :(' & @MIN & ':' & @SEC & ') _ReduceMemory()' & @CR) ;### Function Trace

	If $i_PID <> -1 Then
		Local $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $i_PID)
		Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', $ai_Handle[0])
		DllCall('kernel32.dll', 'int', 'CloseHandle', 'int', $ai_Handle[0])
	Else
		Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', -1)
	EndIf

	Return $ai_Return[0]
EndFunc   ;==>_ReduceMemory
