ΑΡΧΗ
	ΔΙΑΒΑΣΕ extras, currentDate, currentTime, HER_CENTER_LATITUDE, HER_CENTER_LONGITUDE
	waitingForLocation = false
	navigation = false
	traffic = false
	
	ΑΝ (extras <> null) ΤΟΤΕ
		ΔΙΑΒΑΣΕ κατάσταση
	ΤΕΛΟΣ_ΑΝ
	
	ΑΝ ((κατάσταση[0] == "map") || (κατάσταση[0] == "list") || (κατάσταση[0] == "nearest")) ΤΟΤΕ
		ΑΝ (κατάσταση[1] == "gas_station.xml") ΤΟΤΕ
			seperation = "gas station"
			StationActivityTitle = "Gas Stations"
			StationActivityIcon = gasStationIcon
			StationActivityBackgroundColor = orange
		ΑΛΛΙΩΣ ΑΝ (κατάσταση[1] == "supermarket.xml") ΤΟΤΕ
			seperation = "supermarket"
			StationActivityTitle = "Supermarkets"
			StationActivityIcon = supermarketIcon
			StationActivityBackgroundColor = green
		ΤΕΛΟΣ_ΑΝ
	ΤΕΛΟΣ_ΑΝ
	
	ΔΙΑΒΑΣΕ map	
	ΑΡΧΗ ΕΝΩ
		ΔΙΑΒΑΣΕ myPosition, myLatitude, myLongitude
		myPosition1 = myPosition
		
		ΑΝ (waitingForLocation == true) ΤΟΤΕ
			ΑΝ (myLatitude <> null) ΤΟΤΕ
				waitingForLocation = false
				findNearest(myLatitude, myLongitude)
			ΤΕΛΟΣ_ΑΝ
		ΤΕΛΟΣ_ΑΝ
		
		myLastLatitude = myLatitude
		myLastLongitude = myLongitude
		ΑΠΟΘΗΚΕΥΣΕ myLastLatitude, myLastLongitude
		
		ΑΝ (navigation == true) ΤΟΤΕ
			mapCameraPosition = (myLatitude, myLongitude)
		ΤΕΛΟΣ_ΑΝ
		
		ΔΙΑΒΑΣΕ myPosition
		myPosition2 = myPosition
	ΕΝΩ (myPosition1 <> myPosition2)
	
	ΑΝ (κατάσταση[0] == "nearest") ΤΟΤΕ
		exist = true
		ΔΙΑΒΑΣΕ αρχείο(κατάσταση)
		ΓΙΑ i ΑΠΟ 0 ΜΕΧΡΙ αρχείο(κατάσταση[1])Size ΜΕ ΒΗΜΑ 1
			stationLat = αρχείο(κατάσταση[1])[i]Latitude
			stationLong = αρχείο(κατάσταση[1])[i]Longitude
			stationClosingHour = αρχείο(κατάσταση[1])[i]ClosingHour
			stationName = αρχείο(κατάσταση[1])[i]Name
			stationAddress = αρχείο(κατάσταση[1])[i]Address
			ΑΝ ((currentTime >= 2230) || (currentTime < 30)) ΤΟΤΕ
				ΑΝ (stationClosingHour <= 600) ΤΟΤΕ
					ΕΜΦΑΝΙΣΕ drawMarkerOnMap(stationLat, stationLong, stationName, stationAddress)
				ΤΕΛΟΣ_ΑΝ
			ΑΛΛΙΩΣ ΑΝ ((currentTime >= 30) || (currentTime < 600)) ΤΟΤΕ
				ΑΝ ((stationClosingHour > 30) && (stationClosingHour <= 600)) ΤΟΤΕ
					ΕΜΦΑΝΙΣΕ drawMarkerOnMap(stationLat, stationLong, stationName, stationAddress)
				ΤΕΛΟΣ_ΑΝ
			ΑΛΛΙΩΣ
				ΕΜΦΑΝΙΣΕ drawMarkerOnMap(stationLat, stationLong, stationName, stationAddress)
			ΤΕΛΟΣ_ΑΝ
		ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
		ΑΝ (myLatitude == 0) ΤΟΤΕ
			ΑΝ (lastKnownPositionButton == pressed) ΤΟΤΕ
				ΔΙΑΒΑΣΕ myLastLatitude, myLastLongitude
				ΑΝ (myLastLatitude == null) ΤΟΤΕ
					ΕΜΦΑΝΙΣΕ "Last known position is not available!"
				ΑΛΛΙΩΣ
					findNearest(myLastLatitude, myLastLongitude)
				ΤΕΛΟΣ_ΑΝ
			ΤΕΛΟΣ_ΑΝ
			waitingForLocation = true
		ΤΕΛΟΣ_ΑΝ
	ΑΛΛΙΩΣ ΑΝ (κατάσταση[0] == "list") ΤΟΤΕ
		ΓΙΑ i ΑΠΟ 0 ΜΕΧΡΙ αρχείο(κατάσταση[1])Size ΜΕ ΒΗΜΑ 1
			stationLat = αρχείο(κατάσταση[1])[i]Latitude
			stationLong = αρχείο(κατάσταση[1])[i]Longitude
			stationName = αρχείο(κατάσταση[1])[i]Name
			stationAddress = αρχείο(κατάσταση[1])[i]Address
			ΕΜΦΑΝΙΣΕ drawMarkerOnMap(stationLat, stationLong, stationName, stationAddress)
		ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
		stationLat = κατάσταση[2]
		stationLong = κατάσταση[3]
		stationName = κατάσταση[4]
		ΓΙΑ i ΑΠΟ 0 ΜΕΧΡΙ markerOnMapSize ΜΕ ΒΗΜΑ 1
			title = markerOnMap[i]Name
			ΑΝ (stationName == title) ΤΟΤΕ
				mapCameraPosition = (stationLat, stationLong)
			ΤΕΛΟΣ_ΑΝ			
		ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
	ΑΛΛΙΩΣ
		ΓΙΑ i ΑΠΟ 0 ΜΕΧΡΙ αρχείο(κατάσταση[1])Size ΜΕ ΒΗΜΑ 1
			stationLat = αρχείο(κατάσταση[1])[i]Latitude
			stationLong = αρχείο(κατάσταση[1])[i]Longitude
			stationName = αρχείο(κατάσταση[1])[i]Name
			stationAddress = αρχείο(κατάσταση[1])[i]Address
			ΕΜΦΑΝΙΣΕ drawMarkerOnMap(stationLat, stationLong, stationName, stationAddress)
		ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
		mapCameraPosition = (HER_CENTER_LATITUDE, HER_CENTER_LONGITUDE)
	ΤΕΛΟΣ_ΑΝ
	
	ΑΝ (navigationButton == pressed) ΤΟΤΕ
		ΑΝ (marker <> null) ΤΟΤΕ	
			ΑΝ (gpsEnabled == true) ΤΟΤΕ
				navigation = true
				ΑΝ (waitingForLocation == true) ΤΟΤΕ
					navigateFromTo(myLastLatitude, myLastLongitude, destLatitude, destLongitude)
				ΑΛΛΙΩΣ
					navigateFromTo(myLatitude, myLongitude, destLatitude, destLongitude)
				ΤΕΛΟΣ_ΑΝ
			ΑΛΛΙΩΣ
				ΕΜΦΑΝΙΣΕ "GPS is disabled!"
			ΤΕΛΟΣ_ΑΝ
		ΤΕΛΟΣ_ΑΝ
	ΤΕΛΟΣ_ΑΝ
	
	
	findNearest(Latitude, Longitude)
	ΑΡΧΗ
		appointment = checkForAppointment
		ΑΝ (appointment <> "no") ΤΟΤΕ
			ΑΝ (traffic == true) ΤΟΤΕ
				ΑΝ (seperation == "gas station") ΤΟΤΕ
					ΕΜΦΑΝΙΣΕ "You have an appointment at " + appointment[1] + " at " + appointment[0] + ". Do you want to find a "
					+ seperation + " near that location? Keep in mind that there is traffic on the road at this hour!"
				ΑΛΛΙΩΣ ΑΝ (seperation == "supermarket") ΤΟΤΕ
					ΕΜΦΑΝΙΣΕ "You have an appointment at " + appointment[1] + " at " + appointment[0] + ". Do you want to find a " + seperation + 
					" near that location? Keep in mind that there is traffic on the road at this hour and you may not have enough time to complete your shopping!"
				ΤΕΛΟΣ_ΑΝ
			ΑΛΛΙΩΣ
				ΑΝ (seperation == "gas station") ΤΟΤΕ
					ΕΜΦΑΝΙΣΕ "You have an appointment at " + appointment[1] + " at " + appointment[0] + ". Do you want to find a "
					+ seperation + " near that location?"
				ΑΛΛΙΩΣ ΑΝ (seperation == "supermarket") ΤΟΤΕ
					ΕΜΦΑΝΙΣΕ "You have an appointment at " + appointment[1] + " at " + appointment[0]
					+ " and you may not have enough time to complete your shopping. Do you want to find a " + seperation + " near that location?"
				ΤΕΛΟΣ_ΑΝ
			ΤΕΛΟΣ_ΑΝ
			ΑΝ (yesButton == pressed) ΤΟΤΕ
				ΑΝ (internetConnection == true) ΤΟΤΕ
					locationAddress = appointment[0]
					Επικοινωνία με Server για μετατροπή της διεύθυνσης locationAddress σε Latitude και Longitude
					ΔΙΑΒΑΣΕ locationAddressLatitude, locationAddressLongitude
					marker = nearestMarker(locationAddressLatitude, locationAddressLongitude)
					ΑΝ (markerKey > 2500) ΤΟΤΕ
						ΕΜΦΑΝΙΣΕ "There isn't a " + seperation + " near your appointment. The nearest "
						+ seperation + " in your location will be found."
						ΑΝ (okButton == pressed) ΤΟΤΕ
							marker = nearestMarker(Latitude, Longitude)
						ΤΕΛΟΣ_ΑΝ
					ΤΕΛΟΣ_ΑΝ
				ΑΛΛΙΩΣ
					ΕΜΦΑΝΙΣΕ "There isn't internet connection to determine the location of your appointment. The nearest "
					+ seperation + " in your location will be found."
					ΑΝ (okButton == pressed) ΤΟΤΕ
						marker = nearestMarker(Latitude, Longitude)
					ΤΕΛΟΣ_ΑΝ
				ΤΕΛΟΣ_ΑΝ
			ΑΛΛΙΩΣ ΑΝ (noButton == pressed) ΤΟΤΕ
				marker = nearestMarker(Latitude, Longitude)
			ΤΕΛΟΣ_ΑΝ
		ΑΛΛΙΩΣ
			ΑΝ (traffic == true) ΤΟΤΕ
				ΕΜΦΑΝΙΣΕ "Τhere is traffic on the road and transportation will be slower."
				ΑΝ (okButton == pressed) ΤΟΤΕ
					marker = nearestMarker(Latitude, Longitude)
				ΤΕΛΟΣ_ΑΝ
			ΑΛΛΙΩΣ
				marker = nearestMarker(Latitude, Longitude)
			ΤΕΛΟΣ_ΑΝ
		ΤΕΛΟΣ_ΑΝ
	ΤΕΛΟΣ
	
	
	nearestMarker(Latitude, Longitude)
	ΑΡΧΗ
		ΓΙΑ i ΑΠΟ 0 ΜΕΧΡΙ αρχείο(κατάσταση[1])Size ΜΕ ΒΗΜΑ 1
			stationLat = αρχείο(κατάσταση[1])[i]Latitude
			stationLong = αρχείο(κατάσταση[1])[i]Longitude
			stationClosingHour = αρχείο(κατάσταση[1])[i]ClosingHour
			stationName = αρχείο(κατάσταση[1])[i]Name
			ΑΝ ((currentTime >= 2230) || (currentTime < 30)) ΤΟΤΕ
				ΑΝ (stationClosingHour <= 600) ΤΟΤΕ
					Επικοινωνία με Server για τον υπολογισμό του distanceBetween(stationLat, stationLong, Latitude, Longitude)
					distance = distanceBetween(stationLat, stationLong, Latitude, Longitude)
					distanceHashMap = (distance, stationName)
				ΤΕΛΟΣ_ΑΝ
			ΑΛΛΙΩΣ ΑΝ ((currentTime >= 30) && (currentTime < 600)) ΤΟΤΕ
				ΑΝ ((stationClosingHour > 30) && (stationClosingHour <= 600)) ΤΟΤΕ
					Επικοινωνία με Server για τον υπολογισμό του distanceBetween(stationLat, stationLong, Latitude, Longitude)
					distance = distanceBetween(stationLat, stationLong, Latitude, Longitude)
					distanceHashMap = (distance, stationName)
				ΤΕΛΟΣ_ΑΝ
			ΑΛΛΙΩΣ
				Επικοινωνία με Server για τον υπολογισμό του distanceBetween(stationLat, stationLong, Latitude, Longitude)
				distance = distanceBetween(stationLat, stationLong, Latitude, Longitude)
				distanceHashMap = (distance, stationName)
			ΤΕΛΟΣ_ΑΝ
		ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
		treeMap = distanceHashMap
		key = treeMap[0]Key
		value = treeMap[0]Value
		ΓΙΑ i ΑΠΟ 0 ΜΕΧΡΙ markerOnMapSize ΜΕ ΒΗΜΑ 1
			title = markerOnMap[i]Name
			ΑΝ (value == title) ΤΟΤΕ
				destinationLatitude = markerOnMap[i]Latitude
				destinationLongitude = markerOnMap[i]Longitude
				mapCameraPosition = (destinationLatitude, destinationLongitude)
				break
			ΤΕΛΟΣ_ΑΝ
		ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
		return destinationLatitude + "" + destinationLongitude + "" + key
	ΤΕΛΟΣ
	
	
	navigateFromTo(startLatitude, startLongitude, destLatitude, destLongitude)
	ΑΡΧΗ
		ΑΝ (navigation == true) ΤΟΤΕ
			ΑΝ (internetConnection == true) ΤΟΤΕ
				mapCameraPosition = (startLatitude, startLongitude)
				Επικοινωνία με Server για την εμφάνιση οδηγιών κατεύθυνσης από fromPosition σε toPosition στον χάρτη				
					fromPosition = (startLatitude, startLongitude)
					toPosition = (destLatitude, destLongitude)
					getDirections(fromPosition, toPosition)
			ΑΛΛΙΩΣ
				navigation = false
				ΕΜΦΑΝΙΣΕ "No Network Available!"
			ΤΕΛΟΣ_ΑΝ
		ΤΕΛΟΣ_ΑΝ
	ΤΕΛΟΣ
	
	
	checkForAppointment
	ΑΡΧΗ
		ΔΑΙΒΑΣΕ ΛίσταΡαντεβού[], πλήθοςΡαντεβούI
		appoint = false
		currentDate, currentTime
		ΑΝ (πλήθοςΡαντεβούI < 1) ΤΟΤΕ
			appoint = false
		ΑΛΛΙΩΣ
			ΓΙΑ k ΑΠΟ 0 ΜΕΧΡΙ πλήθοςΡαντεβούI ΜΕ ΒΗΜΑ 1
				ΑΝ (ΛίσταΡαντεβού[k] <> "Your Appointments") ΤΟΤΕ
					ΔΙΑΒΑΣΕ ΛίσταΡαντεβού[k], curAppointHour, curAppointMin, curAppointLocation
					ΑΝ ((selectedYear == currentYear) && (selectedMonth == selectedMonth) && (selectedDay == selectedDay)) ΤΟΤΕ
						diffHour = selectedHour - curAppointHour
						ΑΝ (diffHour == 0) ΤΟΤΕ
							diffMint = selectedMin - curAppointMin
							ΑΝ ((diffMint >= 0) && (diffMint <= 30)) ΤΟΤΕ
								appoint = true
								location = curAppointLocation
								startHour = curAppointHour + ":" + curAppointMin
								break
							ΤΕΛΟΣ_ΑΝ
						ΑΛΛΙΩΣ ΑΝ (diffHour == 1) ΤΟΤΕ
							diffMint = (59 - curAppointMin) + selectedMin
							ΑΝ ((diffMint >= 0) && (diffMint <= 30)) ΤΟΤΕ
								appoint = true
								location = curAppointLocation
								startHour = curAppointHour + ":" + curAppointMin
								break
							ΤΕΛΟΣ_ΑΝ
						ΤΕΛΟΣ_ΑΝ
					ΤΕΛΟΣ_ΑΝ
				ΤΕΛΟΣ_ΑΝ
			ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
		ΤΕΛΟΣ_ΑΝ
		ΑΝ (appoint == true) ΤΟΤΕ
			return location + "" + startHour
		ΑΛΛΙΩΣ
			return "no"
		ΤΕΛΟΣ_ΑΝ
	ΤΕΛΟΣ
ΤΕΛΟΣ