Rob van der Woude's Scripting Pages
Powered by GeSHi

Source code for airreg.hta

(view source code of airreg.hta as plain text)

  1. <html>
  2. <head>
  3.  
  4. <title>AirReg</title>
  5.  
  6. <HTA:APPLICATION
  7.   APPLICATIONNAME="Airplane Registration Lookup"
  8.   ID="AirReg"
  9.   VERSION="1.04"
  10.   BORDER="dialog"
  11.   INNERBORDER="no"
  12.   MAXIMIZEBUTTON="no"
  13.   SCROLL="no"
  14.   SINGLEINSTANCE="yes"/>
  15.  
  16. <style type="text/css">
  1. a {
  2. 	white-space: nowrap;
  3. 	font-size: 10pt;
  4. }
  5.  
  6. body {
  7. 	font-family: sans-serif;
  8. 	font-size: 10pt;
  9. }
  10.  
  11. input.Button {
  12. 	width: 80px;
  13. }
  14.  
  15. span.Link {
  16. 	color: blue;
  17. 	cursor: pointer;
  18. 	text-decoration: underline;
  19. }
  20.  
  21. td {
  22. 	font-size: 10pt;
  23. }
  24.  
  25. .Center {
  26. 	margin-left: auto;
  27. 	margin-right: auto;
  28. 	text-align: center;
  29. }
  30.  
  31. .Top {
  32. 	vertical-align: top;
  33. }
  1. </style>
  2. </head>
  3.  
  4.  
  5. <script language="VBScript">
  1. Option Explicit
  2.  
  3. Const TristateFalse      =  0
  4. Const TristateMixed      = -2
  5. Const TristateTrue       = -1
  6. Const TristateUseDefault = -2
  7.  
  8. Const ForAppending = 8
  9. Const ForReading   = 1
  10. Const ForWriting   = 2
  11.  
  12. ' Internet Explorer constants
  13. Const navOpenInNewWindow       =     1
  14. Const navNoHistory             =     2
  15. Const navNoReadFromCache       =     4
  16. Const navNoWriteToCache        =     8
  17. Const navAllowAutosearch       =    16
  18. Const navBrowserBar            =    32
  19. Const navHyperlink             =    64
  20. Const navEnforceRestricted     =   128
  21. Const navNewWindowsManaged     =   256
  22. Const navUntrustedForDownload  =   512
  23. Const navTrustedForActiveX     =  1024
  24. Const navOpenInNewTab          =  2048
  25. Const navOpenInBackgroundTab   =  4096
  26. Const navKeepWordWheelText     =  8192
  27. Const navVirtualTab            = 16384
  28. Const navBlockRedirectsXDomain = 32768
  29. Const navOpenNewForegroundTab  = 65536
  30.  
  31. Dim gvbFAAReady
  32. Dim gviHeight, gviMaxLen, gviMinLen, gviWidth
  33. Dim gvdAcftRef, gvoFSO, gvoIE, gvoRequest, gvoWshShell
  34. Dim gvsLink
  35.  
  36.  
  37. Sub Window_OnLoad
  38. 	Dim posVertical, posHorizontal
  39. 	' Initialize variables for window size and input string length
  40. 	gviHeight = 480
  41. 	gviWidth  = 400
  42. 	gviMinLen =   4
  43. 	gviMaxLen =   8
  44. 	' Resize the window
  45. 	window.resizeTo gviWidth, gviHeight
  46. 	' Position the window in the center of the screen
  47. 	posHorizontal = CInt( ( window.screen.width  - gviWidth  ) / 2 )
  48. 	posVertical   = CInt( ( window.screen.height - gviHeight ) / 2 )
  49. 	window.moveTo posHorizontal, posVertical
  50. 	' Add version number to window title and help text
  51. 	document.title = "AirReg " & AirReg.Version
  52. 	AirRegVersion.innerHTML = AirReg.Version
  53. 	' prepare to open URLs in default browser
  54. 	Set gvoWshShell = CreateObject( "Wscript.Shell" )
  55. 	Set gvoFSO   = CreateObject( "Scripting.FileSystemObject" )
  56. 	' Prepare FAA tables lookup
  57. 	gvbFAAReady = False
  58. 	window.setTimeout "ReadAcftRef", 100, "VBScript"
  59. 	' Show input window
  60. 	Back
  61. End Sub
  62.  
  63.  
  64. Sub Back( )
  65. 	ImageBlock.style.display      = "none"
  66. 	FAABlock.style.display        = "none"
  67. 	PleaseWaitBlock.style.display = "none"
  68. 	HelpBlock.style.display       = "none"
  69. 	ErrorBlock.style.display      = "none"
  70. 	MainBlock.style.display       = "block"
  71. 	Reg.value                     = ""
  72. 	Reg.focus
  73. End Sub
  74.  
  75.  
  76. Sub CheckEsc( )
  77. 	' Show input window if ESC key is pressed in Help screen
  78. 	If Self.window.event.keyCode = 27 And MainBlock.style.display = "none" Then Back
  79. End Sub
  80.  
  81.  
  82. Function FetchAirportData( strURL )
  83. 	' Argument: URL of text to fetch
  84. 	' Returns:  URL's innerHTML or Null
  85. 	' Remark:   In Windows 8 and 10, the XmlHttpRequest will probably fail due to tighter security
  86. 	'           restrictions; in that case InternetExplorer is used as a fallback, but it is SLOW!
  87. 	Dim intLoopCount
  88. 	FetchAirportData = Null ' Return value in case of unknown failure
  89. 	On Error Resume Next ' Catch XMLHTTP errors (high probability)
  90. 	Set gvoRequest = CreateObject( "Microsoft.XMLHTTP" )
  91. 	gvoRequest.open "GET", strURL, False
  92. 	gvoRequest.send vbNull
  93. 	If Err Then
  94. 		' Tight security settings may break the XMLHTTP method,
  95. 		' in that case use Internet Explorer as a (slow) fallback
  96. 		Set gvoIE = CreateObject( "InternetExplorer.Application" )
  97. 		gvoIE.Visible = False
  98. 		gvoIE.Navigate2 strURL, 0, "_self", Null, "Content-Type: text/json"
  99. 		intLoopCount = 0
  100. 		While gvoIE.Busy And intLoopCount < 10
  101. 			Sleep 1
  102. 			intLoopCount = intLoopCount + 1
  103. 		Wend
  104. 		If intLoopCount < 10 Then
  105. 			FetchAirportData = gvoIE.Document.body.innerHTML
  106. 		End If
  107. 		gvoIE.Quit
  108. 		Set gvoIE = Nothing
  109. 	ElseIf gvoRequest.status = 200 Then
  110. 		FetchAirportData = gvoRequest.responseText
  111. 	Else
  112. 		ImageBlock.style.display = "none"
  113. 		ErrorBlock.style.display = "block"
  114. 		ErrorBlock.innerHTML     = "Error " & gvoRequest.status & " (" & gvoRequest.statustext & ")"
  115. 	End If
  116. 	Set gvoRequest = Nothing
  117. 	On Error Goto 0
  118. End Function
  119.  
  120.  
  121. Sub FetchFAAData( )
  122. 	Dim objRE, strNiceType, strReg, strType, strURL, strWord
  123. 	strReg  = Trim( UCase( Reg.value ) )
  124. 	strType = ReadFAATables( strReg )
  125. 	If strType = "" Then
  126. 		ImageBlock.style.display      = "none"
  127.     	FAABlock.style.display        = "none"
  128.     	PleaseWaitBlock.style.display = "none"
  129. 		ErrorBlock.style.display      = "block"
  130. 		ErrorBlock.innerHTML          = "Unknown Error"
  131. 	Else
  132. 		strURL = "https://www.startpage.com/do/search?query="
  133. 		strNiceType = ""
  134. 		Set objRE = New RegExp
  135. 		objRE.Pattern = "[0-9]"
  136. 		For Each strWord In Split( strType )
  137. 			If Not strNiceType = "" Then strNiceType = strNiceType & " "
  138. 			If objRE.Test( strWord ) Then
  139. 				strNiceType = strNiceType & UCase( strWord )
  140. 			Else
  141. 				strNiceType = strNiceType & UCase( Left( strWord, 1 ) ) & LCase( Mid( strWord, 2 ) )
  142. 			End If
  143. 		Next
  144. 		strURL = strURL & Replace( Trim( strNiceType ), " ", "+" ) & "+" & strReg & "&host=wikipedia.org"
  145. 		ImageBlock.style.display      = "none"
  146.     	PleaseWaitBlock.style.display = "none"
  147. 		ErrorBlock.style.display      = "none"
  148.     	FAABlock.style.display        = "block"
  149. 		WikiLink.innerHTML            = strNiceType
  150. 		WikiLink.title                = strURL
  151. 	End If
  152. 	Sleep 1
  153. End Sub
  154.  
  155.  
  156. Sub Help( )
  157. 	' Hide input window and show help text
  158. 	MainBlock.style.display       = "none"
  159. 	ErrorBlock.style.display      = "none"
  160. 	FAABlock.style.display        = "none"
  161. 	PleaseWaitBlock.style.display = "none"
  162. 	HelpBlock.style.display       = "block"
  163. 	BackButton.focus
  164. End Sub
  165.  
  166.  
  167. Sub Lookup( strReg )
  168. 	Dim intError, intLength
  169. 	Dim objMatches, objRE2
  170. 	Dim strError, strImage, strNiceType, strPhotographer, strRspTxt, strType, strURL, strWord
  171. 	'intLength = Len( Reg.value )
  172. 	intLength = Len( strReg )
  173. 	If intLength >= gviMinLen And intLength <= gviMaxLen Then
  174. 		strURL    = "http://www.airport-data.com/api/ac_thumb.json?r=" & strReg
  175. 		strRspTxt = FetchAirportData( strURL )
  176. 		' {"status":404,"error":"Aircraft thumbnail not found."}
  177. 		' {"status":200,"count":1,"data":[{"image":"http:\/\/www.airport-data.com\/images\/aircraft\/thumbnails\/001\/124\/001124807.jpg","link":"http:\/\/www.airport-data.com\/aircraft\/photo\/001124807.html","photographer":"Henk Geerlings"}]}
  178. 		If Not IsNull( strRspTxt ) Then
  179. 			Set objRE2 = New RegExp
  180. 			objRE2.Pattern = """status"":(\d+),""error"":""([^""]+)"""
  181. 			If objRE2.Test( strRspTxt ) Then
  182. 				Set objMatches = objRE2.Execute( strRspTxt )
  183. 				If objMatches.Item(0).SubMatches.Count > 0 Then
  184. 					intError = objMatches.Item(0).Submatches(0)
  185. 					strError = objMatches.Item(0).Submatches(1)
  186. 				End If
  187. 				If intError = 404 Then
  188. 					If InStr( strReg, "-" ) = 0 And UCase( Left( strReg, 1 ) ) = "N" And IsNumeric( Mid( strReg, 2, 1 ) ) And gvbFAAReady Then
  189. 						ImageBlock.style.display      = "none"
  190. 						FAABlock.style.display        = "none"
  191. 						PleaseWaitBlock.style.display = "block"
  192. 						ErrorBlock.style.display      = "none"
  193. 						' Start new thread to allow interface to update immediately
  194. 						window.setTimeout "FetchFAAData", 100, "VBScript"
  195. 					Else
  196. 						If InStr( strReg, "-" ) < 4 Then
  197. 							' Insert a hyphen at the (next) most likely position and try again
  198. 							Select Case InStr( strReg, "-" )
  199. 								Case 0:
  200. 									strReg = Left( strReg, 1 ) & "-" & Mid( strReg, 2 )
  201. 								Case 2:
  202. 									strReg = Replace( strReg, "-", "" )
  203. 									strReg = Left( strReg, 2 ) & "-" & Mid( strReg, 3 )
  204. 								Case 3:
  205. 									strReg = Replace( strReg, "-", "" )
  206. 									strReg = Left( strReg, 3 ) & "-" & Mid( strReg, 4 )
  207. 								Case Else:
  208. 									strReg = Replace( strReg, "-", "" )
  209. 							End Select
  210. 							Reg.value = strReg
  211. 							Lookup strReg
  212. 						End If
  213. 					End If
  214. 				Else
  215. 			    	ImageBlock.style.display      = "none"
  216. 			    	PleaseWaitBlock.style.display = "none"
  217. 			    	FAABlock.style.display        = "none"
  218. 			    	ErrorBlock.style.display      = "block"
  219. 			    	ErrorBlock.innerHTML          = "Error " & intError & " (" & strError & ")"
  220. 			    End If
  221. 			Else
  222. 		    	objRE2.Pattern = """image"":""([^\""]+)"",""link"":""([^\""]+)"",""photographer"":""([^\""]+)"""
  223. 		    	If objRE2.Test( strRspTxt ) Then
  224. 					ImageBlock.style.display      = "block"
  225. 			    	PleaseWaitBlock.style.display = "none"
  226. 					ErrorBlock.style.display      = "none"
  227. 		    		Set objMatches = objRE2.Execute( strRspTxt )
  228. 		    		If objMatches.Item(0).Submatches.Count = 3 Then
  229. 		    			strImage        = Replace( objMatches.Item(0).Submatches(0), "\", "" )
  230. 		    			gvsLink         = Replace( objMatches.Item(0).Submatches(1), "\", "" )
  231. 		    			strPhotographer = Replace( objMatches.Item(0).Submatches(2), "\", "" )
  232. 		    		End If
  233. 			    	Link.title                             = gvsLink
  234. 			    	document.getElementById( "Image" ).src = strImage
  235. 			    	Photographer.innerHTML                 = "Photo &copy; " & strPhotographer
  236. 			    	ImageBlock.style.display               = "block"
  237. 			    	PleaseWaitBlock.style.display          = "none"
  238. 			    	FAABlock.style.display                 = "none"
  239. 			    	ErrorBlock.style.display               = "none"
  240. 		    	ElseIf ( UCase( Left( strReg, 1 ) ) = "N" ) And IsNumeric( Mid( strReg, 2, 1 ) ) And gvbFAAReady Then
  241. 					ImageBlock.style.display      = "none"
  242. 					FAABlock.style.display        = "none"
  243. 					PleaseWaitBlock.style.display = "block"
  244. 					ErrorBlock.style.display      = "none"
  245. 					' Start new thread to allow interface to update immediately
  246. 			    	window.setTimeout "FetchFAAData", 100, "VBScript"
  247. 		    	Else
  248. 					ImageBlock.style.display      = "none"
  249. 			    	PleaseWaitBlock.style.display = "none"
  250. 			    	FAABlock.style.display        = "none"
  251. 					ErrorBlock.style.display      = "block"
  252. 					ErrorBlock.innerHTML          = "Unknown Error"
  253. 		    	End If
  254. 			End If
  255. 			Set objMatches = Nothing
  256. 			Set objRE2     = Nothing
  257. 		End If
  258. 	End If
  259. End Sub
  260.  
  261.  
  262. Sub OnChangeInputReg( )
  263. 	Dim intLength, objRE, strDashes
  264. 	Select Case Self.window.event.keyCode
  265. 		Case 13: ' ENTER key: start search
  266. 			intLength = Len( Reg.value )
  267. 			If intLength >= gviMinLen And intLength <= gviMaxLen Then Lookup Reg.value
  268. 		Case 27: ' ESC key: clear input
  269. 			Reg.value = ""
  270. 		   	ImageBlock.style.display = "none"
  271. 		   	ErrorBlock.style.display = "none"
  272. 		Case Else:
  273. 			If Self.window.event.keyCode >= 33 And Self.window.event.keyCode <= 40 Then
  274. 				' ARROWS/PGUP/PGDN/HOME/END keys: ignore
  275. 			ElseIf Self.window.event.keyCode = 8 Or Self.window.event.keyCode = 46 Then
  276. 				' BACKSPACE/DEL keys: hide previous result
  277. 				ImageBlock.style.display = "none"
  278. 				ErrorBlock.style.display = "none"
  279. 			ElseIf Self.window.event.keyCode = 45 Then
  280. 				' INS key: ignore
  281. 			ElseIf Self.window.event.keyCode >= 113 And Self.window.event.keyCode <= 123 Then
  282. 				' F2..F12 keys: ignore
  283. 			Else
  284. 			   	ImageBlock.style.display = "none"
  285. 			   	ErrorBlock.style.display = "none"
  286. 				Reg.value = Trim( UCase( Reg.value ) )
  287. 				Set objRE = New RegExp
  288. 				objRE.Global = True
  289. 				If Left( Reg.value, 1 ) = "N" Then
  290. 					objRE.Pattern = "[^A-Z0-9]" ' Allow only letters and numbers for N numbers
  291. 				Else
  292. 					objRE.Pattern = "[^A-Z0-9-]" ' Allow only letters, numbers and dashes
  293. 				End If
  294. 				Reg.value = objRE.Replace( Reg.value, "" )
  295. 				Reg.value = Left( Reg.value, gviMaxLen )
  296. 				' Dashes are allowed, but NOT on the first position
  297. 				If Left( Reg.value, 1 ) = "-" Then Reg.value = Replace( Reg.value, "-", "" )
  298. 				' Only a single dash is allowed, remove dashes if more than one is found
  299. 				objRE.Pattern = "[A-Z0-9]"
  300. 				strDashes = objRE.Replace( Reg.value, "" )
  301. 				If Len( strDashes ) > 1 Then Reg.value = Replace( Reg.value, "-", "" )
  302. 				Set objRE = Nothing
  303. 			End If
  304. 	End Select
  305. End Sub
  306.  
  307.  
  308. Sub OnClickButtonLookup( )
  309. 	Lookup Reg.value ' Start search
  310. End Sub
  311.  
  312. Sub OpenAirportDataURL( )
  313. 	gvoWshShell.Run "http://www.airport-data.com/", 1, False
  314. End Sub
  315.  
  316.  
  317. Sub OpenAPIURL( )
  318. 	gvoWshShell.Run "http://www.airport-data.com/api/doc.php", 1, False
  319. End Sub
  320.  
  321.  
  322. Sub OpenDatabaseURL( )
  323. 	gvowshshell.Run "https://www.faa.gov/licenses_certificates/aircraft_certification/aircraft_registry/releasable_aircraft_download/", 1, False
  324. End Sub
  325.  
  326.  
  327. Sub OpenFAASearchURL( )
  328. 	gvoWshShell.Run WikiLink.title, 1, False
  329. End Sub
  330.  
  331.  
  332. Sub OpenFAAURL( )
  333. 	gvoWshShell.Run "https://www.faa.gov/", 1, False
  334. End Sub
  335.  
  336.  
  337. Sub OpenImageURL( )
  338. 	gvoWshShell.Run gvsLink, 1, False
  339. End Sub
  340.  
  341.  
  342. Sub OpenSoftwareURL( )
  343. 	gvoWshShell.Run "https://www.robvanderwoude.com/airreg.php", 1, False
  344. End Sub
  345.  
  346.  
  347. Sub ReadAcftRef( )
  348. 	Dim arrLine, objFile, strCode, strLine, strModel, strManufacturer
  349. 	If gvoFSO.FileExists( "master.txt" ) And gvoFSO.FileExists( "acftref.txt" ) Then
  350. 		Set gvdAcftRef = CreateObject( "scripting.Dictionary" )
  351. 		Set objFile    = gvoFSO.OpenTextFile( "acftref.txt", ForReading, False, TristateUseDefault )
  352. 		' Skip header line
  353. 		objFile.ReadLine
  354. 		' Loop through file and extract aircraft types
  355. 		While Not objFile.AtEndOfStream
  356. 			strLine = objFile.ReadLine( )
  357. 			If Not Trim( strLine ) = "" Then
  358. 				arrLine = Split( strLine, "," )
  359. 				If UBound( arrLine ) > 2 Then
  360. 					strCode         = Trim( arrLine(0) )
  361. 					strManufacturer = Trim( arrLine(1) )
  362. 					strModel        = Trim( arrLine(2) )
  363. 					gvbFAAReady     = True
  364. 					gvdAcftRef.Add strCode, strManufacturer & " " & strModel
  365. 				End If
  366. 			End If
  367. 		Wend
  368. 		Set objFile = Nothing 
  369. 	End If
  370. End Sub
  371.  
  372.  
  373. Function ReadFAATables( Nnumber )
  374. 	Dim arrLine, objFile, strCode, strLine, strNNumber, strReg
  375. 	ReadFAATables = ""
  376. 	strNNumber = Replace( UCase( Nnumber ), "-", "" )
  377. 	If ( Left( strNNumber, 1 ) = "N" ) And IsNumeric( Mid( strNNumber, 2, 1 ) ) And gvbFAAReady Then
  378. 		Set objFile = gvoFSO.OpenTextFile( "master.txt", ForReading, False, TristateUseDefault )
  379. 		' Skip header line
  380. 		objFile.ReadLine
  381. 		' Loop through file and extract aircraft types
  382. 		While Not objFile.AtEndOfStream
  383. 			strLine = objFile.ReadLine( )
  384. 			If Not Trim( strLine ) = "" Then
  385. 				arrLine = Split( strLine, "," )
  386. 				If UBound( arrLine ) > 2 Then
  387. 					strReg  = "N" & Trim( arrLine(0) )
  388. 					If strReg = strNNumber Then
  389. 						strCode = Trim( arrLine(2) )
  390. 						ReadFAATables = gvdAcftRef.Item( strCode )
  391. 					End If
  392. 				End If
  393. 			End If
  394. 		Wend
  395. 		Set objFile = Nothing 
  396. 	End If
  397. End Function
  398.  
  399.  
  400. Sub Sleep( seconds )
  401. 	' Time delay for InternetExplorer.Application object in FetchAirportData( ) function
  402. 	gvoWshShell.Run "PING -n " & CInt( seconds ) & " localhost", 7, True
  403. End Sub
  404.  
  405.  
  406. Sub Window_OnUnload
  407. 	On Error Resume Next
  408. 	gvoIE.Quit
  409. 	Set gvoIE       = Nothing
  410. 	Set gvoFSO      = Nothing
  411. 	Set gvoRequest  = Nothing
  412. 	Set gvoWshShell = Nothing
  413. 	Set gvdAcftRef  = Nothing
  414. 	On Error Goto 0
  415. End Sub
  1. </script>
  2.  
  3.  
  4. <body onhelp="vbscript:Help" onkeyup="vbscript:CheckEsc">
  5.  
  6.  
  7.  
  8. <div id="MainBlock">
  9.  
  10. <p class="Center"><input type="text" id="Reg" onkeyup="vbscript:OnChangeInputReg" title="Enter airplane registration (4..8 characters; letters, numbers and dashes only)" style="width: 150px;" />
  11. &nbsp;
  12. <input type="button" class="Button" id="Lookup" value="Lookup" onclick="vbscript:OnClickButtonLookup" />
  13. &nbsp;
  14. <input type="button" class="Button" value="Help" onclick="vbscript:Help" /></p>
  15.  
  16. <div id="ImageBlock" style="display: none;">
  17.  
  18. <p class="Center"><span id="Link" onclick="vbscript:OpenImageURL"><img id="Image" /></span></p>
  19.  
  20. <p>Click on the photo to view it on www.airport-data.com</p>
  21.  
  22. <p id="Photographer"></p>
  23.  
  24. </div><!-- End of ImageBlock -->
  25.  
  26.  
  27. <div id="PleaseWaitBlock" style="display:none">
  28.  
  29. <p>Aircraft registration not found on Airport-data.com, searching FAA database<br /><br />Please&nbsp;wait&nbsp;.&nbsp;.&nbsp;.</p>
  30.  
  31. </div><!-- End of PleaseWaitBlock -->
  32.  
  33.  
  34.  
  35. <div id="FAABlock" style="display: none;">
  36.  
  37. <p style="margin-left: 10px;"><span class="Link" id="WikiLink" onclick="vbscript:OpenFAASearchURL"></span></p>
  38.  
  39. <p>Click on the link to search for the aircraft on Wikipedia</p>
  40.  
  41. </div><!-- End of FAABlock -->
  42.  
  43.  
  44.  
  45. <p id="ErrorBlock" style="display: none;"></p>
  46.  
  47. </div><!-- End of MainBlock -->
  48.  
  49.  
  50.  
  51. <div id="HelpBlock" style="display: none;">
  52.  
  53. <h2 class="Center">AirReg <span id="AirRegVersion" title="Click to check for latest version" onclick="vbscript:OpenSoftwareURL">0.00</span></h2>
  54.  
  55. <p>Demo script to look up airplane data by their registration number, using <span class="Link" title="http://www.airport-data.com/api/doc.php" onclick="vbscript:OpenAPIURL">Airport-data.com's API</span>.</p>
  56.  
  57. <p>If an aircraft registration starting with N followed by a number is not found on Airport-data.com, and if the MASTER.txt and ACFTREF.txt files from the downloaded <span class="Link" title="https://www.faa.gov/licenses_certificates/aircraft_certification/aircraft_registry/releasable_aircraft_download/" onclick="vbscript:OpenDatabaseURL">FAA's Releasable Aircraft Registry Database</span> are located in this HTA's parent folder, then the HTA will search these files for the aircraft type, and provide a link to Wikipedia search results.</p>
  58.  
  59. <p>An FAA database search takes a <em>lot</em> longer than an Airport-Data.com search!</p>
  60.  
  61. <p>&copy; 2020 Rob van der Woude<br />
  62. <span class="Link" title="https://www.robvanderwoude.com/airreg.php" onclick="vbscript:OpenSoftwareURL">http://www.robvanderwoude.com/airreg.php</span></p>
  63.  
  64. <p><strong>Note:</strong> Neither this software nor its author are associated with <span class="Link" title="http://www.airport-data.com/" onclick="vbscript:OpenAirportDataURL">Airport-data.com</span> nor with the <span class="Link" title="https://www.faa.gov/" onclick="OpenFAAURL">FAA</span></p>
  65.  
  66. <p class="Center"><input type="button" class="Button" id="BackButton" value="Back" onclick="vbscript:Back" /></p>
  67.  
  68. </div><!-- End of HelpBlock -->
  69.  
  70.  
  71. </body>
  72. </html>

page last modified: 2024-04-16; loaded in 0.0418 seconds