Mini Kabibi Habibi

Current Path : C:/Users/ITO/Desktop/VF9/program files/microsoft visual foxpro 9/gallery/
Upload File :
Current File : C:/Users/ITO/Desktop/VF9/program files/microsoft visual foxpro 9/gallery/_webview.vct


V@VERSION =   3.00LastFilter
�
F����G&(�ULN!Arial, 0, 9, 5, 15, 12, 13, 3, 0
_webformPixelsClass3form_webform+Top = 12
Left = 372
Name = "_resizable"
_webform.
_resizablecustom..\ffc\_controls.vcxntrols.vcx
_resizable+OLEObject = C:\WINDOWS\SYSTEM\SHDOCVW.DLL

��ࡱ�>��	������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Root Entry��������E7��@OleObjectData�����AccessObjSiteData&������������8ChangedProps������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������a�V�
4��k�O��Ls&IL88���Ws5��i+.bL�FHTop = 12
Left = 12
Height = 264
Width = 372
Name = "oleWebBrowser"
_webform.
oleWebBrowser
olecontrol_webview.vcx_webbrowser4`�� GGґ%����U2���%�C��
��+���C�������UCURLTHIS
OLEWEBBROWSERNAVIGATE��C�����UTHIS
_RESIZABLEADJUSTCONTROLSInit,��Resize���1qAA21[x�)G�PROCEDURE Init
LPARAMETER cURL
IF !EMPTY(cURL)
	THIS.olewebbrowser.navigate(cURL)
ENDIF
ENDPROC
PROCEDURE Resize
THIS._resizable.adjustcontrols()
ENDPROC
gTop = 0
Left = 0
Height = 289
Width = 398
DoCreate = .T.
Caption = "Web Form"
Name = "_webform"
formen03.ico,,,,1997-10-07,,,OLDER,,,,,,,1078,,,,,
"penVERSION =   3.00LLTRIM(SUBSTR(lcFileName,2))
ENDDO
DO VERSION =   3.00VERSION =   3.00VERSION =   3.00VERSION =   3.00VERSION =   3.00dth = 100
TabStop = .F.
csourcehtml = VERSION =   3.00VERSION =   3.00VERSION =   3.00VERSION =   3.00VERSION =   3.00VERSION =   3.00VERSION =   3.00VERSION =   3.00dth = 100
TabStop = .F.
csourcehtml = VERSION =   3.00VERSION =   3.00VERSION =   3.00VERSION =   3.00VERSION =   3.00VERSION =   3.00VERSION =   3.00VERSION =   3.00dth = 100
TabStop = .F.
csourcehtml = VERSION =   3.00VERSION =   3.00VERSION =   3.00VERSION =   3.00VERSION =   3.00VERSION =   3.00VERSION =   3.00VERSION =   3.00VERSION =   3.00VERSION =   3.00VERSION =   3.00VERSION =   3.00VERSION =   3.00VERSION =   3.00VERSION =   3.00VERSION =   3.00VERSION =   3.00VERSION =   3.00VERSION =   3.00VERSION =   3.00VERSION =   3.00
olecontrol
olecontrol_webbrowser3�Height = 100
Width = 100
TabStop = .F.
csourcehtml = 
csourcefile = 
curl = 
clasturl = 
cbeforeurl = 
ctempfilename = 
ohost = .NULL.
uvalue = .T.
cnewurl = 
csourceurl = 
csourcefilename = 
cvfpscripttable = 
cvfpscript = 
csourcefilepath = 
cparsefileext = htm;html;asp
nscriptcount = 0
osource = .NULL.
uresult = .T.
oaction = .NULL.
cvfpsprotocol = vfps:
ctempfileprefix = _temp
ureturn = .T.
cblankhtmlfile = Blank.htm
cprogrampath = 
cparam = 
cfilename = 
calias = 
cparamdelimiter = &
cfilepath = 
nrecno = 0
ndatasessionid = 0
cdbf = 
ouser = .NULL.
nhistorycount = 0
cversion = Web Browser 03.01.0016
cdbfpath = 
nuserlevel = 0
cuserid = 
cusername = 
Name = "_webbrowser3"
��PROCEDURE refreshsource
LOCAL lcFileName,lcFileName2,lnLastSelect,lcSource,lcAlias

IF this.lRelease
	RETURN .F.
ENDIF
this.cSourceFile=""
this.cSourceHTML=""
IF EMPTY(this.cFileName)
	RETURN .F.
ENDIF
lcFileName=this.cFileName
IF EMPTY(SYS(2000,lcFileName))
	RETURN .F.
ENDIF
lcFileName2=this.TrimPath(lcFileName)
IF WEXIST(lcFileName2)
	RELEASE WINDOW (lcFileName2)
ENDIF
lnLastSelect=SELECT()
lcAlias=LOWER(SYS(2015))
CREATE CURSOR (lcAlias) (Source M)
APPEND BLANK
APPEND MEMO Source FROM (lcFileName) OVERWRITE
lcSource=Source
USE
SELECT (lnLastSelect)
this.cSourceFile=lcFileName
this.cSourceHTML=lcSource

ENDPROC
PROCEDURE viewsource
LPARAMETERS tlNoWait,tlNoEdit
LOCAL lcFileName

#DEFINE HTML_SOURCE_NOT_AVAILABLE_LOC	"HTML source not available"

IF this.lRelease
	RETURN .F.
ENDIF
this.lViewSourceMode=.F.
this.GetSourceHTML()
lcFileName=this.GetSourceFile()
IF EMPTY(lcFileName) OR EMPTY(SYS(2000,lcFileName))
	this.WaitWindow(HTML_SOURCE_NOT_AVAILABLE_LOC)
	RETURN .F.
ENDIF
IF tlNoWait
	IF tlNoEdit
		MODIFY FILE (lcFileName) NOEDIT NOWAIT
	ELSE
		MODIFY FILE (lcFileName) NOWAIT
	ENDIF
	RETURN
ENDIF
this.lViewSourceMode=.T.
IF tlNoEdit
	MODIFY FILE (lcFileName) NOEDIT
ELSE
	MODIFY FILE (lcFileName)
	IF LASTKEY()#27
		this.lHistoryEnabled=.F.
		this.Navigate(lcFileName)
	ENDIF
ENDIF
this.lViewSourceMode=.F.

ENDPROC
PROCEDURE beforeretrieval
PARAMETERS url, flags, targetframename, postdata, headers, cancel
LOCAL lcURL,lcLowerURL,lcNewURL,lnAtPos,lnLastSelect

IF TYPE("this.oHost")#"O" OR ISNULL(this.oHost)
	RETURN .F.
ENDIF
SET DATASESSION TO (this.oHost.DataSessionID)
lcURL=ALLTRIM(url)
this.uResult=.T.
IF this.lRelease OR NOT this.Enabled
	cancel=.T.
	RETURN .F.
ENDIF
lnAtPos=AT("?",lcURL)
IF lnAtPos>0
	lcURL=ALLTRIM(LEFT(lcURL,lnAtPos-1))
ENDIF
this.cLastURL=this.cURL
lcLowerURL=LOWER(lcURL)
IF LOWER(LEFT(lcLowerURL,LEN(this.cVFPSProtocol)))==LOWER(this.cVFPSProtocol)
	cancel=.T.
	this.VFPS(lcURL)
	RETURN .F.
ENDIF
lnLastSelect=SELECT()
IF NOT this.lVFPScript OR NOT this.OpenVFPScript()
	IF USED("vfpscript")
		USE IN vfpscript
	ENDIF
	SELECT (lnLastSelect)
	RETURN
ENDIF
this.Enabled=.F.
SELECT vfpscript
SCAN ALL FOR BeforeNav
	IF NOT EMPTY(URLMatch) AND NOT this.WildCardMatch(ALLTRIM(MLINE(URLMatch,1)),lcURL)
		LOOP
	ENDIF
	IF NOT EMPTY(URLEval) AND (TYPE(URLEval)#"L" OR NOT EVALUATE(URLEval))
		LOOP
	ENDIF
	IF URLCancel
		cancel=.T.
	ENDIF
	IF NOT EMPTY(Script)
		this.RunScript(ALLTRIM(Name))
	ENDIF
	IF NOT USED("vfpscript")
		EXIT
	ENDIF
	SELECT vfpscript
	IF NOT EMPTY(URLJump)
		lcNewURL=ALLTRIM(URLJump)
		this.cURL=LOWER(this.ValidURL(lcNewURL))
		cancel=.T.
		this.Navigate(lcNewURL,@flags,@targetframename,@postdata,@headers)
	ENDIF
	IF NOT Continue
		EXIT
	ENDIF
ENDSCAN
SELECT (lnLastSelect)
this.Enabled=.T.

ENDPROC
PROCEDURE trimext
LPARAMETERS tcFileName,tlPlatformType
LOCAL lcFileName,lnAtPos,lnAtPos2

lcFileName=tcFileName
lnAtPos=RAT(".",lcFileName)
IF lnAtPos>0
	lnAtPos2=RAT(":",lcFileName)
	IF lnAtPos>lnAtPos2
		lcFileName=LEFT(lcFileName,lnAtPos-1)
	ENDIF
ENDIF
IF tlPlatformType
	lcFileName=IIF(_dos OR _unix,UPPER(lcFileName),LOWER(lcFileName))
ENDIF
RETURN ALLTRIM(lcFileName)

ENDPROC
PROCEDURE trimpath
LPARAMETERS tcFileName,tlTrimExt,tlPlatformType
LOCAL lcFileName,lnAtPos

IF EMPTY(tcFileName)
	RETURN ""
ENDIF
lcFileName=tcFileName
lnAtPos=AT(":",lcFileName)
IF lnAtPos>0
	lcFileName=SUBSTR(lcFileName,lnAtPos+1)
ENDIF
IF tlTrimExt
	lcFileName=this.TrimExt(lcFileName)
ENDIF
IF tlPlatformType
	lcFileName=IIF(_dos OR _unix,UPPER(lcFileName),LOWER(lcFileName))
ENDIF
lcFileName=ALLTRIM(SUBSTR(lcFileName,AT("\",lcFileName,;
		MAX(OCCURS("\",lcFileName),1))+1))
DO WHILE LEFT(lcFileName,1)=="."
	lcFileName=ALLTRIM(SUBSTR(lcFileName,2))
ENDDO
DO WHILE RIGHT(lcFileName,1)=="."
	lcFileName=ALLTRIM(LEFT(lcFileName,LEN(lcFileName)-1))
ENDDO
RETURN lcFileName

ENDPROC
PROCEDURE trimfile
LPARAMETERS tcFileName,lPlatType
LOCAL lcFileName,lnAtPos

lnAtPos=RAT("\",tcFileName)
lcFileName=ALLTRIM(IIF(lnAtPos=0,tcFileName,LEFT(tcFileName,lnAtPos)))
IF lPlatType
	lcFileName=IIF(_dos OR _unix,UPPER(lcFileName),LOWER(lcFileName))
ENDIF
RETURN lcFileName

ENDPROC
PROCEDURE erasetempfile
IF NOT EMPTY(this.cTempFileName)
	ERASE (this.cTempFileName)
	this.cTempFileName=""
ENDIF

ENDPROC
PROCEDURE getsourcefile
IF this.lRelease
	RETURN .F.
ENDIF
IF EMPTY(this.cSourceFile)
	this.RefreshSource
ENDIF
RETURN this.cSourceFile

ENDPROC
PROCEDURE getsourcehtml
IF this.lRelease
	RETURN .F.
ENDIF
IF EMPTY(this.cSourceHTML)
	this.RefreshSource
ENDIF
RETURN this.cSourceHTML

ENDPROC
PROCEDURE parsesource
*** OLE Control Event ***
PARAMETERS url, flags, targetframename, postdata, headers, cancel
PRIVATE oTHIS
LOCAL lcURL,lcSource,lcNewURL,lcFileName,lnAtPos,llHTMLFile,llBusy
EXTERNAL ARRAY VFPScrpt

IF this.lRelease OR NOT this.lParseSource OR TYPE("url")#"C" OR EMPTY(url)
	RETURN .F.
ENDIF
lcURL=ALLTRIM(url)
lcFileName=STRTRAN(lcURL,"/","\")
lnAtPos=RAT("\",lcFileName)
IF lnAtPos>0 AND LOWER(SUBSTR(lcFileName,lnAtPos+1, ;
		LEN(this.cTempFilePrefix)))==this.cTempFilePrefix
	RETURN .F.
ENDIF
this.cFileName=""
this.cFilePath=""
this.cSourceURL=""
this.cSourceFileName=""
llHTMLFile=.F.
lnAtPos=RAT(".",lcURL)
llHTMLFile=(lnAtPos>0 AND INLIST(LOWER(ALLTRIM(SUBSTR(lcURL,lnAtPos+1))), ;
		"htm","html","asp"))
IF NOT llHTMLFile OR LOWER(lcFileName)==LOWER(this.cTempFileName) OR ;
		LOWER(ALLTRIM(lcFileName))==LOWER(ALLTRIM(this.cBlankHTMLFile))
	this.cFileName=lcFileName
	this.cFilePath=this.TrimFile(this.cFileName)
	RETURN .F.
ENDIF
lnAtPos=RAT(":",lcFileName)
IF lnAtPos#2 
	RETURN .F.
ENDIF
IF lnAtPos>2
	lcFileName=ALLTRIM(SUBSTR(lcFileName,lnAtPos-1))
ENDIF
IF EMPTY(SYS(2000,lcFileName))
	RETURN .F.
ENDIF
IF this.lDebug
	ACTIVATE SCREEN
	? PROGRAM()
	? "URL: "+lcURL
ENDIF
llBusy=this.lBusy
this.SetBusyState(.T.)
IF NOT ":"$lcURL OR AT(":",lcURL)=2
	lcURL="file://"+STRTRAN(STRTRAN(STRTRAN(lcURL,"\","/"),"///","//"),"//","/")
ENDIF
lcNewURL=""
oTHIS=this
this.cSourceURL=lcURL
this.cFileName=LOWER(lcFileName)
this.cFilePath=this.TrimFile(this.cFileName)
this.cSourceFileName=this.cFileName
this.cSourceFilePath=this.TrimFile(this.cFileName)
IF VFPScrpt(this)
	lcNewURL=this.cTempFileName
ELSE
	this.cSourceURL=""
	this.cSourceFileName=""
	this.cSourceFilePath=""
ENDIF
oTHIS=.NULL.
this.SetBusyState(llBusy)
IF TYPE("this.oHost.lRelease")=="L" AND this.oHost.lRelease
	this.Visible=.F.
	RETURN .F.
ENDIF
this.cURL=LOWER(this.ValidURL(lcURL))
this.cNewURL=lcNewURL

ENDPROC
PROCEDURE runcode
LPARAMETERS tcCode
PRIVATE oTHIS
LOCAL lnDataSessionID,lnLastSelect,llBusy

IF this.lRelease OR EMPTY(tcCode) OR TYPE("tcCode")#"C" OR ISNULL(tcCode)
	RETURN .F.
ENDIF
IF this.lDebug
	ACTIVATE SCREEN
	? PROGRAM()
ENDIF
llBusy=this.lBusy
this.SetBusyState(.T.)
lnLastSelect=SELECT()
lnDataSessionID=this.oHost.DataSessionID
SET DATASESSION TO (lnDataSessionID)
ACTIVATE SCREEN
oTHIS=this
this.lRunCodeMode=.T.
DO RunCode WITH (tcCode)
this.lRunCodeMode=.F.
oTHIS=.NULL.
SET DATASESSION TO (lnDataSessionID)
SELECT (lnLastSelect)
this.SetBusyState(llBusy)

ENDPROC
PROCEDURE runscript
LPARAMETERS tcScript,tcAlias
LOCAL llResult

IF this.lRelease OR EMPTY(tcScript)
	RETURN .F.
ENDIF
IF this.lDebug
	ACTIVATE SCREEN
	? PROGRAM()
	? "Script: "+tcScript
ENDIF
llResult=this.VFPScript(tcScript,tcAlias,0)
IF this.lDebug AND NOT llResult
	ACTIVATE SCREEN
	? "Script: "+tcScript+"  (not found)"
ENDIF
RETURN llResult

ENDPROC
PROCEDURE validurl
LPARAMETERS tcURL
LOCAL lcURL

IF EMPTY(tcURL)
	RETURN ""
ENDIF
lcURL=ALLTRIM(tcURL)
IF NOT ":"$lcURL AND NOT LOWER(LEFT(lcURL,4))=="http" AND ;
		NOT LOWER(LEFT(lcURL,5))=="file:" AND (LOWER(LEFT(lcURL,4))=="www." OR ;
		INLIST(LOWER(RIGHT(lcURL,4)),".com",".gov",".net") OR ;
		(NOT SUBSTR(lcURL,2,1)==":" AND NOT LEFT(lcURL,2)=="\\"))
	lcURL="http://"+lcURL
ENDIF
IF SUBSTR(PADR(lcURL,5),5,1)==":"
	lcURL=STRTRAN(STRTRAN(lcURl,"\","/"),"///","//")
ELSE
	IF NOT ":"$lcURL OR AT(":",lcURL)=2
		lcURL="file://"+STRTRAN(STRTRAN(STRTRAN(lcURL,"\","/"),"///","//"),"//","/")
	ENDIF
ENDIF
RETURN lcURL

ENDPROC
PROCEDURE wildcardmatch
LPARAMETERS tcMatchExpList,tcExpressionSearched,tlMatchAsIs
LOCAL lcMatchExpList,lcExpressionSearched,llMatchAsIs,lcMatchExpList2
LOCAL lnMatchLen,lnExpressionLen,lnMatchCount,lnCount,lnCount2,lnSpaceCount
LOCAL lcMatchExp,lcMatchType,lnMatchType,lnAtPos,lnAtPos2
LOCAL llMatch,llMatch2

IF EMPTY(tcExpressionSearched)
	IF EMPTY(tcMatchExpList) OR ALLTRIM(tcMatchExpList)=="*"
		RETURN
	ENDIF
	RETURN .F.
ENDIF
lcMatchExpList=LOWER(ALLTRIM(STRTRAN(tcMatchExpList,TAB," ")))
lcExpressionSearched=LOWER(ALLTRIM(STRTRAN(tcExpressionSearched,TAB," ")))
lnExpressionLen=LEN(lcExpressionSearched)
IF lcExpressionSearched==lcMatchExpList
	RETURN
ENDIF
llMatchAsIs=tlMatchAsIs
IF LEFT(lcMatchExpList,1)==["] AND RIGHT(lcMatchExpList,1)==["]
	llMatchAsIs=.T.
	lcMatchExpList=ALLTRIM(SUBSTR(lcMatchExpList,2,LEN(lcMatchExpList)-2))
ENDIF
IF NOT llMatchAsIs AND " "$lcMatchExpList
	llMatch=.F.
	lnSpaceCount=OCCURS(" ",lcMatchExpList)
	lcMatchExpList2=lcMatchExpList
	lnCount=0
	DO WHILE .T.
		lnAtPos=AT(" ",lcMatchExpList2)
		IF lnAtPos=0
			lcMatchExp=ALLTRIM(lcMatchExpList2)
			lcMatchExpList2=""
		ELSE
			lnAtPos2=AT(["],lcMatchExpList2)
			IF lnAtPos2<lnAtPos
				lnAtPos2=AT(["],lcMatchExpList2,2)
				IF lnAtPos2>lnAtPos
					lnAtPos=lnAtPos2
				ENDIF
			ENDIF
			lcMatchExp=ALLTRIM(LEFT(lcMatchExpList2,lnAtPos))
			lcMatchExpList2=ALLTRIM(SUBSTR(lcMatchExpList2,lnAtPos+1))
		ENDIF
		IF EMPTY(lcMatchExp)
			EXIT
		ENDIF
		lcMatchType=LEFT(lcMatchExp,1)
		DO CASE
			CASE lcMatchType=="+"
				lnMatchType=1
			CASE lcMatchType=="-"
				lnMatchType=-1
			OTHERWISE
				lnMatchType=0
		ENDCASE
		IF lnMatchType#0
			lcMatchExp=ALLTRIM(SUBSTR(lcMatchExp,2))
		ENDIF
		llMatch2=this.WildCardMatch(lcMatchExp,lcExpressionSearched,.T.)
		IF (lnMatchType=1 AND NOT llMatch2) OR (lnMatchType=-1 AND llMatch2)
			RETURN .F.
		ENDIF
		llMatch=(llMatch OR llMatch2)
		IF lnAtPos=0
			EXIT
		ENDIF
	ENDDO
	RETURN llMatch
ELSE
	IF LEFT(lcMatchExpList,1)=="~"
		RETURN (DIFFERENCE(ALLTRIM(SUBSTR(lcMatchExpList,2)),lcExpressionSearched)>=3)
	ENDIF
ENDIF
lnMatchCount=OCCURS(",",lcMatchExpList)+1
IF lnMatchCount>1
	lcMatchExpList=","+ALLTRIM(lcMatchExpList)+","
ENDIF
FOR lnCount = 1 TO lnMatchCount
	IF lnMatchCount=1
		lcMatchExp=LOWER(ALLTRIM(lcMatchExpList))
		lnMatchLen=LEN(lcMatchExp)
	ELSE
		lnAtPos=AT(",",lcMatchExpList,lnCount)
		lnMatchLen=AT(",",lcMatchExpList,lnCount+1)-lnAtPos-1
		lcMatchExp=LOWER(ALLTRIM(SUBSTR(lcMatchExpList,lnAtPos+1,lnMatchLen)))
	ENDIF
	FOR lnCount2 = 1 TO OCCURS("?",lcMatchExp)
		lnAtPos=AT("?",lcMatchExp)
		IF lnAtPos>lnExpressionLen
			IF (lnAtPos-1)=lnExpressionLen
				lcExpressionSearched=lcExpressionSearched+"?"
			ENDIF
			EXIT
		ENDIF
		lcMatchExp=STUFF(lcMatchExp,lnAtPos,1,SUBSTR(lcExpressionSearched,lnAtPos,1))
	ENDFOR
	IF EMPTY(lcMatchExp) OR lcExpressionSearched==lcMatchExp OR ;
			lcMatchExp=="*" OR lcMatchExp=="?" OR lcMatchExp=="%%"
		RETURN
	ENDIF
	IF LEFT(lcMatchExp,1)=="*"
		RETURN (SUBSTR(lcMatchExp,2)==RIGHT(lcExpressionSearched,LEN(lcMatchExp)-1))
	ENDIF
	IF LEFT(lcMatchExp,1)=="%" AND RIGHT(lcMatchExp,1)=="%" AND ;
			SUBSTR(lcMatchExp,2,lnMatchLen-2)$lcExpressionSearched
		RETURN
	ENDIF
	lnAtPos=AT("*",lcMatchExp)
	IF lnAtPos>0 AND (lnAtPos-1)<=lnExpressionLen AND ;
			LEFT(lcExpressionSearched,lnAtPos-1)==LEFT(lcMatchExp,lnAtPos-1)
		RETURN
	ENDIF
ENDFOR
RETURN .F.

ENDPROC
PROCEDURE refreshmode
LOCAL llBusy

IF this.lRelease OR EMPTY(this.cSourceFileName)
	this.lRefreshMode=.F.
	RETURN .F.
ENDIF
llBusy=this.lBusy
this.SetBusyState(.T.)
this.lRefreshMode=.T.
this.lHistoryEnabled=.F.
this.Navigate(this.cSourceFileName)
this.SetBusyState(llBusy)

ENDPROC
PROCEDURE openvfpscript
LOCAL lcFileName,lnLastSelect,lcLastSetSafety

SET DATASESSION TO (this.oHost.DataSessionID)
IF USED("vfpscript")
	RETURN
ENDIF
IF this.lRelease OR NOT this.lVFPScript OR EMPTY(this.cVFPScript)
	RETURN .F.
ENDIF
lcLastSetSafety=SET("SAFETY")
SET SAFETY OFF
lnLastSelect=SELECT()
lcFileName=this.cVFPScript
IF NOT EMPTY(SYS(2000,lcFileName))
	SELECT 0
	USE (lcFileName) SHARED ALIAS vfpscript AGAIN
	IF NOT USED()
		SELECT (lnLastSelect)
		IF lcLastSetSafety=="ON"
			SET SAFETY ON
		ELSE
			SET SAFETY OFF
		ENDIF
		RETURN .F.
	ENDIF
	IF FCOUNT()<9
		USE
		ERASE (lcFileName)
	ENDIF
ENDIF
IF EMPTY(SYS(2000,lcFileName)) OR TYPE("BeforeNav")#"L"
	IF USED("vfpscript")
		USE IN vfpscript
	ENDIF
	ERASE (lcFileName)
	SELECT 0
	CREATE TABLE (lcFileName) ;
			(IndexValue C(10), Name C(24), HTML M, Script M, BeforeNav L, URLMatch M, ;
			URLEval M, URLJump M, URLCancel L, ;
			Continue L, Comment M, LastAccess T, ExecCount N(8))
	USE (lcFileName) SHARED ALIAS vfpscript AGAIN
ENDIF
IF TYPE("LastAccess")#"T" OR TYPE("ExecCount")#"N"
	IF USED("vfpscript")
		USE IN vfpscript
	ENDIF
	SELECT 0
	USE (lcFileName) EXCLUSIVE ALIAS vfpscript
	IF NOT USED()
		SELECT (lnLastSelect)
		IF lcLastSetSafety=="ON"
			SET SAFETY ON
		ELSE
			SET SAFETY OFF
		ENDIF
		RETURN .F.
	ENDIF
	IF TYPE("LastAccess")#"T"
		ALTER TABLE (lcFileName) ADD COLUMN LastAccess T NULL
	ENDIF
	IF TYPE("ExecCount")#"N"
		ALTER TABLE (lcFileName) ADD COLUMN ExecCount N(8) NULL
	ENDIF
	USE (lcFileName) SHARED ALIAS vfpscript AGAIN
ENDIF
IF NOT USED("vfpscript")
	SELECT (lnLastSelect)
	IF lcLastSetSafety=="ON"
		SET SAFETY ON
	ELSE
		SET SAFETY OFF
	ENDIF
	RETURN .F.
ENDIF
SELECT vfpscript
IF KEY(1)=="INDEXVALUE"
	SET ORDER TO IndexValue
ELSE
	INDEX ON IndexValue TAG IndexValue ASCENDING ADDITIVE
ENDIF
SET FILTER TO NOT DELETED()
LOCATE
SELECT 0

ENDPROC
PROCEDURE refreshdeactivate
IF this.lRelease OR NOT this.Visible
	RETURN
ENDIF
IF this.lRefreshDeactivate
	this.Visible=.F.
	this.Visible=.T.
	RETURN
ENDIF

ENDPROC
PROCEDURE releasehost
IF this.lRelease
	RETURN .F.
ENDIF
IF TYPE("this.oHost.tmrHost")#"O"
	RETURN .F.
ENDIF
this.oHost.tmrHost.RunCode("oTHIS.oHost.Release")

ENDPROC
PROCEDURE vfps
LPARAMETERS tcCommand
LOCAL lcCommand,lcParam1,lcParameter,lcAlias,lcVFPSProtocol,lnVFPSProtocolLen
LOCAL lcVariable,lcCode,lnCount,lnAtPos,llEnabled,luResult,llBusy

IF this.lRelease OR EMPTY(tcCommand) OR TYPE("this.oHost")#"O" OR ISNULL(this.oHost)
	RETURN .F.
ENDIF
llBusy=this.lBusy
this.SetBusyState(.T.)
llEnabled=this.Enabled
IF this.oHost.Visible
	this.Enabled=.F.
ENDIF
lcCommand=LOWER(ALLTRIM(tcCommand))
lcVFPSProtocol=LOWER(this.cVFPSProtocol)
lnVFPSProtocolLen=LEN(lcVFPSProtocol)
IF LEFT(lcCommand,lnVFPSProtocolLen)==lcVFPSProtocol
	lcCommand=ALLTRIM(SUBSTR(lcCommand,lnVFPSProtocolLen+1))
ENDIF
DO WHILE LEFT(lcCommand,1)=="/"
	lcCommand=ALLTRIM(SUBSTR(lcCommand,2))
ENDDO
DO WHILE RIGHT(lcCommand,1)=="/"
	lcCommand=ALLTRIM(LEFT(lcCommand,LEN(lcCommand)-1))
ENDDO
lnAtPos=AT("?",lcCommand)
IF lnAtPos>0
	this.SetParam(lcCommand)
	lcCommand=ALLTRIM(LEFT(lcCommand,lnAtPos-1))
ENDIF
FOR lnCount = 1 TO this.nParamCount
	lcParameter=this.aParam[lnCount]
	lnAtPos=AT("=",lcParameter)
	IF lnAtPos=0
		lcVariable=""
	ELSE
		lcVariable=ALLTRIM(LEFT(lcParameter,lnAtPos-1))
		lcParameter=ALLTRIM(SUBSTR(lcParameter,lnAtPos+1))
	ENDIF
	IF LEFT(lcParameter,1)=="(" AND RIGHT(lcParameter,1)==")"
		IF STRTRAN(STRTRAN(lcParameter,CHR(9),"")," ","")=="()"
			this.aParam[lnCount]=""
		ELSE
			this.aParam[lnCount]=EVALUATE(lcParameter)
		ENDIF
	ELSE
		this.aParam[lnCount]=lcParameter
	ENDIF
	IF NOT EMPTY(lcVariable) AND NOT LEFT(lcVariable,1)==";"
		lcParameter=this.aParam[lnCount]
		IF NOT "."$lcVariable
			PRIVATE (lcVariable)
		ENDIF
		lcCode=lcVariable+"=lcParameter"
		&lcCode
	ENDIF
ENDFOR
lcParam1=this.aParam[1]
IF this.lDebug
	ACTIVATE SCREEN
	? PROGRAM()
	? "Command: "+lcCommand+"  Param: "+this.cParam
ENDIF
DO CASE
	CASE lcCommand=="refresh"
		luResult=this.Refresh2()
	CASE lcCommand=="releasehost"
		luResult=this.ReleaseHost()
	CASE lcCommand=="runaction"
		luResult=this.RunAction(lcParam1)
	CASE lcCommand=="runmethod"
		lcParam1=this.cParam
		IF NOT RIGHT(lcParam1,1)==")"
			lcParam1=lcParam1+"()"
		ENDIF
		luResult=this.&lcParam1
	CASE lcCommand=="runcode"
		luResult=this.RunCode(lcParam1)
	CASE lcCommand=="runscript"
		lcAlias=""
		lnAtPos=AT("::",lcParam1)
		IF lnAtPos>0
			lcAlias=ALLTRIM(LEFT(lcParam1,lnAtPos-1))
			lcParam1=ALLTRIM(SUBSTR(lcParam1,lnAtPos+2))
		ENDIF
		luResult=this.RunScript(lcParam1,lcAlias)
	CASE lcCommand=="viewsource"
		luResult=this.ViewSource()
	OTHERWISE
		luResult=.F.
ENDCASE
this.Enabled=llEnabled
this.SetBusyState(llBusy)
RETURN luResult

ENDPROC
PROCEDURE runaction
LPARAMETERS tcMethod
LOCAL lcMethod,llResult,llBusy

this.uResult=.T.
IF this.lRelease OR EMPTY(tcMethod) OR TYPE("this.oAction")#"O" OR ISNULL(this.oAction)
	RETURN .F.
ENDIF
lcMethod=LOWER(ALLTRIM(tcMethod))
IF EMPTY(lcMethod) OR NOT PEMSTATUS(this.oAction,lcMethod,5) OR ;
		PEMSTATUS(this.oAction,lcMethod,2) OR ;
		NOT PEMSTATUS(this.oAction,lcMethod,3)=="Method"
	RETURN .F.
ENDIF
llBusy=this.lBusy
this.SetBusyState(.T.)
llResult=EVALUATE("this.oAction."+lcMethod+"()")
llBusy=this.lBusy
this.SetBusyState(llBusy)
RETURN llResult

ENDPROC
PROCEDURE filetostring
LPARAMETERS tcFileName
LOCAL lcFileName,lnLastSelect,lcAlias,lcText

IF PARAMETERS()#1  OR TYPE("tcFileName")#"C" OR EMPTY(tcFileName)
	RETURN ""
ENDIF
lcFileName=ALLTRIM(tcFileName)
IF NOT "."$lcFileName
	lcFileName=lcFileName+".txt"
ENDIF
lnLastSelect=SELECT()
lcAlias=LOWER(SYS(2015))
CREATE CURSOR (lcAlias) (Text M)
APPEND BLANK
APPEND MEMO Text FROM (tcFileName) OVERWRITE
lcText=Text
USE IN (lcAlias)
SELECT (lnLastSelect)
RETURN lcText

ENDPROC
PROCEDURE stringtofile
LPARAMETERS tcText,tcFileName
LOCAL lcFileName,lnLastSelect,lcAlias

IF PARAMETERS()#2 OR TYPE("tcText")#"C" OR TYPE("tcFileName")#"C" OR EMPTY(tcFileName)
	RETURN .F.
ENDIF
lcFileName=ALLTRIM(tcFileName)
IF NOT "."$lcFileName
	lcFileName=lcFileName+".txt"
ENDIF
lnLastSelect=SELECT()
lcAlias=LOWER(SYS(2015))
CREATE CURSOR (lcAlias) (Text M)
INSERT INTO (lcAlias) (Text) VALUES (tcText)
COPY MEMO Text TO (tcFileName)
USE IN (lcAlias)
SELECT (lnLastSelect)

ENDPROC
PROCEDURE setparam
LPARAMETERS tcParam
LOCAL lcParam,lcParameter,lcParamDelimiter,lnParamTotal,lnCount,lnAtPos

lcParam=IIF(EMPTY(tcParam),"",ALLTRIM(tcParam))
lnAtPos=AT("?",lcParam)
IF lnAtPos=0
	lcParam=""
ELSE
	lcParam=ALLTRIM(SUBSTR(lcParam,lnAtPos+1))
ENDIF
this.nParamCount=0
DIMENSION this.aParam[128]
this.aParam=.F.
IF EMPTY(lcParam)
	this.cParam=""
	RETURN
ENDIF
IF RIGHT(lcParam,1)=="/"
	lcParam=ALLTRIM(LEFT(lcParam,LEN(lcParam)-1))
ENDIF
this.cParam=lcParam
lcParamDelimiter=this.cParamDelimiter
lnParamTotal=MIN(OCCURS(lcParamDelimiter,lcParam)+1,128)
FOR lnCount = 1 TO lnParamTotal
	this.nParamCount=this.nParamCount+1
	lnAtPos=AT(lcParamDelimiter,lcParam)
	IF lnAtPos=0
		lcParameter=ALLTRIM(lcParam)
	ELSE
		lcParameter=ALLTRIM(LEFT(lcParam,lnAtPos-1))
		lcParam=ALLTRIM(SUBSTR(lcParam,lnAtPos+1))
	ENDIF
	this.aParam[lnCount]=lcParameter
ENDFOR

ENDPROC
PROCEDURE gethtml
LPARAMETERS tcName,tcAlias
LOCAL lcHTML,llResult

IF this.lDebug
	ACTIVATE SCREEN
	? PROGRAM()
	? "Name: "+tcName
ENDIF
lcHTML=this.VFPScript(tcName,tcAlias,1)
llResult=(TYPE("lcHTML")=="C")
IF NOT llResult
	lcHTML=""
ENDIF
IF this.lDebug AND NOT llResult
	ACTIVATE SCREEN
	? "Name: "+tcName+"  (not found)"
ENDIF
RETURN lcHTML

ENDPROC
PROCEDURE vfpscript
LPARAMETERS tcName,tcAlias,tnCode
LOCAL lcName,lcAlias,lnLastSelect,lnRecNo,ltDateTime,llMatch
LOCAL llMatch,lcScriptCode,lcHTML

IF TYPE("this.oHost")#"O" OR ISNULL(this.oHost)
	RETURN .F.
ENDIF
SET DATASESSION TO (this.oHost.DataSessionID)
this.uResult=.T.
IF this.lRelease OR EMPTY(tcName) OR TYPE("tnCode")#"N"
	RETURN .F.
ENDIF
ltDateTime=DATETIME()
lcName=LOWER(ALLTRIM(tcName))
lcAlias=IIF(EMPTY(tcAlias),"vfpscript",LOWER(ALLTRIM(tcAlias)))
lnLastSelect=SELECT()
llMatch=.F.
lcScriptCode=""
lcHTML=""
FOR lnCount = 1 TO this.nScriptCount
	IF NOT LOWER(this.aScripts[lnCount,1])==lcName
		LOOP
	ENDIF
	llMatch=.T.
	lcScriptCode=this.aScripts[lnCount,2]
	lcHTML=lcScriptCode
ENDFOR
IF NOT llMatch
	IF EMPTY(tcAlias) AND NOT this.OpenVFPScript()
		SELECT (lnLastSelect)
		RETURN .F.
	ENDIF
	IF NOT USED(lcAlias)
		SELECT (lnLastSelect)
		RETURN .F.
	ENDIF
	SELECT (lcAlias)
	lnRecNo=IIF(EOF() OR RECNO()>RECCOUNT(),0,RECNO())
	IF NOT LOWER(ALLTRIM(Name))==lcName
		LOCATE FOR LOWER(ALLTRIM(Name))==lcName
	ENDIF
	llMatch=(NOT EMPTY(Name))
	IF llMatch
		IF TYPE("LastAccess")=="T"
			REPLACE LastAccess WITH ltDateTime, ExecCount WITH ExecCount+1
		ENDIF
		lcScriptCode=Script
		lcHTML=HTML
	ENDIF
	IF lnRecNo=0
		GO BOTTOM
	ELSE
		GO lnRecNo
	ENDIF
ENDIF
SELECT (lnLastSelect)
DO CASE
	CASE tnCode=0
		IF this.lDesign
			this.EditScript(lcName)
			RETURN
		ENDIF
		RETURN this.RunCode(lcScriptCode)
	CASE tnCode=1
		RETURN lcHTML
ENDCASE
RETURN .F.

ENDPROC
PROCEDURE msgbox
LPARAMETERS tcMessage,tnType,tcTitle
LOCAL lcMessage,lnType,lcTitle,lnResult

lcMessage=IIF(TYPE("tcMessage")#"C","",tcMessage)
lnType=IIF(TYPE("tnType")#"N",48,tnType)
lcTitle=IIF(TYPE("tcTitle")#"C",thisform.Caption,tcTitle)
ACTIVATE SCREEN
lnResult=MESSAGEBOX(lcMessage,lnType,lcTitle)
RETURN lnResult

ENDPROC
PROCEDURE editstring
LPARAMETERS tcString,tcTitle,tlNoEdit
LOCAL lcString,lcTitle,lcTempFileName

lcString=IIF(TYPE("tcString")=="C",tcString,"")
lcTitle=IIF(TYPE("tcTitle")=="C",ALLTRIM(tcTitle),LOWER(SYS(2015)))
lcTempFileName=SYS(2023)+"\"+"~_  "+lcTitle+".htm"
IF NOT this.StringToFile(lcString,lcTempFileName)
	RETURN .F.
ENDIF
ACTIVATE SCREEN
IF tlNoEdit
	MODIFY FILE (lcTempFileName) NOEDIT RANGE 1,1
ELSE
	MODIFY FILE (lcTempFileName) RANGE 1,1
	lcString=this.FileToString(lcTempFileName)
ENDIF
ERASE (lcTempFileName)
RETURN lcString

ENDPROC
PROCEDURE editscript
LPARAMETERS tcScriptName
LOCAL lcScriptName,lcOldScriptCode,lcNewScriptCode,lnScriptNum,lcScriptNameSearch
LOCAL lcFileName,lcOldHTML,lcNewHTML,llResult,llMatch,llNoEdit,lcCR_LF

#DEFINE SCRIPT_LOC					"Script"
#DEFINE NOT_FOUND_IN_FILE_LOC		"not found in file"
#DEFINE IN_FILE_LOC					"in file"
#DEFINE UPDATED_LOC					"updated"
#DEFINE	UNABLE_TO_UPDATE_SCRIPT_LOC	"Unable to update script"

IF EMPTY(tcScriptName)
	RETURN .F.
ENDIF
lcCR_LF=CHR(13)+CHR(10)
lcScriptName=ALLTRIM(tcScriptName)
lcFileName=this.cFileName
llMatch=.F.
FOR lnScriptNum = 1 TO this.nScriptCount
	IF LOWER(lcScriptName)==LOWER(this.aScripts[lnScriptNum,1])
		lcScriptName=this.aScripts[lnScriptNum,1]
		lcOldScriptCode=this.aScripts[lnScriptNum,3]
		llMatch=.T.
		EXIT
	ENDIF
ENDFOR
IF NOT llMatch
	this.MsgBox(SCRIPT_LOC+[ (]+lcScriptName+[) ]+NOT_FOUND_IN_FILE_LOC+[ "]+lcFileName+[".],16)
	RETURN .F.
ENDIF
lcScriptNameSearch=" "+lcScriptName+lcCR_LF
lcOldHTML=this.FileToString(lcFileName)
llNoEdit=(NOT lcScriptNameSearch$lcOldHTML)
lcNewScriptCode=this.EditString(lcOldScriptCode,lcScriptName,llNoEdit)
IF llNoEdit OR lcOldScriptCode==lcNewScriptCode
	RETURN
ENDIF
IF NOT RIGHT(lcNewScriptCode,2)==lcCR_LF
	lcNewScriptCode=lcNewScriptCode+lcCR_LF
ENDIF
this.aScripts[lnScriptNum,3]=lcNewScriptCode
lcNewHTML=STRTRAN(lcOldHTML,lcScriptNameSearch+lcOldScriptCode, ;
		lcScriptNameSearch+lcNewScriptCode)
IF lcOldHTML==lcNewHTML
	llResult=.F.
ELSE
	llResult=this.StringToFile(lcNewHTML,lcFileName)
ENDIF
IF NOT llResult
	this.MsgBox(UNABLE_TO_UPDATE_SCRIPT_LOC+[ (]+lcScriptName+[) ]+IN_FILE_LOC+[ "]+lcFileName+[".],16)
	RETURN .F.
ENDIF
this.WaitWindow(SCRIPT_LOC+[ (]+lcScriptName+[) ]+IN_FILE_LOC+[ "]+lcFileName+[" ]+UPDATED_LOC+[.])

ENDPROC
PROCEDURE opentable
LPARAMETERS tcFileName,tcAlias,tlExclusive,tcFilter
LOCAL lcFileName,lcAlias,lnLastSelect

this.nRecNo=0
this.cAlias=""
this.cDBF=""
this.cDBFPath=""
IF EMPTY(tcFileName)
	RETURN .F.
ENDIF
lcFileName=ALLTRIM(tcFileName)
IF NOT "."$lcFileName
	lcFileName=lcFileName+".dbf"
ENDIF
IF NOT FILE(lcFileName)
	RETURN .F.
ENDIF
SET DATASESSION TO (this.nDataSessionID)
lcAlias=STRTRAN(IIF(EMPTY(tcAlias),this.TrimPath(lcFileName,.T.),ALLTRIM(tcAlias))," ","_")
this.cAlias=lcAlias
IF USED(lcAlias)
	this.nRecNo=RECNO(lcAlias)
	this.cDBF=LOWER(DBF(lcAlias))
	this.cDBFPath=this.TrimFile(this.cDBF)
	SET DATASESSION TO (this.oHost.DataSessionID)
	RETURN
ENDIF
lnLastSelect=SELECT()
SELECT 0
IF tlExclusive
	USE (lcFileName) EXCLUSIVE ALIAS (lcAlias)
ELSE
	USE (lcFileName) AGAIN SHARED ALIAS (lcAlias)
ENDIF
IF NOT USED(lcAlias)
	this.nRecNo=0
	this.cAlias=""
	this.cDBF=""
	this.cDBFPath=""
	SELECT (lnLastSelect)
	RETURN .F.
ENDIF
this.cDBF=LOWER(DBF(lcAlias))
this.cDBFPath=this.TrimFile(this.cDBF)
IF NOT EMPTY(tcFilter)
	SET FILTER TO &tcFilter
ENDIF
LOCATE
SELECT (lnLastSelect)
SET DATASESSION TO (this.oHost.DataSessionID)

ENDPROC
PROCEDURE browsetable
LPARAMETERS tcAlias,tcClauses
LOCAL lcAlias,lnLastSelect,lcCommand

lcAlias=IIF(EMPTY(tcAlias),this.cAlias,ALLTRIM(tcAlias))
IF EMPTY(lcAlias) OR NOT USED(lcAlias)
	RETURN .F.
ENDIF
lnLastSelect=SELECT()
SELECT (lcAlias)
IF BETWEEN(this.nRecNo,1,RECCOUNT())
	GO this.nRecNo
ELSE
	LOCATE
ENDIF
ACTIVATE SCREEN
lcCommand="BROWSE"
IF NOT EMPTY(tcClauses)
	lcCommand=lcCommand+" "+tcClauses
ENDIF
&lcCommand
SELECT (lnLastSelect)

ENDPROC
PROCEDURE waitwindow
LPARAMETERS tcText,tlWait
LOCAL lcText

WAIT CLEAR
IF EMPTY(tcText)
	RETURN
ENDIF
lcText=LEFT(tcText,254)
DO CASE
	CASE TYPE("tlWait")=="L"
		IF tlWait
			WAIT WINDOW tcText
		ELSE
			WAIT WINDOW tcText NOWAIT
		ENDIF
	CASE TYPE("tlWait")=="N"
		WAIT WINDOW tcText TIMEOUT (tlWait)
	OTHERWISE
		RETURN .F.
ENDCASE

ENDPROC
PROCEDURE setbusystate
LPARAMETERS tlBusy

IF this.lBusy=tlBusy
	RETURN
ENDIF
this.lBusy=tlBusy

ENDPROC
PROCEDURE closetable
LPARAMETERS tcAlias
LOCAL lcAlias

SET DATASESSION TO (this.nDataSessionID)
lcAlias=IIF(EMPTY(tcAlias),this.cAlias,ALLTRIM(tcAlias))
IF NOT EMPTY(lcAlias) AND USED(lcAlias)
	USE IN (lcAlias)
ENDIF
SET DATASESSION TO (this.oHost.DataSessionID)

ENDPROC
PROCEDURE skiprecord
LPARAMETERS tnRecords
LOCAL lnRecords,lcAlias,lnRecNo,lnLastSelect,lnLastRecNo

SET DATASESSION TO (this.nDataSessionID)
lcAlias=this.cAlias
IF EMPTY(lcAlias) OR NOT USED(lcAlias)
	SET DATASESSION TO (this.oHost.DataSessionID)
	RETURN .F.
ENDIF
lnRecords=IIF(EMPTY(tnRecords),0,tnRecords)
lnLastSelect=SELECT()
SELECT (lcAlias)
IF EOF()
	GO BOTTOM
ENDIF
lnLastRecNo=RECNO()
lnRecNo=IIF(this.nRecNo>0,this.nRecNo,RECNO())
GO lnRecNo
SKIP lnRecords
IF BOF()
	GO TOP
ENDIF
IF EOF()
	GO BOTTOM
ENDIF
this.nRecNo=RECNO()
GO lnLastRecNo
SELECT (lnLastSelect)
SET DATASESSION TO (this.oHost.DataSessionID)
this.RunScript("RefreshData")

ENDPROC
PROCEDURE addprop
LPARAMETERS toObject,tcProperty,tuValue
LOCAL lcFileName,llAddPropLibSet,lvResult

lcFileName=this.cProgramPath+"AddProp5.fll"
IF NOT FILE(lcFileName)
	RETURN .F.
ENDIF
llAddPropLibSet=(ATC(lcFileName,SET("LIBRARY"))>0)
IF NOT llAddPropLibSet
	SET LIBRARY TO (lcFileName) ADDITIVE
ENDIF
lvResult=AddProp(toObject,tcProperty,tuValue)
IF NOT llAddPropLibSet
	RELEASE LIBRARY (lcFileName)
ENDIF
RETURN lvResult

ENDPROC
PROCEDURE goback
*** OLE Control Method ***
LOCAL lcURL,lcSourceFileName

IF this.nHistoryCount<2
	NODEFAULT
	RETURN .F.
ENDIF
lcURL=this.aHistory[this.nHistoryCount-1,1]
lcSourceFileName=this.aHistory[this.nHistoryCount-1,2]
this.nHistoryCount=this.nHistoryCount-1
IF this.nHistoryCount>0
	DIMENSION this.aHistory[this.nHistoryCount,2]
ELSE
	this.aHistory=""
ENDIF
this.lHistoryEnabled=.F.
IF NOT EMPTY(lcSourceFileName)
	NODEFAULT
	this.Navigate(lcSourceFileName)
	RETURN .F.
ENDIF
IF NOT EMPTY(lcURL) AND NOT EMPTY(this.cSourceFileName) AND	NOT lcURL==lcSourceFileName
	NODEFAULT
	this.Navigate(lcURL)
	RETURN .F.
ENDIF

ENDPROC
PROCEDURE newwindow
*** OLE Control Event ***
LPARAMETERS url, flags, targetframename, postdata, headers, processed

IF TYPE("url")#"C"
	RETURN
ENDIF
IF this.lDebug
	ACTIVATE SCREEN
	? PROGRAM()
	? "URL: "+url
	IF NOT EMPTY(targetframename)
		?? "  Frame: "+targetframename
	ENDIF
ENDIF
processed=.T.
this.Navigate(@url,@flags,@targetframename,@postdata,@headers)

ENDPROC
PROCEDURE navigate
*** OLE Control Method ***
LPARAMETERS url, flags, targetframename, postdata, headers
LOCAL lcURL,lcNewURL

IF TYPE("url")#"C"
	RETURN
ENDIF
IF this.lRelease
	NODEFAULT
	url=""
	RETURN .F.
ENDIF
IF this.lDebug
	ACTIVATE SCREEN
	? PROGRAM()
	? "URL: "+url
	IF NOT EMPTY(targetframename)
		?? "  Frame: "+targetframename
	ENDIF
ENDIF
lcURL=ALLTRIM(url)
IF LEFT(lcURL,LEN(this.cVFPSProtocol))==LOWER(this.cVFPSProtocol)
	NODEFAULT
	RETURN this.BeforeNavigate(@url,@flags,@targetframename,@postdata,@headers)
ENDIF
IF RIGHT(url,16)==SPACE(16)
	this.cBeforeURL=ALLTRIM(lcURL)
	this.cSourceFile=""
	this.cSourceHTML=""
	RETURN
ENDIF
IF NOT this.ParseSource(lcURL) OR EMPTY(this.cNewURL)
	RETURN
ENDIF
NODEFAULT
url=""
RETURN this.Navigate(this.cNewURL+SPACE(16),@flags,@targetframename)

ENDPROC
PROCEDURE beforenavigate
*** OLE Control Event ***
PARAMETERS url, flags, targetframename, postdata, headers, cancel
LOCAL lcURL,lcNewURL,lcSource,llJump,llMailTo,lcFileExt,lnAtPos,lnHistory

IF this.lRelease OR this.lBusy
	cancel=.T.
	RETURN .F.
ENDIF
this.SetBusyState(.T.)
IF this.lDebug
	ACTIVATE SCREEN
	? PROGRAM()
	? "URL: "+url
	IF NOT EMPTY(targetframename)
		?? "  Frame: "+targetframename
	ENDIF
ENDIF
lcURL=ALLTRIM(url)
this.SetParam(lcURL)
llVisible=this.Visible
llMailTo=(LOWER(LEFT(lcURL,7))=="mailto:")
IF NOT llMailTo
	this.cBeforeURL=lcURL
ENDIF
lnAtPos=RAT(".",lcURL)
lcFileExt=IIF(lnAtPos=0,CHR(0),ALLTRIM(SUBSTR(lcURL,lnAtPos+1)))
IF NOT this.lParseSource OR ATC(";"+lcFileExt+";",";"+this.cParseFileExt+";")=0 OR ;
		NOT FILE(lcURL)
	IF NOT this.lParseSource
		this.cFileName=""
	ENDIF
	this.cSourceURL=""
	this.BeforeRetrieval(@url,@flags,@targetframename,@postdata, ;
			@headers,@cancel)
	IF NOT cancel
		this.cFileName=""
		this.cSourceFile=""
		this.cSourceFileName=""
		this.cSourceHTML=""
	ENDIF
	this.SetBusyState(.F.)
	RETURN
ENDIF
IF NOT this.BeforeRetrieval(@url,@flags,@targetframename,@postdata, ;
		@headers,@cancel) OR cancel
	IF NOT cancel
		this.cSourceURL=""
		this.cSourceFile=""
		this.cSourceHTML=""
	ENDIF
	this.SetBusyState(.F.)
	RETURN .F.
ENDIF
IF llMailTo OR (NOT EMPTY(this.cTempFileName) AND LOWER(url)==LOWER(this.cTempFileName))
	this.SetBusyState(.F.)
	RETURN .F.
ENDIF
IF NOT cancel
	this.cSourceFile=""
	this.cSourceHTML=""
ENDIF
IF NOT this.ParseSource(lcURL) OR EMPTY(this.cNewURL)
	this.SetBusyState(.F.)
	RETURN
ENDIF
cancel=.T.
this.cSourceFile=""
this.cSourceHTML=""
this.Navigate(this.cNewURL+SPACE(16),@flags,@targetframename)
this.SetBusyState(.F.)

ENDPROC
PROCEDURE navigatecomplete
*** OLE Control Event ***
LPARAMETERS url
LOCAL lcURL,lcLocationURL,lcSourceFileName

IF TYPE("url")#"C"
	RETURN
ENDIF
lcSourceFileName=this.cSourceFileName
IF this.lDebug
	ACTIVATE SCREEN
	? PROGRAM()
	? "URL: "+url
	? "Location URL: "+this.LocationURL
	? "Source file name: "+lcSourceFileName
ENDIF
IF EMPTY(lcSourceFileName)
	lcURL=LOWER(ALLTRIM(url))
ELSE
	lcURL=lcSourceFileName
ENDIF
IF EMPTY(lcURL) OR (SUBSTR(lcURL,5,1)==":" AND NOT LEFT(lcURL,5)=="file:" AND ;
		NOT LEFT(lcURL,4)=="http") OR RIGHT(lcURL,11)=="about:blank"
	RETURN
ENDIF
this.cLastURL=this.cURL
this.cURL=LOWER(this.ValidURL(lcURL))
lcLocationURL=LOWER(this.ValidURL(this.LocationURL))
IF this.lRefreshMode
	this.lRefreshMode=.F.
	this.lHistoryEnabled=.T.
	RETURN
ENDIF
IF NOT this.lHistoryEnabled
	this.lHistoryEnabled=.T.
	RETURN
ENDIF
lcURL=lcLocationURL
IF this.nHistoryCount>0 AND (this.aHistory[this.nHistoryCount,1]==lcURL OR ;
		(NOT EMPTY(lcSourceFileName) AND this.aHistory[this.nHistoryCount,2]==lcSourceFileName))
	RETURN
ENDIF
this.nHistoryCount=this.nHistoryCount+1
DIMENSION this.aHistory[this.nHistoryCount,2]
this.aHistory[this.nHistoryCount,1]=lcURL
this.aHistory[this.nHistoryCount,2]=lcSourceFileName

ENDPROC
PROCEDURE statustextchange
*** OLE Control Event ***
LPARAMETERS text

IF this.lRelease OR this.lBusy OR NOT this.oHost.Visible
	RETURN .F.
ENDIF
IF TYPE("text")=="C" AND NOT EMPTY(text)
	SET MESSAGE TO LEFT(text,254)
ELSE
	SET MESSAGE TO
ENDIF

ENDPROC
PROCEDURE downloadcomplete
*** OLE Control Event ***

IF this.lDebug
	ACTIVATE SCREEN
	? PROGRAM()
ENDIF
IF TYPE("this.LocationURL")=="C"
	this.cURL=LOWER(this.ValidURL(this.LocationURL))
ENDIF
this.NavigateComplete(this.cURL)
this.RunScript("OnLoad")

ENDPROC
PROCEDURE commandstatechange
*** OLE Control Event ***
LPARAMETERS command, enable
LOCAL llEnabled

IF this.lRelease
	RETURN .F.
ENDIF
IF this.lDebug
	ACTIVATE SCREEN
	? PROGRAM()
	? "Command: "+ALLTRIM(STR(command))
	? "Enable: "+IIF(enable,"ON","OFF")
ENDIF
llEnable=enable
DO CASE
	CASE command=1
		IF TYPE("thisform.cmdGoForward")=="O"
			thisform.cmdGoForward.Enabled=llEnable
		ENDIF
	CASE command=2
		IF this.nHistoryCount=0
			llEnable=.F.
		ENDIF
		IF TYPE("thisform.cmdGoBack")=="O"
			thisform.cmdGoBack.Enabled=llEnable
		ENDIF
ENDCASE

ENDPROC
PROCEDURE refresh2
*** OLE Control Method ***
LPARAMETERS level

IF this.lRelease OR NOT this.lRefresh
	NODEFAULT
	RETURN .F.
ENDIF
IF NOT EMPTY(this.cSourceFileName)
	RETURN this.RefreshMode()
ENDIF

ENDPROC
PROCEDURE framebeforenavigate
*** OLE Control Event ***
LPARAMETERS url, flags, targetframename, postdata, headers, cancel

IF TYPE("url")#"C"
	RETURN
ENDIF
IF this.lDebug
	ACTIVATE SCREEN
	? PROGRAM()
	? "URL: "+url
	IF NOT EMPTY(targetframename)
		?? "  Frame: "+targetframename
	ENDIF
ENDIF
this.BeforeNavigate(@url,flags,@targetframename,@postdata,@headers,@cancel)

ENDPROC
PROCEDURE goforward
*** OLE Control Method ***

DOEVENTS

ENDPROC
PROCEDURE gohome
*** OLE Control Method ***

DOEVENTS

ENDPROC
PROCEDURE gosearch
*** OLE Control Method ***

DOEVENTS

ENDPROC
PROCEDURE validateurl
LPARAMETERS tcURL
LOCAL lcURL,lnLastSelect

lcURL=ALLTRIM(tcURL)
IF this.lRelease OR lcURL==this.cLastURL OR ;
		LOWER(lcURL)==LOWER(ALLTRIM(this.cBlankHTMLFile))
	RETURN
ENDIF
SET DATASESSION TO (this.oHost.DataSessionID)
lnLastSelect=SELECT()
IF NOT this.OpenVFPScript()
	SELECT (lnLastSelect)
	RETURN
ENDIF
SELECT vfpscript
SCAN ALL FOR BeforeNav AND URLCancel
	IF NOT EMPTY(URLMatch) AND NOT this.WildCardMatch(ALLTRIM(MLINE(URLMatch,1)),lcURL)
		LOOP
	ENDIF
	IF NOT EMPTY(URLEval) AND (TYPE(URLEval)#"L" OR NOT EVALUATE(URLEval))
		LOOP
	ENDIF
	this.cURL=this.this.cLastURL
	SELECT (lnLastSelect)
	RETURN .F.
ENDSCAN
SELECT (lnLastSelect)

ENDPROC
PROCEDURE Error
LPARAMETERS nError, cMethod, nLine
LOCAL lcMessage,lcMethod,lcErrorMsg,lcCodeLineMsg

#DEFINE	RUNCODE_RUNTIME_ERROR_LOC	"RunCode Runtime Error"
#DEFINE	TAB		CHR(9)
#DEFINE	LF		CHR(10)
#DEFINE	CR		CHR(13)
#DEFINE CR_LF	CR+LF

IF this.lIgnoreErrors OR INLIST(nError,1113,1426,1429,2012)
	RETURN
ENDIF
IF NOT EMPTY(GETPEM(thisform,"Error"))
	RETURN thisform.Error(nError,cMethod,nLine)
ENDIF
lcMethod=LOWER(ALLTRIM(cMethod))
IF INLIST(LOWER(lcMethod),"goback","gofoward") OR RIGHT(lcMethod,9)==".navigate"
	RETURN
ENDIF
lcErrorMsg=MESSAGE()+CR+CR+thisform.Caption+":  "+this.Name+CR+ ;
		"Object:        "+this.Name+CR+ ;
		"Error:           "+ALLTRIM(STR(nError))+CR+ ;
		"Method:       "+lcMethod
lcCodeLineMsg=MESSAGE(1)
IF BETWEEN(nLine,1,10000) AND NOT lcCodeLineMsg="..."
	lcErrorMsg=lcErrorMsg+CR+"Line:            "+ALLTRIM(STR(nLine))
	IF NOT EMPTY(lcCodeLineMsg)
		lcErrorMsg=lcErrorMsg+CR+CR+lcCodeLineMsg
	ENDIF
ENDIF
IF this.Msgbox(lcErrorMsg,17)#1
	this.ReleaseHost
ENDIF

ENDPROC
PROCEDURE Init
LPARAMETERS tcVFPScript

DIMENSION this.aHistory[1,2]
this.aHistory=""
this.oHost=thisform
this.oUser=CREATEOBJECT("Custom")
this.oUser.Name="oCustom"
this.nDataSessionID=thisform.DataSessionID
this.cProgramPath=IIF(TYPE("this.oHost.cProgramPath")=="C",this.oHost.cProgramPath, ;
		this.ClassLibrary)
IF NOT "\"$this.cBlankHTMLFile AND NOT ":"$this.cBlankHTMLFile
	this.cBlankHTMLFile=LOWER(this.cProgramPath+this.cBlankHTMLFile)
ENDIF
DO CASE
	CASE ISNULL(tcVFPScript)
		this.cVFPScript=""
	CASE EMPTY(tcVFPScript) OR TYPE("tcVFPScript")#"C"
		this.cVFPScript=LOWER(FULLPATH(this.cVFPScriptTable,this.cProgramPath))
	OTHERWISE
		this.cVFPScript=LOWER(ALLTRIM(tcVFPScript))
ENDCASE
IF EMPTY(this.cVFPScript)
	this.lVFPScript=.F.
ENDIF
this.OpenVFPScript
SELECT 0
IF this.lBlankHTMLStartup AND NOT EMPTY(this.cBlankHTMLFile) AND FILE(this.cBlankHTMLFile)
	this.Navigate(this.cBlankHTMLFile)
ENDIF
SELECT 0

ENDPROC
PROCEDURE Refresh
*** OLE Control Method ***

IF this.lDebug
	ACTIVATE SCREEN
	? PROGRAM()
ENDIF
IF this.lRefresh AND NOT this.lDesign
	this.RunScript("OnRefresh")
ENDIF
this.lRefresh=.T.
NODEFAULT

ENDPROC
PROCEDURE Destroy
this.EraseTempFile
this.lRelease=.T.
this.cSourceFile=""
this.cSourceHTML=""
this.oAction=.NULL.
this.oSource=.NULL.
this.oUser=.NULL.
this.oHost=.NULL.
IF USED("vfpscript")
	USE IN vfpscript
ENDIF

ENDPROC
PROCEDURE LostFocus
IF this.lDebug
	ACTIVATE SCREEN
	? PROGRAM()
ENDIF
this.RefreshDeactivate

ENDPROC
~�� �~�~�%6%�k*{w<p�UW�������%�����.�B�-���T������T������%�C��	���k�B�-���T����	��%�CC���]�����B�-���T��C���
��%�C������<,�����T��CW��T��CC��]@��h������M�������
T�����Q�
F����T������T������U
LCFILENAMELCFILENAME2LNLASTSELECTLCSOURCELCALIASTHISLRELEASECSOURCEFILECSOURCEHTML	CFILENAMETRIMPATHSOURCEt�������%�����)�B�-���T���-��
��C����T��C����%�C���CC���]�����)��C�HTML source not available����B�-���
%������
%������
/����:����/���:��B��T���a��
%�����/�����_�/����%�C|���[�T��	�-����C���
����T���-��UTLNOWAITTLNOEDIT
LCFILENAMETHISLRELEASELVIEWSOURCEMODE
GETSOURCEHTML
GETSOURCEFILE
WAITWINDOWLHISTORYENABLEDNAVIGATE`4������������	�
�*%�C�
this.oHostb�O�	C�����c�B�-���G�(����
��T��C����T���a��%������
����T��a��B�-���T�	�C�?���%��	����T��CC��	�=����T�������T��C�@��"%�CC�C��>=@C��@��n�T��a����C�����B�-���T�
�CW��%���
�	C��
����%�C�	vfpscript�����Q���
F��
��B��T���-��F��~����A�*%�C��
�CCC�������
	��#�.��)%�C��
�C�b�L�C��
	��T�.��
%����p�T��a���%�C��
������CC�������%�C�	vfpscript�
����!��F��%�C� �
��'�T��C� ���T���CC���!@��T��a��!��C�������"���%��#
��=�!���
F��
��T���a��U$URLFLAGSTARGETFRAMENAMEPOSTDATAHEADERSCANCELLCURL
LCLOWERURLLCNEWURLLNATPOSLNLASTSELECTTHISOHOST
DATASESSIONIDURESULTLRELEASEENABLEDCLASTURLCURL
CVFPSPROTOCOLVFPS
LVFPSCRIPT
OPENVFPSCRIPT	VFPSCRIPT	BEFORENAVURLMATCH
WILDCARDMATCHURLEVAL	URLCANCELSCRIPT	RUNSCRIPTNAMEURLJUMPVALIDURLNAVIGATECONTINUE����������
T�����T��C�.����%�������T��C�:����%�������T��C���=����
%������$T��C�2��4�C�f�C�@6���B�C����U
TCFILENAMETLPLATFORMTYPE
LCFILENAMELNATPOSLNATPOS2z���������%�C����2�	B�����
T�����T��C�:���%�����}�T��C���\���
%������T��C������
%������$T��C�2��4�C�f�C�@6���,T��CC�C�\�CC�\���D�\���+�C��=�.��4�T��CC��\����+�C��R�.��j�T��CC�C�>�=����	B����U
TCFILENAME	TLTRIMEXTTLPLATFORMTYPE
LCFILENAMELNATPOSTHISTRIMEXT���������T��C�\����&T��CC�����C��=6���
%������$T��C�2��4�C�f�C�@6���	B����U
TCFILENAME	LPLATTYPE
LCFILENAMELNATPOS7%�C���
��0�
 �����T�������UTHIS
CTEMPFILENAMEJ%������B�-���%�C�����7�
�����B�����UTHISLRELEASECSOURCEFILE
REFRESHSOURCEJ%������B�-���%�C�����7�
�����B�����UTHISLRELEASECSOURCEHTML
REFRESHSOURCE�4�������5������	�
���
����5%������
�C�urlb�C�C������B�-���T��C����T�
�C��/�\���T��C�\�
���2%����CC�
��C��>\@��	����B�-���T������T������T������T������T��-��T��C�.����;T�����&CCCC���\�@�htm�html�asp�	��6%��
�C�
@C��@�CC�
�@CC���@����T����
��T���C������B�-���T��C�:�
���%�����.�B�-���%�����[�T�
�CC�
��\����%�CC���
]���{�B�-���%�������t&���Ct�����URL: ����T�
�������Ca����$%��:�
�C�:����4�:T���file://CCC��\�/��///�//��//�/����
T�	����
T�����T������T���C�
@��T���C������T�������T���C������%�C������T�	�������T������T������T�������T�����C�
����4%�C�this.oHost.lReleaseb�L�
���	��~�T���-��B�-���T�� �CC���!@��T��"��	��U#URLFLAGSTARGETFRAMENAMEPOSTDATAHEADERSCANCELOTHISLCURLLCSOURCELCNEWURL
LCFILENAMELNATPOS
LLHTMLFILELLBUSYVFPSCRPTTHISLRELEASELPARSESOURCECTEMPFILEPREFIX	CFILENAME	CFILEPATH
CSOURCEURLCSOURCEFILENAME
CTEMPFILENAMECBLANKHTMLFILETRIMFILELDEBUGLBUSYSETBUSYSTATECSOURCEFILEPATHOHOSTVISIBLECURLVALIDURLCNEWURL<���5�������6%����C���C�tcCodeb�C�C����Z�B�-���%�����~�t&���Ct���T��������Ca��	��T��CW��T����
���G�(����t&�
T�����T���a���
����T���-��T���G�(����
F������C���	��UTCCODEOTHISLNDATASESSIONIDLNLASTSELECTLLBUSYTHISLRELEASELDEBUGLBUSYSETBUSYSTATEOHOST
DATASESSIONIDLRUNCODEMODERUNCODE��������%����C����2�B�-���%�����n�t&���Ct�����Script: ����T��C�������%�����
	����t&�)���Script: ��
  (not found)���	B����UTCSCRIPTTCALIASLLRESULTTHISLRELEASELDEBUG	VFPSCRIPT�������%�C����&�	B�����T��C�����%��:�
�CC��=@�http
	�CC��=@�file:
	�bCC��=@�www.�"CCC��R@�.com�.gov�.net��&C���\�:
�C��=�\\
		����T���http://����%�CC�����\�:��?�$T��CC��\�/��///�//������$%��:�
�C�:������:T���file://CCC��\�/��///�//��//�/�����	B����UTCURLLCURL����������������	�
�����
���������%�C������%�C���C���*����B��B�-���T��CCC��� ��@��T��CCC��� ��@��T��C�>��%�������B��
T�����(%�C��=�"�C��R�"	��W�T��a��T��CC��C�>�\����%��
�	� �	����T��-��T��C� ����
T�����
T�
����+�a����T��C� ���%�������T�
�C����
T��������T��C�"���%���
��]�T��C�"����%�����Y�
T�������T�
�CC��=���T��CC���\����%�C�
�����!��T��C�
�=��
H�������+����
T��������-���T�������2��
T������%�����D�T�
�CC�
�\����T��C�
�a����.%�����
	�������	����B�-���T�������%�������!���	B������%�C��=�~���B�CCC��\���B�����T�	�C�,�����%��	���Y�T���,C���,�����
���(��	����%��	�����T�
�CC��@��T��C�
>����T��C�,��
��"T��C�,��
�����T�
�CCC����\�@��������(�C�?�
�����T��C�?�
��%�����w�%������o�T����?���!�� T�
�C�
��C���\[����?%�C�
����
�	�
�*�	�
�?�
�
�%%����B��%�C�
�=�*���B�C�
�\C�C�
>�R���?%�C�
�=�%�C�
�R�%	�C�
���\�	��b�B��T��C�*�
��>%����
���	�C���=C�
��=	����B����B�-��UTCMATCHEXPLISTTCEXPRESSIONSEARCHEDTLMATCHASISLCMATCHEXPLISTLCEXPRESSIONSEARCHEDLLMATCHASISLCMATCHEXPLIST2
LNMATCHLENLNEXPRESSIONLENLNMATCHCOUNTLNCOUNTLNCOUNT2LNSPACECOUNT
LCMATCHEXPLCMATCHTYPELNMATCHTYPELNATPOSLNATPOS2LLMATCHLLMATCH2TABTHIS
WILDCARDMATCH����%����	C�����8�T���-��B�-���T��������Ca����T���a��T���-����C��������C�����U	LLBUSYTHISLRELEASECSOURCEFILENAMELREFRESHMODELBUSYSETBUSYSTATELHISTORYENABLEDNAVIGATEU�����G�(������%�C�	vfpscript���=�B��'%������
�	C�����o�B�-���T��C�SAFETYv��G.�T��CW��T������%�CC���]�
��G�F��Q�����	�
%�C�
��!�
F����%���ON���G. ���G.��B�-���%�C.�	
��C�Q�
 ������,%�CC���]��C�	BeforeNavb�L��F�%�C�	vfpscript�����Q�	��
 ����F���h1����
�C��
���C�����M�
�M��L��M��M��M��L��L��M��T��N����Q�����	��5%�C�
LastAccessb�T�C�	ExecCountb�N����%�C�	vfpscript�����Q�	��F��Q�����	�
%�C�
���
F����%���ON����G. ����G.��B�-���%�C�
LastAccessb�T��:�i1������T��%�C�	ExecCountb�N��w�i1������N�����Q�����	��%�C�	vfpscript�
����
F����%���ON����G. ����G.��B�-���F�	�%�C�m�
INDEXVALUE���G((�
IndexValue��7�& ��
��
���G(�C'
��-�F��U
LCFILENAMELNLASTSELECTLCLASTSETSAFETYTHISOHOST
DATASESSIONIDLRELEASE
LVFPSCRIPT
CVFPSCRIPT	VFPSCRIPT
INDEXVALUENAMEHTMLSCRIPT	BEFORENAVURLMATCHURLEVALURLJUMP	URLCANCELCONTINUECOMMENT
LASTACCESS	EXECCOUNTZ%������
���B��%�����S�T���-��T���a��B��UTHISLRELEASEVISIBLELREFRESHDEACTIVATEx%������B�-���&%�C�this.oHost.tmrHostb�O��H�B�-���)��C�oTHIS.oHost.Release������UTHISLRELEASEOHOSTTMRHOSTRUNCODEf���������������	�
���
�=%����C���C�
this.oHostb�O�	C�������B�-���T�
�������Ca����T������%��������T���-���T��CC��@��T��C��@��T��C�>��%�C��=���<�T��CC���\����+�C��=�/��l�T��CC��\����+�C��R�/����T��CC�C�>�=����T�
�C�?���%��
�������C�����T��CC��
�=������	���(�������T��C�	����T�
�C�=���%��
���W�
T��������T��CC��
�=���T��CC��
�\����(%�C��=�(�C��R�)	���&%�CC�C�	 ��� ���()����T����	�������T����	��C�����9�T����	������"%�C��
�C��=�;
	����T��C�	����%��.�
����
5�����T����=lcParameter��&lcCode
���T��C�����%�����&�t&���Ct��-���	Command: ��	  Param: �����
H�7�5����refresh��`�T��C�������releasehost����T��C�������	runaction����T��C��������	runmethod��0�T������%�C��R�)
���T����()���luResult=this.&lcParam1
���runcode��]�T��C��������	runscript����
T�����T�
�C�::���%��
�����T��CC��
�=���T��CC��
�\����T��C���������
viewsource��"�T��C�� ��2�5�T��-���T��������C�
����	B����U!	TCCOMMAND	LCCOMMANDLCPARAM1LCPARAMETERLCALIASLCVFPSPROTOCOLLNVFPSPROTOCOLLEN
LCVARIABLELCCODELNCOUNTLNATPOS	LLENABLEDLURESULTLLBUSYTHISLRELEASEOHOSTLBUSYSETBUSYSTATEENABLEDVISIBLE
CVFPSPROTOCOLSETPARAMNPARAMCOUNTAPARAMLDEBUGCPARAMREFRESH2RELEASEHOST	RUNACTIONRUNCODE	RUNSCRIPT
VIEWSOURCEO��������T���a��?%����C���C�this.oActionb�O�	C�����j�B�-���T��CC��@��T%�C���C�����h
�C�����h�C�����h�Method
����B�-���T��������Ca��	��&T��C�
this.oAction.��()��T��������C���	��	B����U
TCMETHODLCMETHODLLRESULTLLBUSYTHISURESULTLRELEASEOACTIONLBUSYSETBUSYSTATE���������1%�C��C�
tcFileNameb�C�C����T�	B�����T��C����%��.�
����T����.txt���T��CW��T��CC��]@��h������M�������
T�����Q����
F����	B����U
TCFILENAME
LCFILENAMELNLASTSELECTLCALIASLCTEXTTEXT���������E%�C��C�tcTextb�C�C�
tcFileNameb�C�C����f�B�-���T��C����%��.�
����T����.txt���T��CW��T��CC��]@��h������M�r�����������(����Q����
F����UTCTEXT
TCFILENAME
LCFILENAMELNLASTSELECTLCALIASTEXT�����������T��CC�����C��6��T��C�?���%�����r�
T��������T��CC���\����T��������	�����T��	�-��%�C������T��
����B��%�C��R�/���T��CC�C�>�=����T��
����T������T��CC������F�������(����
�T��������T��C����%�������T��C�������T��CC���=���T��CC���\����T��	���������UTCPARAMLCPARAMLCPARAMETERLCPARAMDELIMITERLNPARAMTOTALLNCOUNTLNATPOSTHISNPARAMCOUNTAPARAMCPARAMCPARAMDELIMITER���������%�����L�t&���Ct�����Name: ����T��C�������T��C�lcHTMLb�C��%��
����
T������%�����
	����t&�'���Name: ��
  (not found)���	B����UTCNAMETCALIASLCHTMLLLRESULTTHISLDEBUG	VFPSCRIPT�����������������	�
�*%�C�
this.oHostb�O�	C�����j�B�-���G�(����
��T���a��-%����C���C�tnCodeb�N����B�-���
T��C��T��CC��@��*T��CC����	vfpscript�CC��@6��T��CW��T��-��
T�	����
T�
���������(�������%�CC����@�
��|�.��T��a��T�	�C������
T�
��	����%��
���%�C���	C��
	����
F����B�-���%�C��
���
F����B�-���
F����"T��CC+�COCN���CO6��%�CC��@�
��k�-�CC��@����T��C��
��
%������%�C�
LastAccessb�T����>�����������
T�	����
T�
�����%�������#6���	#������
F����
H�.��������y�%�����d���C�����B��B�C�	�����������	B��
���B�-��UTCNAMETCALIASTNCODELCNAMELCALIASLNLASTSELECTLNRECNO
LTDATETIMELLMATCHLCSCRIPTCODELCHTMLTHISOHOST
DATASESSIONIDURESULTLRELEASELNCOUNTNSCRIPTCOUNTASCRIPTS
OPENVFPSCRIPTNAME
LASTACCESS	EXECCOUNTSCRIPTHTMLLDESIGN
EDITSCRIPTRUNCODE������������+T��CC�	tcMessageb�C����6��(T��CC�tnTypeb�N��0��6��,T��CC�tcTitleb�C�	����6��t&�T��C����x��	B����U		TCMESSAGETNTYPETCTITLE	LCMESSAGELNTYPELCTITLELNRESULTTHISFORMCAPTION>����������*T��CC�tcStringb�C����6��0T��CC�tcTitleb�C�C���CC��]@6��)T��C��]�\�~_  ��.htm��%�C����
����B�-���t&�
%������/������������$�/����������T��C������
 ����	B����U	TCSTRINGTCTITLETLNOEDITLCSTRINGLCTITLELCTEMPFILENAMETHISSTRINGTOFILEFILETOSTRINGa���������������	�
���%�C����S�B�-���T��C�
 C�
 ��T��C����T���
���T�
�-�������(��
���� %�C�@CC���
�@���T��C���
���T��C���
���T�
�a��!����%��

��z�N��C�Script� (��) �not found in file� "��".��
���B�-���T��� ����T��C��
���T����
��T��C����
���%���������B��%�C��R�
��!�T�������T�
�����������T��C��������%�����z�T�	�-�����T�	�C���
����%��	
��	�U��C�Unable to update script� (��) �in file� "��".��
���B�-���Q��C�Script� (��) �in file� "��" �updated�.�
���UTCSCRIPTNAMELCSCRIPTNAMELCOLDSCRIPTCODELCNEWSCRIPTCODELNSCRIPTNUMLCSCRIPTNAMESEARCH
LCFILENAME	LCOLDHTML	LCNEWHTMLLLRESULTLLMATCHLLNOEDITLCCR_LFTHIS	CFILENAMENSCRIPTCOUNTASCRIPTSMSGBOXFILETOSTRING
EDITSTRINGSTRINGTOFILE
WAITWINDOW������������T������T��	����T��
����T������%�C����x�B�-���T��C����%��.�
����T����.dbf���%�C�0
����B�-���G�(�����2T��CCC���C�a��
�C��6� �_���T��	����%�C������T���C�O��T��
�CC�&@��T���C��
����G�(������B��T��CW��F��
%������Q�����������Q���������%�C��
��?�T������T��	����T��
����T������
F����B�-���T��
�CC�&@��T���C��
����%�C��
����SET FILTER TO &tcFilter
�-�
F����G�(������U
TCFILENAMETCALIASTLEXCLUSIVETCFILTER
LCFILENAMELCALIASLNLASTSELECTTHISNRECNOCALIASCDBFCDBFPATHNDATASESSIONIDTRIMPATHTRIMFILEOHOST
DATASESSIONID���������"T��CC���	���C��6��%�C���C��
��\�B�-���T��CW��
F����%�C���CN�����#��������-��t&�T���BROWSE��%�C��
����T���� ����&lcCommand

F����UTCALIAS	TCCLAUSESLCALIASLNLASTSELECT	LCCOMMANDTHISCALIASNRECNO��������R�%�C����*�B��T��C���=��
H�M����C�tlWaitb�L����
%����~�
R,�������R,:������C�tlWaitb�N����R,�������2���B�-���UTCTEXTTLWAITLCTEXT6���%�������B��T������UTLBUSYTHISLBUSY|������G�(�����"T��CC���	���C��6��%�C��
�C��	��c�Q�����G�(������UTCALIASLCALIASTHISNDATASESSIONIDCALIASOHOST
DATASESSIONIDy����������G�(�����T������%�C���C��
��o�G�(���	�
��B�-���T��CC������6��T��CW��
F����%�C+����#6��T��CO��$T��C����	���CO6��	#����	H����%�C���#)��%�C+��#�#6��T���CO��	#����
F����G�(���	�
����C�RefreshData����U
	TNRECORDS	LNRECORDSLCALIASLNRECNOLNLASTSELECTLNLASTRECNOTHISNDATASESSIONIDCALIASOHOST
DATASESSIONIDNRECNO	RUNSCRIPT����������� T�����AddProp5.fll��%�C�0
��U�B�-��� T��C�C�LIBRARYv����%��
����
Gb(�����T��C������%��
����<������	B����U	TOOBJECT
TCPROPERTYTUVALUE
LCFILENAMELLADDPROPLIBSETLVRESULTTHISCPROGRAMPATHADDPROPT����%����
��*���B�-���T��C��������T��C��������T��������%���������������������T�������T���-��%�C��
�������C�����B�-���)%�C��
�
C���
	�	��
	��M�����C�����B�-���ULCURLLCSOURCEFILENAMETHIS
NHISTORYCOUNTAHISTORYLHISTORYENABLEDNAVIGATECSOURCEFILENAME���������%�C�urlb�C��6�B��%�������t&���Ct�����URL: ���%�C��
�������	  Frame: �����T��a��!��C���������U	URLFLAGSTARGETFRAMENAMEPOSTDATAHEADERS	PROCESSEDTHISLDEBUGNAVIGATE������������%�C�urlb�C��=�B��%�����i���
T�����B�-���%���	����t&���Ct�����URL: ���%�C��
�������	  Frame: �����T��C���� %�C�C��
>=C��
@��'���!B�C����������%�C��RC�X��y�T���C����T��
����T������B��"%�C���
�	C�������B����
T�����!B�C��C�X������UURLFLAGSTARGETFRAMENAMEPOSTDATAHEADERSLCURLLCNEWURLTHISLRELEASELDEBUG
CVFPSPROTOCOLBEFORENAVIGATE
CBEFOREURLCSOURCEFILECSOURCEHTMLPARSESOURCECNEWURLNAVIGATE04�������#�����	�
���
�%��������j�T��a��B�-�����Ca����%�������t&���Ct�����URL: ���%�C��
�������	  Frame: �����T��C������C�����T������ T�
�CC��=@�mailto:��%��

��P�T�������T��C�.����,T��C���C� �CC���\�6��B%���
�$C�;��;�;���;���C�0
����%���
����T�������T������%��C����������%��
��}�T������T������T������T���������C-����B��1%�C��������
�����%��
���T������T������T���������C-����B�-���-%��
�C���
�C�@C��@	��e���C-����B�-���%��
����T������T�������"%�C��� 
�	C��!�������C-����B��T��a��T������T������!��C��!C�X����"����C-����U#URLFLAGSTARGETFRAMENAMEPOSTDATAHEADERSCANCELLCURLLCNEWURLLCSOURCELLJUMPLLMAILTO	LCFILEEXTLNATPOS	LNHISTORYTHISLRELEASELBUSYSETBUSYSTATELDEBUGSETPARAM	LLVISIBLEVISIBLE
CBEFOREURLLPARSESOURCE
CPARSEFILEEXT	CFILENAME
CSOURCEURLBEFORERETRIEVALCSOURCEFILECSOURCEFILENAMECSOURCEHTML
CTEMPFILENAMEPARSESOURCECNEWURLNAVIGATE���������%�C�urlb�C��1�B��T������%�������t&���Ct�����URL: ���!���Location URL: ����"���Source file name: ����%�C������T��CC��@�����
T������j%�C���=C���\�:�C��=�file:
	�C��=�http
	�C��R�about:blank��h�B��T�����	��T��	�CC���
@��T��CC����
@��%�������T���-��T���a��B��%���
��	�T���a��B��
T�����P%���
��9C��
����� C��
�C��
����		��n�B��T��
���
��������
�����T�����
��������T�����
��������UURLLCURL
LCLOCATIONURLLCSOURCEFILENAMETHISCSOURCEFILENAMELDEBUGLOCATIONURLCLASTURLCURLVALIDURLLREFRESHMODELHISTORYENABLED
NHISTORYCOUNTAHISTORY����(%����������
��6�B�-���"%�C�textb�C�C��
	��l�G&(�C���=���z�G&(��UTEXTTHISLRELEASELBUSYOHOSTVISIBLE�%����� �t&���Ct���$%�C�this.LocationURLb�C��d�T���CC����@�����C��������C�OnLoad����UTHISLDEBUGCURLVALIDURLLOCATIONURLNAVIGATECOMPLETE	RUNSCRIPT|�������%�����)�B�-���%�������t&���Ct�����	Command: CC�Z���+���Enable: C���ON��OFF6���
T�����
H���u�������)%�C�thisform.cmdGoForwardb�O���T���	����������u�%���
���4�T��-���&%�C�thisform.cmdGoBackb�O��q�T���	������UCOMMANDENABLE	LLENABLEDTHISLRELEASELDEBUGLLENABLETHISFORMCMDGOFORWARDENABLED
NHISTORYCOUNT	CMDGOBACKX���%������
��-���B�-���%�C���
��Q�
B�C�����ULEVELTHISLRELEASELREFRESHCSOURCEFILENAMEREFRESHMODE���������%�C�urlb�C��6�B��%�������t&���Ct�����URL: ���%�C��
�������	  Frame: �����%��C����������U	URLFLAGSTARGETFRAMENAMEPOSTDATAHEADERSCANCELTHISLDEBUGBEFORENAVIGATE��U��U��UU�������T��C����2%��������C�@CC���@��W�B��G�(������T��CW��%�C��	
����
F����B��F�
�~����	��D�*%�C�
�
�CCC�
������
	����.��)%�C��
�C�b�L�C��
	���.��T��������
F����B�-���
F����UTCURLLCURLLNLASTSELECTTHISLRELEASECLASTURLCBLANKHTMLFILEOHOST
DATASESSIONID
OPENVFPSCRIPT	VFPSCRIPT	BEFORENAV	URLCANCELURLMATCH
WILDCARDMATCHURLEVALCURL4�����������)%����C��Y���������O�B��%�CC�	�Error�!�
����B�C����	�
���T��CC��@��>%�CC�@�goback�gofoward��C��	R�	.navigate����B���T��CEC�
 C�
 �	��:  ��C�
 �Object:        ��C�
 �Error:           CC�Z�C�
 �Method:       ���T��C�E��%%�C���'����...
	���0T���C�
 �Line:            CC�Z���%�C��
����T���C�
 C�
 �����%�C����
���-�
�����UNERRORCMETHODNLINE	LCMESSAGELCMETHOD
LCERRORMSG
LCCODELINEMSGTHIS
LIGNOREERRORSTHISFORMERRORCAPTIONNAMEMSGBOXRELEASEHOST ������������T������T������T���C�Custom�N��T�����oCustom��T�������ET��	�CC�this.oHost.cProgramPathb�C����	���
6��&%��\��
�
�:��
	��
�T���C��	��@���
H�����C���:�T������(�C���C�tcVFPScriptb�C���T���CC��
��	�@��2���T���CC��@���%�C�������T���-���
����F��)%����
C���
	�	C��0	�����C�������F��UTCVFPSCRIPTTHISAHISTORYOHOSTTHISFORMOUSERNAMENDATASESSIONID
DATASESSIONIDCPROGRAMPATHCLASSLIBRARYCBLANKHTMLFILE
CVFPSCRIPTCVFPSCRIPTTABLE
LVFPSCRIPT
OPENVFPSCRIPTLBLANKHTMLSTARTUPNAVIGATEq%����� �t&���Ct���%������
	��X���C�	OnRefresh�����T���a����UTHISLDEBUGLREFRESHLDESIGN	RUNSCRIPT�
����T���a��T������T������T����T����T����T����%�C�	vfpscript�����Q�	��U
THIS
ERASETEMPFILELRELEASECSOURCEFILECSOURCEHTMLOACTIONOSOURCEOUSEROHOST	VFPSCRIPT1%����� �t&���Ct���
����UTHISLDEBUGREFRESHDEACTIVATE
refreshsource,��
viewsource��beforeretrieval��trimext���trimpath�	��trimfile���
erasetempfilei��
getsourcefile���
getsourcehtml3
��parsesource�
��runcode���	runscript���validurl���
wildcardmatch���refreshmode� ��
openvfpscript�!��refreshdeactivate�&��releasehosth'��vfps
(��	runaction�/��filetostring�1��stringtofile�2��setparam!4��gethtml�6��	vfpscript�7��msgbox�<��
editstring�=��
editscriptv?��	opentable�C��browsetable]G��
waitwindow�H��setbusystate�I��
closetable�I��
skiprecord�J��addprop�L��gobackN��	newwindow�O��navigate�P��beforenavigate�S��navigatecomplete1Y��statustextchange�\��downloadcompleteu]��commandstatechangeU^��refresh2N`��framebeforenavigate�`��	goforwardb��gohomeb��gosearch!b��validateurl,b��Error9d��Initg��Refreshj��Destroy�j��	LostFocus�k��1qqA!qAQqAQ��A�!AQ�A�3�qqA����qA�����AAA������AA�3�q�qA!����qA1�A1�!�qA����A�AA�q��AA�AA��A!A�AAq���A�AAA��3���11aAA�AA�3����A�1aA�QA�AA��AA��A�3��2a�AA�31�A3qA!�A�3qA!�A�3�q��RqA�q1"qA�1�b�qA1qA�AQqAQ�QA�A�A��!�1�!�A�A�qA�3qq�bqAQ�A��1�Q�������3�q�qAQ��A��Q�A�3qq��A�t
�A�A�A�AA�3�1�q���AAqA���AA����A��1���1���1a�AAA�A�AA!�!�!���AAA��qAQAAA��q�AAq�Aq��a!�A�1a!AAAA�AAq�A�AA1�AAAq3q��qA���13�"�AAqqAQa�a���1a�aAqAA�AA���A���AQ��A����1a�aAqA�QA��AA��1a�aAqAq�1�A�A�3�AA��AA3qAaqA�3q���qA�1�A!�a�A�AA��A1�A�Q1����A�aa��A�aA!Q1�A��AAAQ��A����Q��1A��Q��A��A����A�3q���qACqA�a�3q1�A�1QA�!AQ����3��RqA�1QA�!A����3q��1���A��AAq�A�qq!����AaA3��Q�aA����A�QqA�3����qA!��qA��������AA���A���qA�qA�!a!A���A��AQ��AA��AA�Aq3�1���Qa�3�����qAQ���qQA��3qq��qAQ������AAA��qAaQ1��AAqA�����A�QqA31��qA�1QAqA�!�!A�!AA���!�1A�qAA��AA�!3��"�qA��q��AAQ1aA��3�qR�AA!������A��qA3qBAA3qq�!��A!3qq��!qA����QA�A���QA�QA���!�3��qA��A���A�3�BAqA��qA��A�AqA�AqA3�rAAQ�Q�AA�3r�rAAA�qAQ�Q�AA�AA�!AA!AAA�3�1��qA�Q�Q�AA��A1�"AR�A�AA�A�qA��qA�A!�AA��3r�rAAQ�Q!A���A�AA1����AA�AA�AAq���3r�qA!�aA3Q�AA�A1a3�qqAQ���A���1AA�Aa1AA3r�AqA1�A3�rAAQ�Q�AAQ3C3C3C3q��"AA!�!�AAqa�AA�AAa�qA�3�1�AA��A�AA��Q�AA��A3qb��1Ra�A�����AA!�A���1A�3Q�A��A�A3��������A3Q�A�2��p =�OE|m���
��������\����������T�r�(�-D0L� XB� S.p�u.~/���/7�67�7K�7p8V�8�B`}�BE��&E�F��G�H��I�L��L�M&�NT;)(TbU�2�U�W�D�W�^�q�^\c��~c=e�^e�f&��fg=�?g;hF�\h�jR�
k�ls	�lJo�"jo�p�1�p#t�UHt&{��M{'�'�N�3�W�Z�F�e�o���s���o���������D��a����
��Ї�����&�����>��g�[��D�%eb�3�3qS���A)�~
��ࡱ�>��	������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Root Entry����������4/�@OleObjectData�����AccessObjSiteData&������������8ChangedProps�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������*��0����[�L�	�	�L88���Ws5��i+.bL�F�ԑ���,OLEClass = Microsoft Web Browser Version 1
Class1lrefresh Determines if the control is refreshed with the Refresh method is executed.
csourcehtml HTML source of current document.
csourcefile File name of current document.
curl Current URL.
clasturl Last URL.
cbeforeurl Current URL before document is fully retrieved.
lparsesource Enables parse document source mode.
ctempfilename File name of temporary file document.
ohost Host form - same as THISFORM.
uvalue Variant value - user defined - not used internally.
cnewurl URL before document is fully retrieved.
csourceurl URL of current source document.
lrefreshmode Refresh document mode.
csourcefilename File name of current source document.
cvfpscripttable VFP script table file name.
cvfpscript VFP script program file name.
lvfpscript Enables VFP script mode.
lruncodemode Run code mode.
csourcefilepath Path of current source document.
cparsefileext File extension list of file to parse in pre-processing mode.
lrefreshdeactivate Enabled auto execution of RefreshDeactivate method for LostFocus.
nscriptcount Returns length of VFP script array.
osource Source object - user defined - not used internally.
uresult Variant result value.
oaction User action object - user defined - not used internally.
lrelease Indicates the object's Release method has been executed and the object is in the process of being released from memory.
ldebug Debug mode.
cvfpsprotocol Default VFP script protocol string.
ctempfileprefix Prefix used for file name of temporary file document.
ureturn Variant return value.
cblankhtmlfile Specifies blank HTM file.
cprogrampath Web browser control class path.
cparam URL parameter string.
nparamcount Returns length of URL parameter array.
lblankhtmlstartup Enables blank startup web page.
cfilename Returns file name of current document.
ldesign Design mode.
calias Returns table alias of active table set automatially when using the OpenTable method.
cparamdelimiter URL parameter delimiter character.
lbusy Web browser busy mode.
cfilepath Returns path of current document.
nrecno Returns current record number of active table set automatially when using the OpenTable method.
ndatasessionid Returns data session of table alias of active table set automatially when using the OpenTable method.
cdbf Returns file name of active table set automatially when using the OpenTable method.
ouser User object - user defined - not used internally.
nhistorycount Returns length of URL history array.
lhistoryenabled URL history tracking enabled.
lviewsourcemode View source mode.
cversion Version of web browser control subclass.
cdbfpath Returns path of active table set automatially when using the OpenTable method.
nuserlevel User level - user defined - not used internally.
cuserid User ID - user defined - not used internally.
cusername User name - user defined - not used internally.
ldhtml Returns .T. if web browser supports dynamic HTML.
lignoreerrors
*refreshsource Refresh source.
*viewsource View source of current document.
*beforeretrieval BeforeRetrieval event.
*trimext Returns file name without extension of specified file name.
*trimpath Returns file name without path of specified file name.
*trimfile Returns path of specified file name.
*erasetempfile Erase current temporary file.
*getsourcefile Returns file name of current source document.
*getsourcehtml Returns HTML of current source document.
*parsesource Parse source code of HTML document.
*runcode Run specific block of VFP code without compilation.
*runscript Run specific VFP script.
*validurl Returns validated URL.
*wildcardmatch Returns .T. if wild card string is matched to specific string.
*refreshmode Set refresh mode.
*openvfpscript Open VFP script table.
*refreshdeactivate RefreshDeactivate method for use when losing focus of the web browser control.
*releasehost Release host form.
*vfps Executes VFP script based on specified URL.
^ascripts[1,0] VFP scripts array.
*runaction Run specific action which is a specific method of object referenced by the oAction property.
*filetostring Returns string contents of file.
*stringtofile Saves string contents to file.
*setparam Set URL parameters method.
*gethtml Returns HTML of current document.
^aparam[1,0] URL parameters array.
*vfpscript Executes specific VFP script.
*msgbox Message box wrapper method.
*editstring Edit string in window.
*editscript Edit specific VFP script.
*opentable Open specified table and activate as current table by setting cAlias property.
*browsetable Browse active table based on cAlias.
*waitwindow Wait window wrapper method.
*setbusystate Set busy state method.
*closetable Close active table based on cAlias.
*skiprecord Skip record of active table based on cAlias.
*addprop Add new property.
^ahistory[1,2] URL address history array.
*goback Navigate back URL address.
*newwindow NewWindow event.
*navigate Navigate to specific URL.
*beforenavigate BeforeNavigate event.
*navigatecomplete NavigateComplete event.
*statustextchange StatusTextChange event.
*downloadcomplete DownloadComplete event.
*commandstatechange CommandStateChange event.
*refresh2 Refresh2 method.
*framebeforenavigate FrameBeforeNavigate event.
*goforward Navigate forward URL address.
*gohome Navigate to home URL address.
*gosearch Navigate to search URL address.
*validateurl Validates URL.
Pixels.Web browser control for Internet Explorer 3.0._webbrowser3
olecontrol
olecontrol_webbrowser4�Height = 100
Width = 100
TabStop = .F.
csourcehtml = 
csourcefile = 
curl = 
clasturl = 
cbeforeurl = 
ctempfilename = 
ohost = .NULL.
uvalue = .T.
cnewurl = 
csourceurl = 
csourcefilename = 
cvfpscripttable = 
cvfpscript = 
csourcefilepath = 
cparsefileext = htm;html;asp
nscriptcount = 0
osource = .NULL.
uresult = .T.
oaction = .NULL.
cvfpsprotocol = vfps:
ctempfileprefix = _temp
ureturn = .T.
cblankhtmlfile = Blank.htm
cprogrampath = 
cparam = 
cfilename = 
calias = 
cparamdelimiter = &
cfilepath = 
nrecno = 0
ndatasessionid = 0
cdbf = 
ouser = .NULL.
nhistorycount = 0
cversion = Web Browser 04.01.0016
cdbfpath = 
nuserlevel = 0
cuserid = 
cusername = 
ldhtml = .T.
Name = "_webbrowser4"
�+PROCEDURE refreshsource
LOCAL lcFileName,lcFileName2,lnLastSelect,lcSource,lcAlias

IF this.lRelease
	RETURN .F.
ENDIF
this.cSourceFile=""
this.cSourceHTML=""
IF EMPTY(this.cFileName)
	RETURN .F.
ENDIF
lcFileName=this.cFileName
IF EMPTY(SYS(2000,lcFileName))
	RETURN .F.
ENDIF
lcFileName2=this.TrimPath(lcFileName)
IF WEXIST(lcFileName2)
	RELEASE WINDOW (lcFileName2)
ENDIF
lnLastSelect=SELECT()
lcAlias=LOWER(SYS(2015))
CREATE CURSOR (lcAlias) (Source M)
APPEND BLANK
APPEND MEMO Source FROM (lcFileName) OVERWRITE
lcSource=Source
USE
SELECT (lnLastSelect)
this.cSourceFile=lcFileName
this.cSourceHTML=lcSource

ENDPROC
PROCEDURE viewsource
LPARAMETERS tlNoWait,tlNoEdit
LOCAL lcFileName

#DEFINE HTML_SOURCE_NOT_AVAILABLE_LOC	"HTML source not available"

IF this.lRelease
	RETURN .F.
ENDIF
this.lViewSourceMode=.F.
this.GetSourceHTML()
lcFileName=this.GetSourceFile()
IF EMPTY(lcFileName) OR EMPTY(SYS(2000,lcFileName))
	this.WaitWindow(HTML_SOURCE_NOT_AVAILABLE_LOC)
	RETURN .F.
ENDIF
IF tlNoWait
	IF tlNoEdit
		MODIFY FILE (lcFileName) NOEDIT NOWAIT
	ELSE
		MODIFY FILE (lcFileName) NOWAIT
	ENDIF
	RETURN
ENDIF
this.lViewSourceMode=.T.
IF tlNoEdit
	MODIFY FILE (lcFileName) NOEDIT
ELSE
	MODIFY FILE (lcFileName)
	IF LASTKEY()#27
		this.lHistoryEnabled=.F.
		this.Navigate(lcFileName)
	ENDIF
ENDIF
this.lViewSourceMode=.F.

ENDPROC
PROCEDURE beforeretrieval
PARAMETERS url, flags, targetframename, postdata, headers, cancel
LOCAL lcURL,lcLowerURL,lcNewURL,lnAtPos,lnLastSelect

IF TYPE("this.oHost")#"O" OR ISNULL(this.oHost)
	RETURN .F.
ENDIF
SET DATASESSION TO (this.oHost.DataSessionID)
lcURL=ALLTRIM(url)
this.uResult=.T.
IF this.lRelease OR NOT this.Enabled
	cancel=.T.
	RETURN .F.
ENDIF
lnAtPos=AT("?",lcURL)
IF lnAtPos>0
	lcURL=ALLTRIM(LEFT(lcURL,lnAtPos-1))
ENDIF
this.cLastURL=this.cURL
lcLowerURL=LOWER(lcURL)
IF LOWER(LEFT(lcLowerURL,LEN(this.cVFPSProtocol)))==LOWER(this.cVFPSProtocol)
	cancel=.T.
	this.VFPS(lcURL)
	RETURN .F.
ENDIF
lnLastSelect=SELECT()
IF NOT this.lVFPScript OR NOT this.OpenVFPScript()
	IF USED("vfpscript")
		USE IN vfpscript
	ENDIF
	SELECT (lnLastSelect)
	RETURN
ENDIF
this.Enabled=.F.
SELECT vfpscript
SCAN ALL FOR BeforeNav
	IF NOT EMPTY(URLMatch) AND NOT this.WildCardMatch(ALLTRIM(MLINE(URLMatch,1)),lcURL)
		LOOP
	ENDIF
	IF NOT EMPTY(URLEval) AND (TYPE(URLEval)#"L" OR NOT EVALUATE(URLEval))
		LOOP
	ENDIF
	IF URLCancel
		cancel=.T.
	ENDIF
	IF NOT EMPTY(Script)
		this.RunScript(ALLTRIM(Name))
	ENDIF
	IF NOT USED("vfpscript")
		EXIT
	ENDIF
	SELECT vfpscript
	IF NOT EMPTY(URLJump)
		lcNewURL=ALLTRIM(URLJump)
		this.cURL=LOWER(this.ValidURL(lcNewURL))
		cancel=.T.
		this.Navigate(lcNewURL,@flags,@targetframename,@postdata,@headers)
	ENDIF
	IF NOT Continue
		EXIT
	ENDIF
ENDSCAN
SELECT (lnLastSelect)
this.Enabled=.T.

ENDPROC
PROCEDURE trimext
LPARAMETERS tcFileName,tlPlatformType
LOCAL lcFileName,lnAtPos,lnAtPos2

lcFileName=tcFileName
lnAtPos=RAT(".",lcFileName)
IF lnAtPos>0
	lnAtPos2=RAT(":",lcFileName)
	IF lnAtPos>lnAtPos2
		lcFileName=LEFT(lcFileName,lnAtPos-1)
	ENDIF
ENDIF
IF tlPlatformType
	lcFileName=IIF(_dos OR _unix,UPPER(lcFileName),LOWER(lcFileName))
ENDIF
RETURN ALLTRIM(lcFileName)

ENDPROC
PROCEDURE trimpath
LPARAMETERS tcFileName,tlTrimExt,tlPlatformType
LOCAL lcFileName,lnAtPos

IF EMPTY(tcFileName)
	RETURN ""
ENDIF
lcFileName=tcFileName
lnAtPos=AT(":",lcFileName)
IF lnAtPos>0
	lcFileName=SUBSTR(lcFileName,lnAtPos+1)
ENDIF
IF tlTrimExt
	lcFileName=this.TrimExt(lcFileName)
ENDIF
IF tlPlatformType
	lcFileName=IIF(_dos OR _unix,UPPER(lcFileName),LOWER(lcFileName))
ENDIF
lcFileName=ALLTRIM(SUBSTR(lcFileName,AT("\",lcFileName,;
		MAX(OCCURS("\",lcFileName),1))+1))
DO WHILE LEFT(lcFileName,1)=="."
	lcFileName=ALLTRIM(SUBSTR(lcFileName,2))
ENDDO
DO WHILE RIGHT(lcFileName,1)=="."
	lcFileName=ALLTRIM(LEFT(lcFileName,LEN(lcFileName)-1))
ENDDO
RETURN lcFileName

ENDPROC
PROCEDURE trimfile
LPARAMETERS tcFileName,lPlatType
LOCAL lcFileName,lnAtPos

lnAtPos=RAT("\",tcFileName)
lcFileName=ALLTRIM(IIF(lnAtPos=0,tcFileName,LEFT(tcFileName,lnAtPos)))
IF lPlatType
	lcFileName=IIF(_dos OR _unix,UPPER(lcFileName),LOWER(lcFileName))
ENDIF
RETURN lcFileName

ENDPROC
PROCEDURE erasetempfile
IF NOT EMPTY(this.cTempFileName)
	ERASE (this.cTempFileName)
	this.cTempFileName=""
ENDIF

ENDPROC
PROCEDURE getsourcefile
IF this.lRelease
	RETURN .F.
ENDIF
IF EMPTY(this.cSourceFile)
	this.RefreshSource
ENDIF
RETURN this.cSourceFile

ENDPROC
PROCEDURE getsourcehtml
IF this.lRelease
	RETURN .F.
ENDIF
IF EMPTY(this.cSourceHTML)
	this.RefreshSource
ENDIF
RETURN this.cSourceHTML

ENDPROC
PROCEDURE parsesource
*** OLE Control Event ***
PARAMETERS url, flags, targetframename, postdata, headers, cancel
PRIVATE oTHIS
LOCAL lcURL,lcSource,lcNewURL,lcFileName,lnAtPos,llHTMLFile,llBusy
EXTERNAL ARRAY VFPScrpt

IF this.lRelease OR NOT this.lParseSource OR TYPE("url")#"C" OR EMPTY(url)
	RETURN .F.
ENDIF
lcURL=ALLTRIM(url)
lcFileName=STRTRAN(lcURL,"/","\")
lnAtPos=RAT("\",lcFileName)
IF lnAtPos>0 AND LOWER(SUBSTR(lcFileName,lnAtPos+1, ;
		LEN(this.cTempFilePrefix)))==this.cTempFilePrefix
	RETURN .F.
ENDIF
this.cFileName=""
this.cFilePath=""
this.cSourceURL=""
this.cSourceFileName=""
llHTMLFile=.F.
lnAtPos=RAT(".",lcURL)
llHTMLFile=(lnAtPos>0 AND INLIST(LOWER(ALLTRIM(SUBSTR(lcURL,lnAtPos+1))), ;
		"htm","html","asp"))
IF NOT llHTMLFile OR LOWER(lcFileName)==LOWER(this.cTempFileName) OR ;
		LOWER(ALLTRIM(lcFileName))==LOWER(ALLTRIM(this.cBlankHTMLFile))
	this.cFileName=lcFileName
	this.cFilePath=this.TrimFile(this.cFileName)
	RETURN .F.
ENDIF
lnAtPos=RAT(":",lcFileName)
IF lnAtPos#2
	RETURN .F.
ENDIF
IF lnAtPos>2
	lcFileName=ALLTRIM(SUBSTR(lcFileName,lnAtPos-1))
ENDIF
IF EMPTY(SYS(2000,lcFileName))
	RETURN .F.
ENDIF
IF this.lDebug
	ACTIVATE SCREEN
	? PROGRAM()
	? "URL: "+lcURL
ENDIF
llBusy=this.lBusy
this.SetBusyState(.T.)
IF NOT ":"$lcURL OR AT(":",lcURL)=2
	lcURL="file://"+STRTRAN(STRTRAN(STRTRAN(lcURL,"\","/"),"///","//"),"//","/")
ENDIF
lcNewURL=""
oTHIS=this
this.cSourceURL=lcURL
this.cFileName=LOWER(lcFileName)
this.cFilePath=this.TrimFile(this.cFileName)
this.cSourceFileName=this.cFileName
this.cSourceFilePath=this.TrimFile(this.cFileName)
IF VFPScrpt(this)
	lcNewURL=this.cTempFileName
ELSE
	this.cSourceURL=""
	this.cSourceFileName=""
	this.cSourceFilePath=""
ENDIF
oTHIS=.NULL.
this.SetBusyState(llBusy)
IF TYPE("this.oHost.lRelease")=="L" AND this.oHost.lRelease
	this.Visible=.F.
	RETURN .F.
ENDIF
this.cURL=LOWER(this.ValidURL(lcURL))
this.cNewURL=lcNewURL

ENDPROC
PROCEDURE runcode
LPARAMETERS tcCode
PRIVATE oTHIS
LOCAL lnDataSessionID,lnLastSelect,llBusy

IF this.lRelease OR EMPTY(tcCode) OR TYPE("tcCode")#"C" OR ISNULL(tcCode)
	RETURN .F.
ENDIF
IF this.lDebug
	ACTIVATE SCREEN
	? PROGRAM()
ENDIF
llBusy=this.lBusy
this.SetBusyState(.T.)
lnLastSelect=SELECT()
lnDataSessionID=this.oHost.DataSessionID
SET DATASESSION TO (lnDataSessionID)
ACTIVATE SCREEN
oTHIS=this
this.lRunCodeMode=.T.
DO RunCode WITH (tcCode)
this.lRunCodeMode=.F.
oTHIS=.NULL.
SET DATASESSION TO (lnDataSessionID)
SELECT (lnLastSelect)
this.SetBusyState(llBusy)

ENDPROC
PROCEDURE runscript
LPARAMETERS tcScript,tcAlias
LOCAL llResult

IF this.lRelease OR EMPTY(tcScript)
	RETURN .F.
ENDIF
IF this.lDebug
	ACTIVATE SCREEN
	? PROGRAM()
	? "Script: "+tcScript
ENDIF
llResult=this.VFPScript(tcScript,tcAlias,0)
IF this.lDebug AND NOT llResult
	ACTIVATE SCREEN
	? "Script: "+tcScript+"  (not found)"
ENDIF
RETURN llResult

ENDPROC
PROCEDURE validurl
LPARAMETERS tcURL
LOCAL lcURL

IF EMPTY(tcURL)
	RETURN ""
ENDIF
lcURL=ALLTRIM(tcURL)
IF NOT ":"$lcURL AND NOT LOWER(LEFT(lcURL,4))=="http" AND ;
		NOT LOWER(LEFT(lcURL,5))=="file:" AND (LOWER(LEFT(lcURL,4))=="www." OR ;
		INLIST(LOWER(RIGHT(lcURL,4)),".com",".gov",".net") OR ;
		(NOT SUBSTR(lcURL,2,1)==":" AND NOT LEFT(lcURL,2)=="\\"))
	lcURL="http://"+lcURL
ENDIF
IF SUBSTR(PADR(lcURL,5),5,1)==":"
	lcURL=STRTRAN(STRTRAN(lcURl,"\","/"),"///","//")
ELSE
	IF NOT ":"$lcURL OR AT(":",lcURL)=2
		lcURL="file://"+STRTRAN(STRTRAN(STRTRAN(lcURL,"\","/"),"///","//"),"//","/")
	ENDIF
ENDIF
RETURN lcURL

ENDPROC
PROCEDURE wildcardmatch
LPARAMETERS tcMatchExpList,tcExpressionSearched,tlMatchAsIs
LOCAL lcMatchExpList,lcExpressionSearched,llMatchAsIs,lcMatchExpList2
LOCAL lnMatchLen,lnExpressionLen,lnMatchCount,lnCount,lnCount2,lnSpaceCount
LOCAL lcMatchExp,lcMatchType,lnMatchType,lnAtPos,lnAtPos2
LOCAL llMatch,llMatch2

IF EMPTY(tcExpressionSearched)
	IF EMPTY(tcMatchExpList) OR ALLTRIM(tcMatchExpList)=="*"
		RETURN
	ENDIF
	RETURN .F.
ENDIF
lcMatchExpList=LOWER(ALLTRIM(STRTRAN(tcMatchExpList,TAB," ")))
lcExpressionSearched=LOWER(ALLTRIM(STRTRAN(tcExpressionSearched,TAB," ")))
lnExpressionLen=LEN(lcExpressionSearched)
IF lcExpressionSearched==lcMatchExpList
	RETURN
ENDIF
llMatchAsIs=tlMatchAsIs
IF LEFT(lcMatchExpList,1)==["] AND RIGHT(lcMatchExpList,1)==["]
	llMatchAsIs=.T.
	lcMatchExpList=ALLTRIM(SUBSTR(lcMatchExpList,2,LEN(lcMatchExpList)-2))
ENDIF
IF NOT llMatchAsIs AND " "$lcMatchExpList
	llMatch=.F.
	lnSpaceCount=OCCURS(" ",lcMatchExpList)
	lcMatchExpList2=lcMatchExpList
	lnCount=0
	DO WHILE .T.
		lnAtPos=AT(" ",lcMatchExpList2)
		IF lnAtPos=0
			lcMatchExp=ALLTRIM(lcMatchExpList2)
			lcMatchExpList2=""
		ELSE
			lnAtPos2=AT(["],lcMatchExpList2)
			IF lnAtPos2<lnAtPos
				lnAtPos2=AT(["],lcMatchExpList2,2)
				IF lnAtPos2>lnAtPos
					lnAtPos=lnAtPos2
				ENDIF
			ENDIF
			lcMatchExp=ALLTRIM(LEFT(lcMatchExpList2,lnAtPos))
			lcMatchExpList2=ALLTRIM(SUBSTR(lcMatchExpList2,lnAtPos+1))
		ENDIF
		IF EMPTY(lcMatchExp)
			EXIT
		ENDIF
		lcMatchType=LEFT(lcMatchExp,1)
		DO CASE
			CASE lcMatchType=="+"
				lnMatchType=1
			CASE lcMatchType=="-"
				lnMatchType=-1
			OTHERWISE
				lnMatchType=0
		ENDCASE
		IF lnMatchType#0
			lcMatchExp=ALLTRIM(SUBSTR(lcMatchExp,2))
		ENDIF
		llMatch2=this.WildCardMatch(lcMatchExp,lcExpressionSearched,.T.)
		IF (lnMatchType=1 AND NOT llMatch2) OR (lnMatchType=-1 AND llMatch2)
			RETURN .F.
		ENDIF
		llMatch=(llMatch OR llMatch2)
		IF lnAtPos=0
			EXIT
		ENDIF
	ENDDO
	RETURN llMatch
ELSE
	IF LEFT(lcMatchExpList,1)=="~"
		RETURN (DIFFERENCE(ALLTRIM(SUBSTR(lcMatchExpList,2)),lcExpressionSearched)>=3)
	ENDIF
ENDIF
lnMatchCount=OCCURS(",",lcMatchExpList)+1
IF lnMatchCount>1
	lcMatchExpList=","+ALLTRIM(lcMatchExpList)+","
ENDIF
FOR lnCount = 1 TO lnMatchCount
	IF lnMatchCount=1
		lcMatchExp=LOWER(ALLTRIM(lcMatchExpList))
		lnMatchLen=LEN(lcMatchExp)
	ELSE
		lnAtPos=AT(",",lcMatchExpList,lnCount)
		lnMatchLen=AT(",",lcMatchExpList,lnCount+1)-lnAtPos-1
		lcMatchExp=LOWER(ALLTRIM(SUBSTR(lcMatchExpList,lnAtPos+1,lnMatchLen)))
	ENDIF
	FOR lnCount2 = 1 TO OCCURS("?",lcMatchExp)
		lnAtPos=AT("?",lcMatchExp)
		IF lnAtPos>lnExpressionLen
			IF (lnAtPos-1)=lnExpressionLen
				lcExpressionSearched=lcExpressionSearched+"?"
			ENDIF
			EXIT
		ENDIF
		lcMatchExp=STUFF(lcMatchExp,lnAtPos,1,SUBSTR(lcExpressionSearched,lnAtPos,1))
	ENDFOR
	IF EMPTY(lcMatchExp) OR lcExpressionSearched==lcMatchExp OR ;
			lcMatchExp=="*" OR lcMatchExp=="?" OR lcMatchExp=="%%"
		RETURN
	ENDIF
	IF LEFT(lcMatchExp,1)=="*"
		RETURN (SUBSTR(lcMatchExp,2)==RIGHT(lcExpressionSearched,LEN(lcMatchExp)-1))
	ENDIF
	IF LEFT(lcMatchExp,1)=="%" AND RIGHT(lcMatchExp,1)=="%" AND ;
			SUBSTR(lcMatchExp,2,lnMatchLen-2)$lcExpressionSearched
		RETURN
	ENDIF
	lnAtPos=AT("*",lcMatchExp)
	IF lnAtPos>0 AND (lnAtPos-1)<=lnExpressionLen AND ;
			LEFT(lcExpressionSearched,lnAtPos-1)==LEFT(lcMatchExp,lnAtPos-1)
		RETURN
	ENDIF
ENDFOR
RETURN .F.

ENDPROC
PROCEDURE refreshmode
LOCAL llBusy

IF this.lRelease OR EMPTY(this.cSourceFileName)
	this.lRefreshMode=.F.
	RETURN .F.
ENDIF
llBusy=this.lBusy
this.SetBusyState(.T.)
this.lRefreshMode=.T.
this.lHistoryEnabled=.F.
this.Navigate(this.cSourceFileName)
this.SetBusyState(llBusy)

ENDPROC
PROCEDURE openvfpscript
LOCAL lcFileName,lnLastSelect,lcLastSetSafety

SET DATASESSION TO (this.oHost.DataSessionID)
IF USED("vfpscript")
	RETURN
ENDIF
IF this.lRelease OR NOT this.lVFPScript OR EMPTY(this.cVFPScript)
	RETURN .F.
ENDIF
lcLastSetSafety=SET("SAFETY")
SET SAFETY OFF
lnLastSelect=SELECT()
lcFileName=this.cVFPScript
IF NOT EMPTY(SYS(2000,lcFileName))
	SELECT 0
	USE (lcFileName) SHARED ALIAS vfpscript AGAIN
	IF NOT USED()
		SELECT (lnLastSelect)
		IF lcLastSetSafety=="ON"
			SET SAFETY ON
		ELSE
			SET SAFETY OFF
		ENDIF
		RETURN .F.
	ENDIF
	IF FCOUNT()<9
		USE
		ERASE (lcFileName)
	ENDIF
ENDIF
IF EMPTY(SYS(2000,lcFileName)) OR TYPE("BeforeNav")#"L"
	IF USED("vfpscript")
		USE IN vfpscript
	ENDIF
	ERASE (lcFileName)
	SELECT 0
	CREATE TABLE (lcFileName) ;
			(IndexValue C(10), Name C(24), HTML M, Script M, BeforeNav L, URLMatch M, ;
			URLEval M, URLJump M, URLCancel L, ;
			Continue L, Comment M, LastAccess T, ExecCount N(8))
	USE (lcFileName) SHARED ALIAS vfpscript AGAIN
ENDIF
IF TYPE("LastAccess")#"T" OR TYPE("ExecCount")#"N"
	IF USED("vfpscript")
		USE IN vfpscript
	ENDIF
	SELECT 0
	USE (lcFileName) EXCLUSIVE ALIAS vfpscript
	IF NOT USED()
		SELECT (lnLastSelect)
		IF lcLastSetSafety=="ON"
			SET SAFETY ON
		ELSE
			SET SAFETY OFF
		ENDIF
		RETURN .F.
	ENDIF
	IF TYPE("LastAccess")#"T"
		ALTER TABLE (lcFileName) ADD COLUMN LastAccess T NULL
	ENDIF
	IF TYPE("ExecCount")#"N"
		ALTER TABLE (lcFileName) ADD COLUMN ExecCount N(8) NULL
	ENDIF
	USE (lcFileName) SHARED ALIAS vfpscript AGAIN
ENDIF
IF NOT USED("vfpscript")
	SELECT (lnLastSelect)
	IF lcLastSetSafety=="ON"
		SET SAFETY ON
	ELSE
		SET SAFETY OFF
	ENDIF
	RETURN .F.
ENDIF
SELECT vfpscript
IF KEY(1)=="INDEXVALUE"
	SET ORDER TO IndexValue
ELSE
	INDEX ON IndexValue TAG IndexValue ASCENDING ADDITIVE
ENDIF
SET FILTER TO NOT DELETED()
LOCATE
SELECT 0

ENDPROC
PROCEDURE refreshdeactivate
IF this.lRelease OR NOT this.Visible
	RETURN
ENDIF
IF this.lRefreshDeactivate
	this.Visible=.F.
	this.Visible=.T.
	RETURN
ENDIF

ENDPROC
PROCEDURE releasehost
IF this.lRelease
	RETURN .F.
ENDIF
IF TYPE("this.oHost.tmrHost")#"O"
	RETURN .F.
ENDIF
this.oHost.tmrHost.RunCode("oTHIS.oHost.Release")

ENDPROC
PROCEDURE vfps
LPARAMETERS tcCommand
LOCAL lcCommand,lcParam1,lcParameter,lcAlias,lcVFPSProtocol,lnVFPSProtocolLen
LOCAL lcVariable,lcCode,lnCount,lnAtPos,llEnabled,luResult,llBusy

IF this.lRelease OR EMPTY(tcCommand) OR TYPE("this.oHost")#"O" OR ISNULL(this.oHost)
	RETURN .F.
ENDIF
llBusy=this.lBusy
this.SetBusyState(.T.)
llEnabled=this.Enabled
IF this.oHost.Visible
	this.Enabled=.F.
ENDIF
lcCommand=LOWER(ALLTRIM(tcCommand))
lcVFPSProtocol=LOWER(this.cVFPSProtocol)
lnVFPSProtocolLen=LEN(lcVFPSProtocol)
IF LEFT(lcCommand,lnVFPSProtocolLen)==lcVFPSProtocol
	lcCommand=ALLTRIM(SUBSTR(lcCommand,lnVFPSProtocolLen+1))
ENDIF
DO WHILE LEFT(lcCommand,1)=="/"
	lcCommand=ALLTRIM(SUBSTR(lcCommand,2))
ENDDO
DO WHILE RIGHT(lcCommand,1)=="/"
	lcCommand=ALLTRIM(LEFT(lcCommand,LEN(lcCommand)-1))
ENDDO
lnAtPos=AT("?",lcCommand)
IF lnAtPos>0
	this.SetParam(lcCommand)
	lcCommand=ALLTRIM(LEFT(lcCommand,lnAtPos-1))
ENDIF
lcCommand=STRTRAN(lcCommand,"%20"," ")
FOR lnCount = 1 TO this.nParamCount
	lcParameter=this.aParam[lnCount]
	lnAtPos=AT("=",lcParameter)
	IF lnAtPos=0
		lcVariable=""
	ELSE
		lcVariable=ALLTRIM(LEFT(lcParameter,lnAtPos-1))
		lcParameter=ALLTRIM(SUBSTR(lcParameter,lnAtPos+1))
	ENDIF
	IF LEFT(lcParameter,1)=="(" AND RIGHT(lcParameter,1)==")"
		IF STRTRAN(STRTRAN(lcParameter,CHR(9),"")," ","")=="()"
			this.aParam[lnCount]=""
		ELSE
			this.aParam[lnCount]=EVALUATE(lcParameter)
		ENDIF
	ELSE
		this.aParam[lnCount]=lcParameter
	ENDIF
	IF NOT EMPTY(lcVariable) AND NOT LEFT(lcVariable,1)==";"
		lcParameter=this.aParam[lnCount]
		IF NOT "."$lcVariable
			PRIVATE (lcVariable)
		ENDIF
		lcCode=lcVariable+"=lcParameter"
		&lcCode
	ENDIF
ENDFOR
lcParam1=this.aParam[1]
IF this.lDebug
	ACTIVATE SCREEN
	? PROGRAM()
	? "Command: "+lcCommand+"  Param: "+this.cParam
ENDIF
DO CASE
	CASE lcCommand=="refresh"
		luResult=this.Refresh2()
	CASE lcCommand=="releasehost"
		luResult=this.ReleaseHost()
	CASE lcCommand=="runaction"
		luResult=this.RunAction(lcParam1)
	CASE lcCommand=="runmethod"
		lcParam1=this.cParam
		IF NOT RIGHT(lcParam1,1)==")"
			lcParam1=lcParam1+"()"
		ENDIF
		luResult=this.&lcParam1
	CASE lcCommand=="runcode"
		luResult=this.RunCode(lcParam1)
	CASE lcCommand=="runscript"
		lcAlias=""
		lnAtPos=AT("::",lcParam1)
		IF lnAtPos>0
			lcAlias=ALLTRIM(LEFT(lcParam1,lnAtPos-1))
			lcParam1=ALLTRIM(SUBSTR(lcParam1,lnAtPos+2))
		ENDIF
		luResult=this.RunScript(lcParam1,lcAlias)
	CASE lcCommand=="viewsource"
		luResult=this.ViewSource()
	OTHERWISE
		luResult=.F.
ENDCASE
this.Enabled=llEnabled
this.SetBusyState(llBusy)
RETURN luResult

ENDPROC
PROCEDURE runaction
LPARAMETERS tcMethod
LOCAL lcMethod,llResult,llBusy

this.uResult=.T.
IF this.lRelease OR EMPTY(tcMethod) OR TYPE("this.oAction")#"O" OR ISNULL(this.oAction)
	RETURN .F.
ENDIF
lcMethod=LOWER(ALLTRIM(tcMethod))
IF EMPTY(lcMethod) OR NOT PEMSTATUS(this.oAction,lcMethod,5) OR ;
		PEMSTATUS(this.oAction,lcMethod,2) OR ;
		NOT PEMSTATUS(this.oAction,lcMethod,3)=="Method"
	RETURN .F.
ENDIF
llBusy=this.lBusy
this.SetBusyState(.T.)
llResult=EVALUATE("this.oAction."+lcMethod+"()")
llBusy=this.lBusy
this.SetBusyState(llBusy)
RETURN llResult

ENDPROC
PROCEDURE filetostring
LPARAMETERS tcFileName
LOCAL lcFileName,lnLastSelect,lcAlias,lcText

IF PARAMETERS()#1  OR TYPE("tcFileName")#"C" OR EMPTY(tcFileName)
	RETURN ""
ENDIF
lcFileName=ALLTRIM(tcFileName)
IF NOT "."$lcFileName
	lcFileName=lcFileName+".txt"
ENDIF
lnLastSelect=SELECT()
lcAlias=LOWER(SYS(2015))
CREATE CURSOR (lcAlias) (Text M)
APPEND BLANK
APPEND MEMO Text FROM (tcFileName) OVERWRITE
lcText=Text
USE IN (lcAlias)
SELECT (lnLastSelect)
RETURN lcText

ENDPROC
PROCEDURE stringtofile
LPARAMETERS tcText,tcFileName
LOCAL lcFileName,lnLastSelect,lcAlias

IF PARAMETERS()#2 OR TYPE("tcText")#"C" OR TYPE("tcFileName")#"C" OR EMPTY(tcFileName)
	RETURN .F.
ENDIF
lcFileName=ALLTRIM(tcFileName)
IF NOT "."$lcFileName
	lcFileName=lcFileName+".txt"
ENDIF
lnLastSelect=SELECT()
lcAlias=LOWER(SYS(2015))
CREATE CURSOR (lcAlias) (Text M)
INSERT INTO (lcAlias) (Text) VALUES (tcText)
COPY MEMO Text TO (tcFileName)
USE IN (lcAlias)
SELECT (lnLastSelect)

ENDPROC
PROCEDURE setparam
LPARAMETERS tcParam
LOCAL lcParam,lcParameter,lcParamDelimiter,lnParamTotal,lnCount,lnAtPos

lcParam=IIF(EMPTY(tcParam),"",ALLTRIM(tcParam))
lnAtPos=AT("?",lcParam)
IF lnAtPos=0
	lcParam=""
ELSE
	lcParam=ALLTRIM(SUBSTR(lcParam,lnAtPos+1))
ENDIF
this.nParamCount=0
DIMENSION this.aParam[128]
this.aParam=.F.
IF EMPTY(lcParam)
	this.cParam=""
	RETURN
ENDIF
IF RIGHT(lcParam,1)=="/"
	lcParam=ALLTRIM(LEFT(lcParam,LEN(lcParam)-1))
ENDIF
lcParam=STRTRAN(lcParam,"%20"," ")
this.cParam=lcParam
lcParamDelimiter=this.cParamDelimiter
lnParamTotal=MIN(OCCURS(lcParamDelimiter,lcParam)+1,128)
FOR lnCount = 1 TO lnParamTotal
	this.nParamCount=this.nParamCount+1
	lnAtPos=AT(lcParamDelimiter,lcParam)
	IF lnAtPos=0
		lcParameter=ALLTRIM(lcParam)
	ELSE
		lcParameter=ALLTRIM(LEFT(lcParam,lnAtPos-1))
		lcParam=ALLTRIM(SUBSTR(lcParam,lnAtPos+1))
	ENDIF
	this.aParam[lnCount]=lcParameter
ENDFOR

ENDPROC
PROCEDURE gethtml
LPARAMETERS tcName,tcAlias
LOCAL lcHTML,llResult

IF this.lDebug
	ACTIVATE SCREEN
	? PROGRAM()
	? "Name: "+tcName
ENDIF
lcHTML=this.VFPScript(tcName,tcAlias,1)
llResult=(TYPE("lcHTML")=="C")
IF NOT llResult
	lcHTML=""
ENDIF
IF this.lDebug AND NOT llResult
	ACTIVATE SCREEN
	? "Name: "+tcName+"  (not found)"
ENDIF
RETURN lcHTML

ENDPROC
PROCEDURE vfpscript
LPARAMETERS tcName,tcAlias,tnCode
LOCAL lcName,lcAlias,lnLastSelect,lnRecNo,ltDateTime,llMatch
LOCAL llMatch,lcScriptCode,lcHTML

IF TYPE("this.oHost")#"O" OR ISNULL(this.oHost)
	RETURN .F.
ENDIF
SET DATASESSION TO (this.oHost.DataSessionID)
this.uResult=.T.
IF this.lRelease OR EMPTY(tcName) OR TYPE("tnCode")#"N"
	RETURN .F.
ENDIF
ltDateTime=DATETIME()
lcName=LOWER(ALLTRIM(tcName))
lcAlias=IIF(EMPTY(tcAlias),"vfpscript",LOWER(ALLTRIM(tcAlias)))
lnLastSelect=SELECT()
llMatch=.F.
lcScriptCode=""
lcHTML=""
FOR lnCount = 1 TO this.nScriptCount
	IF NOT LOWER(this.aScripts[lnCount,1])==lcName
		LOOP
	ENDIF
	llMatch=.T.
	lcScriptCode=this.aScripts[lnCount,2]
	lcHTML=lcScriptCode
ENDFOR
IF NOT llMatch
	IF EMPTY(tcAlias) AND NOT this.OpenVFPScript()
		SELECT (lnLastSelect)
		RETURN .F.
	ENDIF
	IF NOT USED(lcAlias)
		SELECT (lnLastSelect)
		RETURN .F.
	ENDIF
	SELECT (lcAlias)
	lnRecNo=IIF(EOF() OR RECNO()>RECCOUNT(),0,RECNO())
	IF NOT LOWER(ALLTRIM(Name))==lcName
		LOCATE FOR LOWER(ALLTRIM(Name))==lcName
	ENDIF
	llMatch=(NOT EMPTY(Name))
	IF llMatch
		IF TYPE("LastAccess")=="T"
			REPLACE LastAccess WITH ltDateTime, ExecCount WITH ExecCount+1
		ENDIF
		lcScriptCode=Script
		lcHTML=HTML
	ENDIF
	IF lnRecNo=0
		GO BOTTOM
	ELSE
		GO lnRecNo
	ENDIF
ENDIF
SELECT (lnLastSelect)
DO CASE
	CASE tnCode=0
		IF this.lDesign
			this.EditScript(lcName)
			RETURN
		ENDIF
		RETURN this.RunCode(lcScriptCode)
	CASE tnCode=1
		RETURN lcHTML
ENDCASE
RETURN .F.

ENDPROC
PROCEDURE msgbox
LPARAMETERS tcMessage,tnType,tcTitle
LOCAL lcMessage,lnType,lcTitle,lnResult

lcMessage=IIF(TYPE("tcMessage")#"C","",tcMessage)
lnType=IIF(TYPE("tnType")#"N",48,tnType)
lcTitle=IIF(TYPE("tcTitle")#"C",thisform.Caption,tcTitle)
ACTIVATE SCREEN
lnResult=MESSAGEBOX(lcMessage,lnType,lcTitle)
RETURN lnResult

ENDPROC
PROCEDURE editstring
LPARAMETERS tcString,tcTitle,tlNoEdit
LOCAL lcString,lcTitle,lcTempFileName

lcString=IIF(TYPE("tcString")=="C",tcString,"")
lcTitle=IIF(TYPE("tcTitle")=="C",ALLTRIM(tcTitle),LOWER(SYS(2015)))
lcTempFileName=SYS(2023)+"\"+"~_  "+lcTitle+".htm"
IF NOT this.StringToFile(lcString,lcTempFileName)
	RETURN .F.
ENDIF
ACTIVATE SCREEN
IF tlNoEdit
	MODIFY FILE (lcTempFileName) NOEDIT RANGE 1,1
ELSE
	MODIFY FILE (lcTempFileName) RANGE 1,1
	lcString=this.FileToString(lcTempFileName)
ENDIF
ERASE (lcTempFileName)
RETURN lcString

ENDPROC
PROCEDURE editscript
LPARAMETERS tcScriptName
LOCAL lcScriptName,lcOldScriptCode,lcNewScriptCode,lnScriptNum,lcScriptNameSearch
LOCAL lcFileName,lcOldHTML,lcNewHTML,llResult,llMatch,llNoEdit,lcCR_LF

#DEFINE SCRIPT_LOC					"Script"
#DEFINE NOT_FOUND_IN_FILE_LOC		"not found in file"
#DEFINE IN_FILE_LOC					"in file"
#DEFINE UPDATED_LOC					"updated"
#DEFINE	UNABLE_TO_UPDATE_SCRIPT_LOC	"Unable to update script"

IF EMPTY(tcScriptName)
	RETURN .F.
ENDIF
lcCR_LF=CHR(13)+CHR(10)
lcScriptName=ALLTRIM(tcScriptName)
lcFileName=this.cFileName
llMatch=.F.
FOR lnScriptNum = 1 TO this.nScriptCount
	IF LOWER(lcScriptName)==LOWER(this.aScripts[lnScriptNum,1])
		lcScriptName=this.aScripts[lnScriptNum,1]
		lcOldScriptCode=this.aScripts[lnScriptNum,3]
		llMatch=.T.
		EXIT
	ENDIF
ENDFOR
IF NOT llMatch
	this.MsgBox(SCRIPT_LOC+[ (]+lcScriptName+[) ]+NOT_FOUND_IN_FILE_LOC+[ "]+lcFileName+[".],16)
	RETURN .F.
ENDIF
lcScriptNameSearch=" "+lcScriptName+lcCR_LF
lcOldHTML=this.FileToString(lcFileName)
llNoEdit=(NOT lcScriptNameSearch$lcOldHTML)
lcNewScriptCode=this.EditString(lcOldScriptCode,lcScriptName,llNoEdit)
IF llNoEdit OR lcOldScriptCode==lcNewScriptCode
	RETURN
ENDIF
IF NOT RIGHT(lcNewScriptCode,2)==lcCR_LF
	lcNewScriptCode=lcNewScriptCode+lcCR_LF
ENDIF
this.aScripts[lnScriptNum,3]=lcNewScriptCode
lcNewHTML=STRTRAN(lcOldHTML,lcScriptNameSearch+lcOldScriptCode, ;
		lcScriptNameSearch+lcNewScriptCode)
IF lcOldHTML==lcNewHTML
	llResult=.F.
ELSE
	llResult=this.StringToFile(lcNewHTML,lcFileName)
ENDIF
IF NOT llResult
	this.MsgBox(UNABLE_TO_UPDATE_SCRIPT_LOC+[ (]+lcScriptName+[) ]+IN_FILE_LOC+[ "]+lcFileName+[".],16)
	RETURN .F.
ENDIF
this.WaitWindow(SCRIPT_LOC+[ (]+lcScriptName+[) ]+IN_FILE_LOC+[ "]+lcFileName+[" ]+UPDATED_LOC+[.])

ENDPROC
PROCEDURE opentable
LPARAMETERS tcFileName,tcAlias,tlExclusive,tcFilter
LOCAL lcFileName,lcAlias,lnLastSelect

this.nRecNo=0
this.cAlias=""
this.cDBF=""
this.cDBFPath=""
IF EMPTY(tcFileName)
	RETURN .F.
ENDIF
lcFileName=ALLTRIM(tcFileName)
IF NOT "."$lcFileName
	lcFileName=lcFileName+".dbf"
ENDIF
IF NOT FILE(lcFileName)
	RETURN .F.
ENDIF
SET DATASESSION TO (this.nDataSessionID)
lcAlias=STRTRAN(IIF(EMPTY(tcAlias),this.TrimPath(lcFileName,.T.),ALLTRIM(tcAlias))," ","_")
this.cAlias=lcAlias
IF USED(lcAlias)
	this.nRecNo=RECNO(lcAlias)
	this.cDBF=LOWER(DBF(lcAlias))
	this.cDBFPath=this.TrimFile(this.cDBF)
	SET DATASESSION TO (this.oHost.DataSessionID)
	RETURN
ENDIF
lnLastSelect=SELECT()
SELECT 0
IF tlExclusive
	USE (lcFileName) EXCLUSIVE ALIAS (lcAlias)
ELSE
	USE (lcFileName) AGAIN SHARED ALIAS (lcAlias)
ENDIF
IF NOT USED(lcAlias)
	this.nRecNo=0
	this.cAlias=""
	this.cDBF=""
	this.cDBFPath=""
	SELECT (lnLastSelect)
	RETURN .F.
ENDIF
this.cDBF=LOWER(DBF(lcAlias))
this.cDBFPath=this.TrimFile(this.cDBF)
IF NOT EMPTY(tcFilter)
	SET FILTER TO &tcFilter
ENDIF
LOCATE
SELECT (lnLastSelect)
SET DATASESSION TO (this.oHost.DataSessionID)

ENDPROC
PROCEDURE browsetable
LPARAMETERS tcAlias,tcClauses
LOCAL lcAlias,lnLastSelect,lcCommand

lcAlias=IIF(EMPTY(tcAlias),this.cAlias,ALLTRIM(tcAlias))
IF EMPTY(lcAlias) OR NOT USED(lcAlias)
	RETURN .F.
ENDIF
lnLastSelect=SELECT()
SELECT (lcAlias)
IF BETWEEN(this.nRecNo,1,RECCOUNT())
	GO this.nRecNo
ELSE
	LOCATE
ENDIF
ACTIVATE SCREEN
lcCommand="BROWSE"
IF NOT EMPTY(tcClauses)
	lcCommand=lcCommand+" "+tcClauses
ENDIF
&lcCommand
SELECT (lnLastSelect)

ENDPROC
PROCEDURE waitwindow
LPARAMETERS tcText,tlWait
LOCAL lcText

WAIT CLEAR
IF EMPTY(tcText)
	RETURN
ENDIF
lcText=LEFT(tcText,254)
DO CASE
	CASE TYPE("tlWait")=="L"
		IF tlWait
			WAIT WINDOW tcText
		ELSE
			WAIT WINDOW tcText NOWAIT
		ENDIF
	CASE TYPE("tlWait")=="N"
		WAIT WINDOW tcText TIMEOUT (tlWait)
	OTHERWISE
		RETURN .F.
ENDCASE

ENDPROC
PROCEDURE setbusystate
LPARAMETERS tlBusy

IF this.lBusy=tlBusy
	RETURN
ENDIF
this.lBusy=tlBusy

ENDPROC
PROCEDURE closetable
LPARAMETERS tcAlias
LOCAL lcAlias

SET DATASESSION TO (this.nDataSessionID)
lcAlias=IIF(EMPTY(tcAlias),this.cAlias,ALLTRIM(tcAlias))
IF NOT EMPTY(lcAlias) AND USED(lcAlias)
	USE IN (lcAlias)
ENDIF
SET DATASESSION TO (this.oHost.DataSessionID)

ENDPROC
PROCEDURE skiprecord
LPARAMETERS tnRecords
LOCAL lnRecords,lcAlias,lnRecNo,lnLastSelect,lnLastRecNo

SET DATASESSION TO (this.nDataSessionID)
lcAlias=this.cAlias
IF EMPTY(lcAlias) OR NOT USED(lcAlias)
	SET DATASESSION TO (this.oHost.DataSessionID)
	RETURN .F.
ENDIF
lnRecords=IIF(EMPTY(tnRecords),0,tnRecords)
lnLastSelect=SELECT()
SELECT (lcAlias)
IF EOF()
	GO BOTTOM
ENDIF
lnLastRecNo=RECNO()
lnRecNo=IIF(this.nRecNo>0,this.nRecNo,RECNO())
GO lnRecNo
SKIP lnRecords
IF BOF()
	GO TOP
ENDIF
IF EOF()
	GO BOTTOM
ENDIF
this.nRecNo=RECNO()
GO lnLastRecNo
SELECT (lnLastSelect)
SET DATASESSION TO (this.oHost.DataSessionID)
this.RunScript("RefreshData")

ENDPROC
PROCEDURE addprop
LPARAMETERS toObject,tcProperty,tuValue
LOCAL lcFileName,llAddPropLibSet,lvResult

lcFileName=this.cProgramPath+"AddProp5.fll"
IF NOT FILE(lcFileName)
	RETURN .F.
ENDIF
llAddPropLibSet=(ATC(lcFileName,SET("LIBRARY"))>0)
IF NOT llAddPropLibSet
	SET LIBRARY TO (lcFileName) ADDITIVE
ENDIF
lvResult=AddProp(toObject,tcProperty,tuValue)
IF NOT llAddPropLibSet
	RELEASE LIBRARY (lcFileName)
ENDIF
RETURN lvResult

ENDPROC
PROCEDURE newwindow
*** OLE Control Event ***
LPARAMETERS url, flags, targetframename, postdata, headers, processed

IF TYPE("url")#"C"
	RETURN
ENDIF
IF this.lDebug
	ACTIVATE SCREEN
	? PROGRAM()
	? "URL: "+url
	IF NOT EMPTY(targetframename)
		?? "  Frame: "+targetframename
	ENDIF
ENDIF
processed=.T.
this.Navigate(@url,@flags,@targetframename,@postdata,@headers)

ENDPROC
PROCEDURE beforenavigate
*** OLE Control Event ***
PARAMETERS url, flags, targetframename, postdata, headers, cancel
LOCAL lcURL,lcNewURL,lcSource,llJump,llMailTo,lcFileExt,lnAtPos,lnHistory

IF this.lRelease OR this.lBusy
	ACTIVATE SCREEN
	? PROGRAM()
	? "Busy"
	? "URL: "+url
	IF NOT EMPTY(targetframename)
		?? "  Frame: "+targetframename
	ENDIF
	cancel=.T.
	RETURN .F.
ENDIF
this.SetBusyState(.T.)
IF this.lDebug
	ACTIVATE SCREEN
	? PROGRAM()
	? "URL: "+url
	IF NOT EMPTY(targetframename)
		?? "  Frame: "+targetframename
	ENDIF
ENDIF
lcURL=ALLTRIM(url)
this.SetParam(lcURL)
llVisible=this.Visible
llMailTo=(LOWER(LEFT(lcURL,7))=="mailto:")
IF NOT llMailTo
	this.cBeforeURL=lcURL
ENDIF
lnAtPos=RAT(".",lcURL)
lcFileExt=IIF(lnAtPos=0,CHR(0),ALLTRIM(SUBSTR(lcURL,lnAtPos+1)))
IF NOT this.lParseSource OR ATC(";"+lcFileExt+";",";"+this.cParseFileExt+";")=0 OR ;
		CHR(1)$lcURL OR NOT FILE(lcURL)
	IF NOT this.lParseSource
		this.cFileName=""
	ENDIF
	this.cSourceURL=""
	this.BeforeRetrieval(@url,@flags,@targetframename,@postdata, ;
			@headers,@cancel)
	IF NOT cancel
		this.cFileName=""
		this.cSourceFile=""
		this.cSourceFileName=""
		this.cSourceHTML=""
	ENDIF
	this.SetBusyState(.F.)
	RETURN
ENDIF
IF NOT this.BeforeRetrieval(@url,@flags,@targetframename,@postdata, ;
		@headers,@cancel) OR cancel
	IF NOT cancel
		this.cSourceURL=""
		this.cSourceFile=""
		this.cSourceHTML=""
	ENDIF
	this.SetBusyState(.F.)
	RETURN .F.
ENDIF
IF llMailTo OR (NOT EMPTY(this.cTempFileName) AND LOWER(url)==LOWER(this.cTempFileName))
	this.SetBusyState(.F.)
	RETURN .F.
ENDIF
IF NOT cancel
	this.cSourceFile=""
	this.cSourceHTML=""
ENDIF
IF NOT this.ParseSource(lcURL) OR EMPTY(this.cNewURL)
	this.SetBusyState(.F.)
	RETURN
ENDIF
cancel=.T.
this.cSourceFile=""
this.cSourceHTML=""
this.Navigate(this.cNewURL,12,@targetframename)
this.SetBusyState(.F.)

ENDPROC
PROCEDURE navigatecomplete
*** OLE Control Event ***
LPARAMETERS url
LOCAL lcURL,lcLocationURL,lcSourceFileName

IF TYPE("url")#"C"
	RETURN
ENDIF
lcSourceFileName=this.cSourceFileName
IF this.lDebug
	ACTIVATE SCREEN
	? PROGRAM()
	? "URL: "+url
	? "Location URL: "+this.LocationURL
	? "Source file name: "+lcSourceFileName
ENDIF
IF EMPTY(lcSourceFileName)
	lcURL=LOWER(ALLTRIM(url))
ELSE
	lcURL=lcSourceFileName
ENDIF
IF EMPTY(lcURL) OR (SUBSTR(lcURL,5,1)==":" AND NOT LEFT(lcURL,5)=="file:" AND ;
		NOT LEFT(lcURL,4)=="http") OR RIGHT(lcURL,11)=="about:blank"
	RETURN
ENDIF
this.cLastURL=this.cURL
this.cURL=LOWER(this.ValidURL(lcURL))
lcLocationURL=LOWER(this.ValidURL(this.LocationURL))
IF this.lRefreshMode
	this.lRefreshMode=.F.
	this.lHistoryEnabled=.T.
	RETURN
ENDIF
IF NOT this.lHistoryEnabled
	this.lHistoryEnabled=.T.
	RETURN
ENDIF
lcURL=lcLocationURL
IF this.nHistoryCount>0 AND (this.aHistory[this.nHistoryCount,1]==lcURL OR ;
		(NOT EMPTY(lcSourceFileName) AND this.aHistory[this.nHistoryCount,2]==lcSourceFileName))
	RETURN
ENDIF
this.nHistoryCount=this.nHistoryCount+1
DIMENSION this.aHistory[this.nHistoryCount,2]
this.aHistory[this.nHistoryCount,1]=lcURL
this.aHistory[this.nHistoryCount,2]=lcSourceFileName

ENDPROC
PROCEDURE framebeforenavigate
*** OLE Control Event ***
LPARAMETERS url, flags, targetframename, postdata, headers, cancel

IF TYPE("url")#"C"
	RETURN
ENDIF
IF this.lDebug
	ACTIVATE SCREEN
	? PROGRAM()
	? "URL: "+url
	IF NOT EMPTY(targetframename)
		?? "  Frame: "+targetframename
	ENDIF
ENDIF
this.BeforeNavigate(@url,flags,@targetframename,@postdata,@headers,@cancel)

ENDPROC
PROCEDURE validateurl
LPARAMETERS tcURL
LOCAL lcURL,lnLastSelect

lcURL=ALLTRIM(tcURL)
IF this.lRelease OR lcURL==this.cLastURL OR ;
		LOWER(lcURL)==LOWER(ALLTRIM(this.cBlankHTMLFile))
	RETURN
ENDIF
SET DATASESSION TO (this.oHost.DataSessionID)
lnLastSelect=SELECT()
IF NOT this.OpenVFPScript()
	SELECT (lnLastSelect)
	RETURN
ENDIF
SELECT vfpscript
SCAN ALL FOR BeforeNav AND URLCancel
	IF NOT EMPTY(URLMatch) AND NOT this.WildCardMatch(ALLTRIM(MLINE(URLMatch,1)),lcURL)
		LOOP
	ENDIF
	IF NOT EMPTY(URLEval) AND (TYPE(URLEval)#"L" OR NOT EVALUATE(URLEval))
		LOOP
	ENDIF
	this.cURL=LOWER(this.ValidURL(this.cLastURL))
	SELECT (lnLastSelect)
	RETURN .F.
ENDSCAN
SELECT (lnLastSelect)

ENDPROC
PROCEDURE NavigateComplete2
*** OLE Control Event ***
LPARAMETERS pdisp, url

RETURN this.NavigateComplete(url)

ENDPROC
PROCEDURE NewWindow2
*** OLE Control Event ***
LPARAMETERS ppdisp, cancel

RETURN this.NewWindow(@cancel)

ENDPROC
PROCEDURE GoBack
*** OLE Control Method ***
LOCAL lcURL,lcSourceFileName

IF this.nHistoryCount<2
	NODEFAULT
	RETURN .F.
ENDIF
lcURL=this.aHistory[this.nHistoryCount-1,1]
lcSourceFileName=this.aHistory[this.nHistoryCount-1,2]
this.nHistoryCount=this.nHistoryCount-1
IF this.nHistoryCount>0
	DIMENSION this.aHistory[this.nHistoryCount,2]
ELSE
	this.aHistory=""
ENDIF
this.lHistoryEnabled=.F.
IF NOT EMPTY(lcSourceFileName)
	NODEFAULT
	this.Navigate(lcSourceFileName)
	RETURN .F.
ENDIF
IF NOT EMPTY(lcURL) AND NOT EMPTY(this.cSourceFileName) AND	NOT lcURL==lcSourceFileName
	NODEFAULT
	this.Navigate(lcURL)
	RETURN .F.
ENDIF

ENDPROC
PROCEDURE LostFocus
IF this.lDebug
	ACTIVATE SCREEN
	? PROGRAM()
ENDIF
this.RefreshDeactivate

ENDPROC
PROCEDURE Destroy
this.EraseTempFile
this.lRelease=.T.
this.cSourceFile=""
this.cSourceHTML=""
this.oAction=.NULL.
this.oSource=.NULL.
this.oUser=.NULL.
this.oHost=.NULL.
IF USED("vfpscript")
	USE IN vfpscript
ENDIF

ENDPROC
PROCEDURE Navigate
*** OLE Control Method ***
LPARAMETERS url, flags, targetframename, postdata, headers
LOCAL lcURL,lcNewURL

IF this.lRelease
	NODEFAULT
	url=""
	RETURN .F.
ENDIF
IF TYPE("url")#"C"
	RETURN
ENDIF
IF this.lDebug
	ACTIVATE SCREEN
	? PROGRAM()
	? "URL: "+url
	IF NOT EMPTY(targetframename)
		?? "  Frame: "+targetframename
	ENDIF
ENDIF
lcURL=ALLTRIM(url)
IF LEFT(lcURL,LEN(this.cVFPSProtocol))==LOWER(this.cVFPSProtocol)
	NODEFAULT
	RETURN this.BeforeNavigate(@url,@flags,@targetframename,@postdata,@headers)
ENDIF
IF RIGHT(url,16)==SPACE(16)
	this.cBeforeURL=ALLTRIM(lcURL)
	this.cSourceFile=""
	this.cSourceHTML=""
	RETURN
ENDIF
IF NOT this.ParseSource(lcURL) OR EMPTY(this.cNewURL)
	RETURN
ENDIF
NODEFAULT
url=""
RETURN this.Navigate(this.cNewURL,12,@targetframename)

ENDPROC
PROCEDURE Refresh
*** OLE Control Method ***

IF this.lDebug
	ACTIVATE SCREEN
	? PROGRAM()
ENDIF
IF this.lRefresh AND NOT this.lDesign
	this.RunScript("OnRefresh")
ENDIF
this.lRefresh=.T.
NODEFAULT

ENDPROC
PROCEDURE Statustextchange
*** OLE Control Event ***
LPARAMETERS text

IF this.lRelease OR this.lBusy OR NOT this.oHost.Visible
	RETURN .F.
ENDIF
IF TYPE("text")=="C" AND NOT EMPTY(text)
	SET MESSAGE TO LEFT(text,254)
ELSE
	SET MESSAGE TO
ENDIF

ENDPROC
PROCEDURE Downloadcomplete
*** OLE Control Event ***

IF this.lDebug
	ACTIVATE SCREEN
	? PROGRAM()
ENDIF
IF TYPE("this.LocationURL")=="C"
	this.cURL=LOWER(this.ValidURL(this.LocationURL))
ENDIF
this.NavigateComplete(this.cURL)
this.RunScript("OnLoad")

ENDPROC
PROCEDURE Commandstatechange
*** OLE Control Event ***
LPARAMETERS command, enable
LOCAL llEnabled

IF this.lRelease
	RETURN .F.
ENDIF
IF this.lDebug
	ACTIVATE SCREEN
	? PROGRAM()
	? "Command: "+ALLTRIM(STR(command))
	? "Enable: "+IIF(enable,"ON","OFF")
ENDIF
llEnable=enable
DO CASE
	CASE command=1
		IF TYPE("thisform.cmdGoForward")=="O"
			thisform.cmdGoForward.Enabled=llEnable
		ENDIF
	CASE command=2
		IF this.nHistoryCount=0
			llEnable=.F.
		ENDIF
		IF TYPE("thisform.cmdGoBack")=="O"
			thisform.cmdGoBack.Enabled=llEnable
		ENDIF
ENDCASE

ENDPROC
PROCEDURE Init
LPARAMETERS tcVFPScript

DIMENSION this.aHistory[1,2]
this.aHistory=""
this.oHost=thisform
this.oUser=CREATEOBJECT("Custom")
this.oUser.Name="oCustom"
this.nDataSessionID=thisform.DataSessionID
this.cProgramPath=IIF(TYPE("this.oHost.cProgramPath")=="C",this.oHost.cProgramPath, ;
		this.ClassLibrary)
IF NOT "\"$this.cBlankHTMLFile AND NOT ":"$this.cBlankHTMLFile
	this.cBlankHTMLFile=LOWER(this.cProgramPath+this.cBlankHTMLFile)
ENDIF
DO CASE
	CASE ISNULL(tcVFPScript)
		this.cVFPScript=""
	CASE EMPTY(tcVFPScript) OR TYPE("tcVFPScript")#"C"
		this.cVFPScript=LOWER(FULLPATH(this.cVFPScriptTable,this.cProgramPath))
	OTHERWISE
		this.cVFPScript=LOWER(ALLTRIM(tcVFPScript))
ENDCASE
IF EMPTY(this.cVFPScript)
	this.lVFPScript=.F.
ENDIF
this.OpenVFPScript
SELECT 0
IF this.lBlankHTMLStartup AND NOT EMPTY(this.cBlankHTMLFile) AND FILE(this.cBlankHTMLFile)
	this.Navigate(this.cBlankHTMLFile)
ENDIF
SELECT 0

ENDPROC
PROCEDURE Refresh2
*** OLE Control Method ***
LPARAMETERS level

IF this.lRelease OR NOT this.lRefresh
	NODEFAULT
	RETURN .F.
ENDIF
IF NOT EMPTY(this.cSourceFileName)
	RETURN this.RefreshMode()
ENDIF

ENDPROC
PROCEDURE Error
LPARAMETERS nError, cMethod, nLine
LOCAL lcMessage,lcMethod,lcErrorMsg,lcCodeLineMsg

#DEFINE	RUNCODE_RUNTIME_ERROR_LOC	"RunCode Runtime Error"
#DEFINE	TAB		CHR(9)
#DEFINE	LF		CHR(10)
#DEFINE	CR		CHR(13)
#DEFINE CR_LF	CR+LF

IF this.lIgnoreErrors OR INLIST(nError,1113,1426,1429,2012)
	RETURN
ENDIF
IF NOT EMPTY(GETPEM(thisform,"Error"))
	RETURN thisform.Error(nError,cMethod,nLine)
ENDIF
lcMethod=LOWER(ALLTRIM(cMethod))
IF INLIST(LOWER(lcMethod),"goback","gofoward") OR RIGHT(lcMethod,9)==".navigate"
	RETURN
ENDIF
lcErrorMsg=MESSAGE()+CR+CR+thisform.Caption+":  "+this.Name+CR+ ;
		"Object:        "+this.Name+CR+ ;
		"Error:           "+ALLTRIM(STR(nError))+CR+ ;
		"Method:       "+lcMethod
lcCodeLineMsg=MESSAGE(1)
IF BETWEEN(nLine,1,10000) AND NOT lcCodeLineMsg="..."
	lcErrorMsg=lcErrorMsg+CR+"Line:            "+ALLTRIM(STR(nLine))
	IF NOT EMPTY(lcCodeLineMsg)
		lcErrorMsg=lcErrorMsg+CR+CR+lcCodeLineMsg
	ENDIF
ENDIF
IF this.Msgbox(lcErrorMsg,17)#1
	this.ReleaseHost
ENDIF

ENDPROC
PROCEDURE GoForward
*** OLE Control Method ***

DOEVENTS

ENDPROC
PROCEDURE GOHOME
*** OLE Control Method ***

DOEVENTS

ENDPROC
PROCEDURE Gosearch
*** OLE Control Method ***

DOEVENTS

ENDPROC
PROCEDURE BeforeNavigate2
*** OLE Control Event ***
LPARAMETERS pdisp, url, flags, targetframename, postdata, headers, cancel

RETURN this.BeforeNavigate(@url,@flags,@targetframename,@postdata,@headers,@cancel)

ENDPROC
PROCEDURE Navigate2
*** OLE Control Method ***
LPARAMETERS url, flags, targetframename, postdata, headers

NODEFAULT
RETURN this.Navigate(@url,@flags,@targetframename,@postdata,@headers)

ENDPROC
��� ہہ�:%In~��r�UW�������%�����.�B�-���T������T������%�C��	���k�B�-���T����	��%�CC���]�����B�-���T��C���
��%�C������<,�����T��CW��T��CC��]@��h������M�������
T�����Q�
F����T������T������U
LCFILENAMELCFILENAME2LNLASTSELECTLCSOURCELCALIASTHISLRELEASECSOURCEFILECSOURCEHTML	CFILENAMETRIMPATHSOURCEt�������%�����)�B�-���T���-��
��C����T��C����%�C���CC���]�����)��C�HTML source not available����B�-���
%������
%������
/����:����/���:��B��T���a��
%�����/�����_�/����%�C|���[�T��	�-����C���
����T���-��UTLNOWAITTLNOEDIT
LCFILENAMETHISLRELEASELVIEWSOURCEMODE
GETSOURCEHTML
GETSOURCEFILE
WAITWINDOWLHISTORYENABLEDNAVIGATE`4������������	�
�*%�C�
this.oHostb�O�	C�����c�B�-���G�(����
��T��C����T���a��%������
����T��a��B�-���T�	�C�?���%��	����T��CC��	�=����T�������T��C�@��"%�CC�C��>=@C��@��n�T��a����C�����B�-���T�
�CW��%���
�	C��
����%�C�	vfpscript�����Q���
F��
��B��T���-��F��~����A�*%�C��
�CCC�������
	��#�.��)%�C��
�C�b�L�C��
	��T�.��
%����p�T��a���%�C��
������CC�������%�C�	vfpscript�
����!��F��%�C� �
��'�T��C� ���T���CC���!@��T��a��!��C�������"���%��#
��=�!���
F��
��T���a��U$URLFLAGSTARGETFRAMENAMEPOSTDATAHEADERSCANCELLCURL
LCLOWERURLLCNEWURLLNATPOSLNLASTSELECTTHISOHOST
DATASESSIONIDURESULTLRELEASEENABLEDCLASTURLCURL
CVFPSPROTOCOLVFPS
LVFPSCRIPT
OPENVFPSCRIPT	VFPSCRIPT	BEFORENAVURLMATCH
WILDCARDMATCHURLEVAL	URLCANCELSCRIPT	RUNSCRIPTNAMEURLJUMPVALIDURLNAVIGATECONTINUE����������
T�����T��C�.����%�������T��C�:����%�������T��C���=����
%������$T��C�2��4�C�f�C�@6���B�C����U
TCFILENAMETLPLATFORMTYPE
LCFILENAMELNATPOSLNATPOS2z���������%�C����2�	B�����
T�����T��C�:���%�����}�T��C���\���
%������T��C������
%������$T��C�2��4�C�f�C�@6���,T��CC�C�\�CC�\���D�\���+�C��=�.��4�T��CC��\����+�C��R�.��j�T��CC�C�>�=����	B����U
TCFILENAME	TLTRIMEXTTLPLATFORMTYPE
LCFILENAMELNATPOSTHISTRIMEXT���������T��C�\����&T��CC�����C��=6���
%������$T��C�2��4�C�f�C�@6���	B����U
TCFILENAME	LPLATTYPE
LCFILENAMELNATPOS7%�C���
��0�
 �����T�������UTHIS
CTEMPFILENAMEJ%������B�-���%�C�����7�
�����B�����UTHISLRELEASECSOURCEFILE
REFRESHSOURCEJ%������B�-���%�C�����7�
�����B�����UTHISLRELEASECSOURCEHTML
REFRESHSOURCE�4�������5������	�
���
����5%������
�C�urlb�C�C������B�-���T��C����T�
�C��/�\���T��C�\�
���2%����CC�
��C��>\@��	����B�-���T������T������T������T������T��-��T��C�.����;T�����&CCCC���\�@�htm�html�asp�	��6%��
�C�
@C��@�CC�
�@CC���@����T����
��T���C������B�-���T��C�:�
���%�����.�B�-���%�����[�T�
�CC�
��\����%�CC���
]���{�B�-���%�������t&���Ct�����URL: ����T�
�������Ca����$%��:�
�C�:����4�:T���file://CCC��\�/��///�//��//�/����
T�	����
T�����T������T���C�
@��T���C������T�������T���C������%�C������T�	�������T������T������T�������T�����C�
����4%�C�this.oHost.lReleaseb�L�
���	��~�T���-��B�-���T�� �CC���!@��T��"��	��U#URLFLAGSTARGETFRAMENAMEPOSTDATAHEADERSCANCELOTHISLCURLLCSOURCELCNEWURL
LCFILENAMELNATPOS
LLHTMLFILELLBUSYVFPSCRPTTHISLRELEASELPARSESOURCECTEMPFILEPREFIX	CFILENAME	CFILEPATH
CSOURCEURLCSOURCEFILENAME
CTEMPFILENAMECBLANKHTMLFILETRIMFILELDEBUGLBUSYSETBUSYSTATECSOURCEFILEPATHOHOSTVISIBLECURLVALIDURLCNEWURL<���5�������6%����C���C�tcCodeb�C�C����Z�B�-���%�����~�t&���Ct���T��������Ca��	��T��CW��T����
���G�(����t&�
T�����T���a���
����T���-��T���G�(����
F������C���	��UTCCODEOTHISLNDATASESSIONIDLNLASTSELECTLLBUSYTHISLRELEASELDEBUGLBUSYSETBUSYSTATEOHOST
DATASESSIONIDLRUNCODEMODERUNCODE��������%����C����2�B�-���%�����n�t&���Ct�����Script: ����T��C�������%�����
	����t&�)���Script: ��
  (not found)���	B����UTCSCRIPTTCALIASLLRESULTTHISLRELEASELDEBUG	VFPSCRIPT�������%�C����&�	B�����T��C�����%��:�
�CC��=@�http
	�CC��=@�file:
	�bCC��=@�www.�"CCC��R@�.com�.gov�.net��&C���\�:
�C��=�\\
		����T���http://����%�CC�����\�:��?�$T��CC��\�/��///�//������$%��:�
�C�:������:T���file://CCC��\�/��///�//��//�/�����	B����UTCURLLCURL����������������	�
�����
���������%�C������%�C���C���*����B��B�-���T��CCC��� ��@��T��CCC��� ��@��T��C�>��%�������B��
T�����(%�C��=�"�C��R�"	��W�T��a��T��CC��C�>�\����%��
�	� �	����T��-��T��C� ����
T�����
T�
����+�a����T��C� ���%�������T�
�C����
T��������T��C�"���%���
��]�T��C�"����%�����Y�
T�������T�
�CC��=���T��CC���\����%�C�
�����!��T��C�
�=��
H�������+����
T��������-���T�������2��
T������%�����D�T�
�CC�
�\����T��C�
�a����.%�����
	�������	����B�-���T�������%�������!���	B������%�C��=�~���B�CCC��\���B�����T�	�C�,�����%��	���Y�T���,C���,�����
���(��	����%��	�����T�
�CC��@��T��C�
>����T��C�,��
��"T��C�,��
�����T�
�CCC����\�@��������(�C�?�
�����T��C�?�
��%�����w�%������o�T����?���!�� T�
�C�
��C���\[����?%�C�
����
�	�
�*�	�
�?�
�
�%%����B��%�C�
�=�*���B�C�
�\C�C�
>�R���?%�C�
�=�%�C�
�R�%	�C�
���\�	��b�B��T��C�*�
��>%����
���	�C���=C�
��=	����B����B�-��UTCMATCHEXPLISTTCEXPRESSIONSEARCHEDTLMATCHASISLCMATCHEXPLISTLCEXPRESSIONSEARCHEDLLMATCHASISLCMATCHEXPLIST2
LNMATCHLENLNEXPRESSIONLENLNMATCHCOUNTLNCOUNTLNCOUNT2LNSPACECOUNT
LCMATCHEXPLCMATCHTYPELNMATCHTYPELNATPOSLNATPOS2LLMATCHLLMATCH2TABTHIS
WILDCARDMATCH����%����	C�����8�T���-��B�-���T��������Ca����T���a��T���-����C��������C�����U	LLBUSYTHISLRELEASECSOURCEFILENAMELREFRESHMODELBUSYSETBUSYSTATELHISTORYENABLEDNAVIGATEU�����G�(������%�C�	vfpscript���=�B��'%������
�	C�����o�B�-���T��C�SAFETYv��G.�T��CW��T������%�CC���]�
��G�F��Q�����	�
%�C�
��!�
F����%���ON���G. ���G.��B�-���%�C.�	
��C�Q�
 ������,%�CC���]��C�	BeforeNavb�L��F�%�C�	vfpscript�����Q�	��
 ����F���h1����
�C��
���C�����M�
�M��L��M��M��M��L��L��M��T��N����Q�����	��5%�C�
LastAccessb�T�C�	ExecCountb�N����%�C�	vfpscript�����Q�	��F��Q�����	�
%�C�
���
F����%���ON����G. ����G.��B�-���%�C�
LastAccessb�T��:�i1������T��%�C�	ExecCountb�N��w�i1������N�����Q�����	��%�C�	vfpscript�
����
F����%���ON����G. ����G.��B�-���F�	�%�C�m�
INDEXVALUE���G((�
IndexValue��7�& ��
��
���G(�C'
��-�F��U
LCFILENAMELNLASTSELECTLCLASTSETSAFETYTHISOHOST
DATASESSIONIDLRELEASE
LVFPSCRIPT
CVFPSCRIPT	VFPSCRIPT
INDEXVALUENAMEHTMLSCRIPT	BEFORENAVURLMATCHURLEVALURLJUMP	URLCANCELCONTINUECOMMENT
LASTACCESS	EXECCOUNTZ%������
���B��%�����S�T���-��T���a��B��UTHISLRELEASEVISIBLELREFRESHDEACTIVATEx%������B�-���&%�C�this.oHost.tmrHostb�O��H�B�-���)��C�oTHIS.oHost.Release������UTHISLRELEASEOHOSTTMRHOSTRUNCODE���������������	�
���
�=%����C���C�
this.oHostb�O�	C�������B�-���T�
�������Ca����T������%��������T���-���T��CC��@��T��C��@��T��C�>��%�C��=���<�T��CC���\����+�C��=�/��l�T��CC��\����+�C��R�/����T��CC�C�>�=����T�
�C�?���%��
�������C�����T��CC��
�=����T��C��%20� �����	���(�������T��C�	����T�
�C�=���%��
���p�
T��������T��CC��
�=���T��CC��
�\����(%�C��=�(�C��R�)	��4�&%�CC�C�	 ��� ���()���T����	������0�T����	��C�����R�T����	������"%�C��
�C��=�;
	����T��C�	����%��.�
����
5�����T����=lcParameter��&lcCode
���T��C�����%�����?�t&���Ct��-���	Command: ��	  Param: �����
H�P�N����refresh��y�T��C�������releasehost����T��C�������	runaction����T��C��������	runmethod��I�T������%�C��R�)
��*�T����()���luResult=this.&lcParam1
���runcode��v�T��C��������	runscript���
T�����T�
�C�::���%��
�����T��CC��
�=���T��CC��
�\����T��C���������
viewsource��;�T��C�� ��2�N�T��-���T��������C�
����	B����U!	TCCOMMAND	LCCOMMANDLCPARAM1LCPARAMETERLCALIASLCVFPSPROTOCOLLNVFPSPROTOCOLLEN
LCVARIABLELCCODELNCOUNTLNATPOS	LLENABLEDLURESULTLLBUSYTHISLRELEASEOHOSTLBUSYSETBUSYSTATEENABLEDVISIBLE
CVFPSPROTOCOLSETPARAMNPARAMCOUNTAPARAMLDEBUGCPARAMREFRESH2RELEASEHOST	RUNACTIONRUNCODE	RUNSCRIPT
VIEWSOURCEO��������T���a��?%����C���C�this.oActionb�O�	C�����j�B�-���T��CC��@��T%�C���C�����h
�C�����h�C�����h�Method
����B�-���T��������Ca��	��&T��C�
this.oAction.��()��T��������C���	��	B����U
TCMETHODLCMETHODLLRESULTLLBUSYTHISURESULTLRELEASEOACTIONLBUSYSETBUSYSTATE���������1%�C��C�
tcFileNameb�C�C����T�	B�����T��C����%��.�
����T����.txt���T��CW��T��CC��]@��h������M�������
T�����Q����
F����	B����U
TCFILENAME
LCFILENAMELNLASTSELECTLCALIASLCTEXTTEXT���������E%�C��C�tcTextb�C�C�
tcFileNameb�C�C����f�B�-���T��C����%��.�
����T����.txt���T��CW��T��CC��]@��h������M�r�����������(����Q����
F����UTCTEXT
TCFILENAME
LCFILENAMELNLASTSELECTLCALIASTEXT-�����������T��CC�����C��6��T��C�?���%�����r�
T��������T��CC���\����T��������	�����T��	�-��%�C������T��
����B��%�C��R�/���T��CC�C�>�=����T��C��%20� ���T��
����T������T��CC������F�������(����&�T��������T��C����%�������T��C������T��CC���=���T��CC���\����T��	���������UTCPARAMLCPARAMLCPARAMETERLCPARAMDELIMITERLNPARAMTOTALLNCOUNTLNATPOSTHISNPARAMCOUNTAPARAMCPARAMCPARAMDELIMITER���������%�����L�t&���Ct�����Name: ����T��C�������T��C�lcHTMLb�C��%��
����
T������%�����
	����t&�'���Name: ��
  (not found)���	B����UTCNAMETCALIASLCHTMLLLRESULTTHISLDEBUG	VFPSCRIPT�����������������	�
�*%�C�
this.oHostb�O�	C�����j�B�-���G�(����
��T���a��-%����C���C�tnCodeb�N����B�-���
T��C��T��CC��@��*T��CC����	vfpscript�CC��@6��T��CW��T��-��
T�	����
T�
���������(�������%�CC����@�
��|�.��T��a��T�	�C������
T�
��	����%��
���%�C���	C��
	����
F����B�-���%�C��
���
F����B�-���
F����"T��CC+�COCN���CO6��%�CC��@�
��k�-�CC��@����T��C��
��
%������%�C�
LastAccessb�T����>�����������
T�	����
T�
�����%�������#6���	#������
F����
H�.��������y�%�����d���C�����B��B�C�	�����������	B��
���B�-��UTCNAMETCALIASTNCODELCNAMELCALIASLNLASTSELECTLNRECNO
LTDATETIMELLMATCHLCSCRIPTCODELCHTMLTHISOHOST
DATASESSIONIDURESULTLRELEASELNCOUNTNSCRIPTCOUNTASCRIPTS
OPENVFPSCRIPTNAME
LASTACCESS	EXECCOUNTSCRIPTHTMLLDESIGN
EDITSCRIPTRUNCODE������������+T��CC�	tcMessageb�C����6��(T��CC�tnTypeb�N��0��6��,T��CC�tcTitleb�C�	����6��t&�T��C����x��	B����U		TCMESSAGETNTYPETCTITLE	LCMESSAGELNTYPELCTITLELNRESULTTHISFORMCAPTION>����������*T��CC�tcStringb�C����6��0T��CC�tcTitleb�C�C���CC��]@6��)T��C��]�\�~_  ��.htm��%�C����
����B�-���t&�
%������/������������$�/����������T��C������
 ����	B����U	TCSTRINGTCTITLETLNOEDITLCSTRINGLCTITLELCTEMPFILENAMETHISSTRINGTOFILEFILETOSTRINGa���������������	�
���%�C����S�B�-���T��C�
 C�
 ��T��C����T���
���T�
�-�������(��
���� %�C�@CC���
�@���T��C���
���T��C���
���T�
�a��!����%��

��z�N��C�Script� (��) �not found in file� "��".��
���B�-���T��� ����T��C��
���T����
��T��C����
���%���������B��%�C��R�
��!�T�������T�
�����������T��C��������%�����z�T�	�-�����T�	�C���
����%��	
��	�U��C�Unable to update script� (��) �in file� "��".��
���B�-���Q��C�Script� (��) �in file� "��" �updated�.�
���UTCSCRIPTNAMELCSCRIPTNAMELCOLDSCRIPTCODELCNEWSCRIPTCODELNSCRIPTNUMLCSCRIPTNAMESEARCH
LCFILENAME	LCOLDHTML	LCNEWHTMLLLRESULTLLMATCHLLNOEDITLCCR_LFTHIS	CFILENAMENSCRIPTCOUNTASCRIPTSMSGBOXFILETOSTRING
EDITSTRINGSTRINGTOFILE
WAITWINDOW������������T������T��	����T��
����T������%�C����x�B�-���T��C����%��.�
����T����.dbf���%�C�0
����B�-���G�(�����2T��CCC���C�a��
�C��6� �_���T��	����%�C������T���C�O��T��
�CC�&@��T���C��
����G�(������B��T��CW��F��
%������Q�����������Q���������%�C��
��?�T������T��	����T��
����T������
F����B�-���T��
�CC�&@��T���C��
����%�C��
����SET FILTER TO &tcFilter
�-�
F����G�(������U
TCFILENAMETCALIASTLEXCLUSIVETCFILTER
LCFILENAMELCALIASLNLASTSELECTTHISNRECNOCALIASCDBFCDBFPATHNDATASESSIONIDTRIMPATHTRIMFILEOHOST
DATASESSIONID���������"T��CC���	���C��6��%�C���C��
��\�B�-���T��CW��
F����%�C���CN�����#��������-��t&�T���BROWSE��%�C��
����T���� ����&lcCommand

F����UTCALIAS	TCCLAUSESLCALIASLNLASTSELECT	LCCOMMANDTHISCALIASNRECNO��������R�%�C����*�B��T��C���=��
H�M����C�tlWaitb�L����
%����~�
R,�������R,:������C�tlWaitb�N����R,�������2���B�-���UTCTEXTTLWAITLCTEXT6���%�������B��T������UTLBUSYTHISLBUSY|������G�(�����"T��CC���	���C��6��%�C��
�C��	��c�Q�����G�(������UTCALIASLCALIASTHISNDATASESSIONIDCALIASOHOST
DATASESSIONIDy����������G�(�����T������%�C���C��
��o�G�(���	�
��B�-���T��CC������6��T��CW��
F����%�C+����#6��T��CO��$T��C����	���CO6��	#����	H����%�C���#)��%�C+��#�#6��T���CO��	#����
F����G�(���	�
����C�RefreshData����U
	TNRECORDS	LNRECORDSLCALIASLNRECNOLNLASTSELECTLNLASTRECNOTHISNDATASESSIONIDCALIASOHOST
DATASESSIONIDNRECNO	RUNSCRIPT����������� T�����AddProp5.fll��%�C�0
��U�B�-��� T��C�C�LIBRARYv����%��
����
Gb(�����T��C������%��
����<������	B����U	TOOBJECT
TCPROPERTYTUVALUE
LCFILENAMELLADDPROPLIBSETLVRESULTTHISCPROGRAMPATHADDPROP���������%�C�urlb�C��6�B��%�������t&���Ct�����URL: ���%�C��
�������	  Frame: �����T��a��!��C���������U	URLFLAGSTARGETFRAMENAMEPOSTDATAHEADERS	PROCESSEDTHISLDEBUGNAVIGATE�4�������#�����	�
���
�%����������t&���Ct�����Busy�����URL: ���%�C��
�������	  Frame: ����T��a��B�-�����Ca����%�����@�t&���Ct�����URL: ���%�C��
��<����	  Frame: �����T��C������C�����T������ T�
�CC��=@�mailto:��%��

����T�������T��C�.����,T��C���C� �CC���\�6��O%���
�$C�;��;�;���;���
C� ��C�0
���%���
��e�T�������T������%��C����������%��
����T������T������T������T���������C-����B��1%�C��������
������%��
��u�T������T������T���������C-����B�-���-%��
�C���
�C�@C��@	������C-����B�-���%��
���T������T�������"%�C��� 
�	C��!���>���C-����B��T��a��T������T��������C��!����"����C-����U#URLFLAGSTARGETFRAMENAMEPOSTDATAHEADERSCANCELLCURLLCNEWURLLCSOURCELLJUMPLLMAILTO	LCFILEEXTLNATPOS	LNHISTORYTHISLRELEASELBUSYSETBUSYSTATELDEBUGSETPARAM	LLVISIBLEVISIBLE
CBEFOREURLLPARSESOURCE
CPARSEFILEEXT	CFILENAME
CSOURCEURLBEFORERETRIEVALCSOURCEFILECSOURCEFILENAMECSOURCEHTML
CTEMPFILENAMEPARSESOURCECNEWURLNAVIGATE���������%�C�urlb�C��1�B��T������%�������t&���Ct�����URL: ���!���Location URL: ����"���Source file name: ����%�C������T��CC��@�����
T������j%�C���=C���\�:�C��=�file:
	�C��=�http
	�C��R�about:blank��h�B��T�����	��T��	�CC���
@��T��CC����
@��%�������T���-��T���a��B��%���
��	�T���a��B��
T�����P%���
��9C��
����� C��
�C��
����		��n�B��T��
���
��������
�����T�����
��������T�����
��������UURLLCURL
LCLOCATIONURLLCSOURCEFILENAMETHISCSOURCEFILENAMELDEBUGLOCATIONURLCLASTURLCURLVALIDURLLREFRESHMODELHISTORYENABLED
NHISTORYCOUNTAHISTORY���������%�C�urlb�C��6�B��%�������t&���Ct�����URL: ���%�C��
�������	  Frame: �����%��C����������U	URLFLAGSTARGETFRAMENAMEPOSTDATAHEADERSCANCELTHISLDEBUGBEFORENAVIGATE[�������T��C����2%��������C�@CC���@��W�B��G�(������T��CW��%�C��	
����
F����B��F�
�~����	��J�*%�C�
�
�CCC�
������
	����.��)%�C��
�C�b�L�C��
	���.��T���CC����@��
F����B�-���
F����UTCURLLCURLLNLASTSELECTTHISLRELEASECLASTURLCBLANKHTMLFILEOHOST
DATASESSIONID
OPENVFPSCRIPT	VFPSCRIPT	BEFORENAV	URLCANCELURLMATCH
WILDCARDMATCHURLEVALCURLVALIDURL����B�C�����UPDISPURLTHISNAVIGATECOMPLETE����B�C�����UPPDISPCANCELTHIS	NEWWINDOWT����%����
��*���B�-���T��C��������T��C��������T��������%���������������������T�������T���-��%�C��
�������C�����B�-���)%�C��
�
C���
	�	��
	��M�����C�����B�-���ULCURLLCSOURCEFILENAMETHIS
NHISTORYCOUNTAHISTORYLHISTORYENABLEDNAVIGATECSOURCEFILENAME1%����� �t&���Ct���
����UTHISLDEBUGREFRESHDEACTIVATE�
����T���a��T������T������T����T����T����T����%�C�	vfpscript�����Q�	��U
THIS
ERASETEMPFILELRELEASECSOURCEFILECSOURCEHTMLOACTIONOSOURCEOUSEROHOST	VFPSCRIPT������������%�����J���
T�����B�-���%�C�urlb�C��i�B��%���	����t&���Ct�����URL: ���%�C��
�������	  Frame: �����T��C���� %�C�C��
>=C��
@��'���!B�C����������%�C��RC�X��y�T���C����T��
����T������B��"%�C���
�	C�������B����
T�����B�C��������UURLFLAGSTARGETFRAMENAMEPOSTDATAHEADERSLCURLLCNEWURLTHISLRELEASELDEBUG
CVFPSPROTOCOLBEFORENAVIGATE
CBEFOREURLCSOURCEFILECSOURCEHTMLPARSESOURCECNEWURLNAVIGATEq%����� �t&���Ct���%������
	��X���C�	OnRefresh�����T���a����UTHISLDEBUGLREFRESHLDESIGN	RUNSCRIPT����(%����������
��6�B�-���"%�C�textb�C�C��
	��l�G&(�C���=���z�G&(��UTEXTTHISLRELEASELBUSYOHOSTVISIBLE�%����� �t&���Ct���$%�C�this.LocationURLb�C��d�T���CC����@�����C��������C�OnLoad����UTHISLDEBUGCURLVALIDURLLOCATIONURLNAVIGATECOMPLETE	RUNSCRIPT|�������%�����)�B�-���%�������t&���Ct�����	Command: CC�Z���+���Enable: C���ON��OFF6���
T�����
H���u�������)%�C�thisform.cmdGoForwardb�O���T���	����������u�%���
���4�T��-���&%�C�thisform.cmdGoBackb�O��q�T���	������UCOMMANDENABLE	LLENABLEDTHISLRELEASELDEBUGLLENABLETHISFORMCMDGOFORWARDENABLED
NHISTORYCOUNT	CMDGOBACK ������������T������T������T���C�Custom�N��T�����oCustom��T�������ET��	�CC�this.oHost.cProgramPathb�C����	���
6��&%��\��
�
�:��
	��
�T���C��	��@���
H�����C���:�T������(�C���C�tcVFPScriptb�C���T���CC��
��	�@��2���T���CC��@���%�C�������T���-���
����F��)%����
C���
	�	C��0	�����C�������F��UTCVFPSCRIPTTHISAHISTORYOHOSTTHISFORMOUSERNAMENDATASESSIONID
DATASESSIONIDCPROGRAMPATHCLASSLIBRARYCBLANKHTMLFILE
CVFPSCRIPTCVFPSCRIPTTABLE
LVFPSCRIPT
OPENVFPSCRIPTLBLANKHTMLSTARTUPNAVIGATEX���%������
��-���B�-���%�C���
��Q�
B�C�����ULEVELTHISLRELEASELREFRESHCSOURCEFILENAMEREFRESHMODE4�����������)%����C��Y���������O�B��%�CC�	�Error�!�
����B�C����	�
���T��CC��@��>%�CC�@�goback�gofoward��C��	R�	.navigate����B���T��CEC�
 C�
 �	��:  ��C�
 �Object:        ��C�
 �Error:           CC�Z�C�
 �Method:       ���T��C�E��%%�C���'����...
	���0T���C�
 �Line:            CC�Z���%�C��
����T���C�
 C�
 �����%�C����
���-�
�����UNERRORCMETHODNLINE	LCMESSAGELCMETHOD
LCERRORMSG
LCCODELINEMSGTHIS
LIGNOREERRORSTHISFORMERRORCAPTIONNAMEMSGBOXRELEASEHOST��U��U��UG���������%B�C����������U	PDISPURLFLAGSTARGETFRAMENAMEPOSTDATAHEADERSCANCELTHISBEFORENAVIGATE?���������!B�C���������UURLFLAGSTARGETFRAMENAMEPOSTDATAHEADERSTHISNAVIGATE
refreshsource,��
viewsource��beforeretrieval��trimext���trimpath�	��trimfile���
erasetempfilei��
getsourcefile���
getsourcehtml3
��parsesource�
��runcode���	runscript���validurl���
wildcardmatch���refreshmode� ��
openvfpscript�!��refreshdeactivate�&��releasehosth'��vfps
(��	runaction�/��filetostring�1��stringtofile�2��setparam:4��gethtml�6��	vfpscript*8��msgbox�<��
editstring>��
editscript�?��	opentableD��browsetable�G��
waitwindow�H��setbusystate�I��
closetable&J��
skiprecord�J��addprop�L��	newwindow5N��beforenavigate[O��navigatecompleteqU��framebeforenavigateY��validateurl%Z��NavigateComplete2B\��
NewWindow2�\��GoBack�\��	LostFocus�^��Destroy�^��Navigate�_��Refreshub��Statustextchangec��Downloadcomplete�c��Commandstatechange�d��Init�f��Refresh2�i��Error;j��	GoForwardm��GOHOMEm��Gosearchm��BeforeNavigate2&m��	Navigate2�m��1qqA!qAQqAQ��A�!AQ�A�3�qqA����qA�����AAA������AA�3�q�qA!����qA1�A1�!�qA����A�AA�q��AA�AA��A!A�AAq���A�AAA��3���11aAA�AA�3����A�1aA�QA�AA��AA��A�3��2a�AA�31�A3qA!�A�3qA!�A�3�q��RqA�q1"qA�1�b�qA1qA�AQqAQ�QA�A�A��!�1�!�A�A�qA�3qq�bqAQ�A��1�Q�������3�q�qAQ��A��Q�A�3qq��A�t
�A�A�A�AA�3�1�q���AAqA���AA����A��1���1���1a�AAA�A�AA!�!�!���AAA��qAQAAA��q�AAq�Aq��a!�A�1a!AAAA�AAq�A�AA1�AAAq3q��qA���13�"�AAqqAQa�a���1a�aAqAA�AA���A���AQ��A����1a�aAqA�QA��AA��1a�aAqAq�1�A�A�3�AA��AA3qAaqA�3q���qA�1�A!�a�A�AA��A1�A��Q1����A�aa��A�aA!Q1�A��AAAQ��A����Q��1A��Q��A��A����A�3q���qACqA�a�3q1�A�1QA�!AQ����3��RqA�1QA�!A����3q��1���A��AAq�A��qq!����AaA3��Q�aA����A�QqA�3����qA!��qA��������AA���A���qA�qA�!a!A���A��AQ��AA��AA�Aq3�1���Qa�3�����qAQ���qQA��3qq��qAQ������AAA��qAaQ1��AAqA�����A�QqA31��qA�1QAqA�!�!A�!AA���!�1A�qAA��AA�!3��"�qA��q��AAQ1aA��3�qR�AA!������A��qA3qBAA3qq�!��A!3qq��!qA����QA�A���QA�QA���!�3��qA��A���A�3�rAAQ�Q�AA�3�1�Q�Q�A�qA�Q�Q�AA��A1��AR�A�AA�A�qA��qA�A!�AA���3r�rAAQ�Q!A���A�AA1����AA�AA�AAq���3�rAAQ�Q�AAQ3q��"AA!�!�AAqa�AA�AA��qA�3�3�3�BAqA��qA��A�AqA�AqA3Q�A�3��������A3r�A�qAqAAQ�Q�AA�AA�!AA!AAA��3Q�A��A�A3r�qA!�aA3Q�AA�A1a3�qqAQ���A���1AA�Aa1AA3qb��1Ra�A�����AA!�A���1A�3r�AqA1�A3�1�AA��A�AA��Q�AA��A3C3C3C3�R3rB2��p =�OE|m���
��������\����������S�q�(�,D0K� XB� R.p�t.}/���/
7�57�7K�7o8V�8�B`~�B*E��MEG��?GI��9I�L��LEN(�eNVT=+sT�U�4�U�W�F
X�^�s_�c���c�e��e�f(�gig?��g�hH��h:kT�Xkmu m�n��nv�c9v{��={�|��|r-���K��l�R����Y�!�p�v���_�~�~����
��������������(NJ��B����_ʐ��h����*����N��*�T�I�q�Z���T�`�t� �g)ہELEA
��ࡱ�>��	������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Root Entry���������O�w���@OleObjectData�����AccessObjSiteData&������������8ChangedProps������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������a�V�
4��k�O��LV
V
L88���Ws5��i+.bL�F�+OLEObject = C:\WINNT\System32\shdocvw.dll
Class1�lrefresh Determines if the control is refreshed with the Refresh method is executed.
csourcehtml HTML of current source document.
csourcefile File name of current document.
curl Current URL.
clasturl Last URL.
cbeforeurl Current URL before document is fully retrieved.
lparsesource Enables parse document source mode.
ctempfilename File name of temporary file document.
ohost Host form - same as THISFORM.
uvalue Variant value - user defined - not used internally.
cnewurl URL before document is fully retrieved.
csourceurl URL of current source document.
lrefreshmode Refresh document mode.
csourcefilename File name of current source document.
cvfpscripttable VFP script table file name.
cvfpscript VFP script program file name.
lvfpscript Enables VFP script mode.
lruncodemode Run code mode.
csourcefilepath Path of current source document.
cparsefileext File extension list of file to parse in pre-processing mode.
lrefreshdeactivate Enabled auto execution of RefreshDeactivate method for LostFocus.
nscriptcount Returns length of VFP script array.
osource Source object - user defined - not used internally.
uresult Variant result value.
oaction User action object - user defined - not used internally.
lrelease Indicates the object's Release method has been executed and the object is in the process of being released from memory.
ldebug Debug mode.
cvfpsprotocol Default VFP script protocol string.
ctempfileprefix Prefix used for file name of temporary file document.
ureturn Variant return value.
cblankhtmlfile Specifies blank HTM file.
cprogrampath Web browser control class path.
cparam URL parameter string.
nparamcount Returns length of URL parameter array.
lblankhtmlstartup Enables blank startup web page.
cfilename Returns file name of current document.
ldesign Design mode.
calias Returns table alias of active table set automatially when using the OpenTable method.
cparamdelimiter URL parameter delimiter character.
lbusy Web browser busy mode.
cfilepath Returns path of current document.
nrecno Returns current record number of active table set automatially when using the OpenTable method.
ndatasessionid Returns data session of table alias of active table set automatially when using the OpenTable method.
cdbf Returns file name of active table set automatially when using the OpenTable method.
ouser User object - user defined - not used internally.
nhistorycount Returns length of URL history array.
lhistoryenabled URL history tracking enabled.
lviewsourcemode View source mode.
cversion Version of web browser control subclass.
cdbfpath Returns path of active table set automatially when using the OpenTable method.
nuserlevel User level - user defined - not used internally.
cuserid User ID - user defined - not used internally.
cusername User name - user defined - not used internally.
ldhtml Returns .T. if web browser supports dynamic HTML.
lignoreerrors
*refreshsource Refresh source.
*viewsource View source of current document.
*beforeretrieval BeforeRetrieval event.
*trimext Returns file name without extension of specified file name.
*trimpath Returns file name without path of specified file name.
*trimfile Returns path of specified file name.
*erasetempfile Erase current temporary file.
*getsourcefile Returns file name of current source document.
*getsourcehtml Returns HTML of current source document.
*parsesource Parse source code of HTML document.
*runcode Run specific block of VFP code without compilation.
*runscript Run specific VFP script.
*validurl Returns validated URL.
*wildcardmatch Returns .T. if wild card string is matched to specific string.
*refreshmode Set refresh mode.
*openvfpscript Open VFP script table.
*refreshdeactivate RefreshDeactivate method for use when losing focus of the web browser control.
*releasehost Release host form.
*vfps Executes VFP script based on specified URL.
^ascripts[1,0] VFP scripts array.
*runaction Run specific action which is a specific method of object referenced by the oAction property.
*filetostring Returns string contents of file.
*stringtofile Saves string contents to file.
*setparam Set URL parameters method.
*gethtml Returns HTML of current document.
^aparam[1,0] URL parameters array.
*vfpscript Executes specific VFP script.
*msgbox Message box wrapper method.
*editstring Edit string in window.
*editscript Edit specific VFP script.
*opentable Open specified table and activate as current table by setting cAlias property.
*browsetable Browse active table based on cAlias.
*waitwindow Wait window wrapper method.
*setbusystate Set busy state method.
*closetable Close active table based on cAlias.
*skiprecord Skip record of active table based on cAlias.
*addprop Add new property.
^ahistory[1,2] URL address history array.
*newwindow NewWindow event.
*beforenavigate BeforeNavigate event.
*navigatecomplete NavigateComplete event.
*framebeforenavigate FrameBeforeNavigate event.
*validateurl Validates URL.
Pixels.Web browser control for Internet Explorer 4.0._webbrowser4