DEFINE CLASS fckeditor AS custom
	cInstanceName =""
	BasePath =""
	cWIDTH =""
	cHEIGHT =""
	ToolbarSet =""
	cValue=""
	DIMENSION aConfig(10,2)

&& -----------------------------------------------------------------------
	FUNCTION fckeditor( tcInstanceName )
		LOCAL lnLoop,lnLoop2
		THIS.cInstanceName	= tcInstanceName
		THIS.BasePath	= '../../'
		THIS.cWIDTH		= '100%'
		THIS.cHEIGHT	= '200'
		THIS.ToolbarSet	= 'Default'
		THIS.cValue		= ''
		FOR lnLoop=1 TO 10
			FOR lnLoop2=1 TO 2
				THIS.aConfig(lnLoop,lnLoop2)	= ""
			NEXT
		NEXT
		RETURN
	ENDFUNC


&& -----------------------------------------------------------------------
	FUNCTION CREATE()
		RETURN(THIS.CreateHtml())
	ENDFUNC

&& -----------------------------------------------------------------------
	FUNCTION CreateHtml()
		LOCAL html
		LOCAL lcLink

		HtmlValue = THIS.cValue		&& HTMLSPECIALCHARS()

		html = [<div>]
		IF THIS.IsCompatible()
			lcLink = THIS.BasePath+[editor/fckeditor.html?InstanceName=]+THIS.cInstanceName

			IF ( THIS.ToolbarSet # '' )
				lcLink = lcLink + [Toolbar=]+THIS.ToolbarSet
			ENDIF

&& Render the LINKED HIDDEN FIELD.
			html = html + [<input type="hidden" id="]+THIS.cInstanceName +[" name="]+THIS.cInstanceName +[" value="]+HtmlValue+[">]

&& Render the configurations HIDDEN FIELD.
			html = html + [<input type="hidden" id="]+THIS.cInstanceName +[___Config" value="]+THIS.GetConfigFieldString() + [">] +CHR(13)+CHR(10)

&& Render the EDITOR IFRAME.
			html = html + [<iframe id="]+THIS.cInstanceName +[___Frame" src="]+lcLink+[" width="]+THIS.cWIDTH+[" height="]+THIS.cHEIGHT+[" frameborder="0" scrolling="no"></iframe>]
		ELSE
			IF ( AT("%", THIS.cWIDTH)=0 )
				WidthCSS = THIS.cWIDTH + 'px'
			ELSE
				WidthCSS = THIS.cWIDTH
			ENDIF

			IF ( AT("%",THIS.cHEIGHT)=0  )
				HeightCSS = THIS.cHEIGHT + 'px'
			ELSE
				HeightCSS = THIS.cHEIGHT
			ENDIF

			html = html + [<textarea name="]+THIS.cInstanceName +[" rows="4" cols="40" style="width: ]+WidthCSS+[ height: ]+HeightCSS+[" wrap="virtual">]+HtmlValue+[</textarea>]
		ENDIF

		html = html + [</div>]

		RETURN (html)
	ENDFUNC


&& -----------------------------------------------------------------------
	FUNCTION IsCompatible()
		LOCAL llRetval
		LOCAL sAgent

		llRetval=.F.

		sAgent= LOWER(Request.ServerVariables("HTTP_USER_AGENT"))

		IF AT("msie",sAgent) >0 .AND. AT("mac",sAgent)=0 .AND. AT("opera",sAgent)=0
			iVersion=VAL(SUBSTR(sAgent,AT("msie",sAgent)+5,3))
			llRetval= iVersion > 5.5
		ELSE
			IF AT("gecko",sAgent)>0
				iVersion=VAL(SUBSTR(sAgent,AT("gecko/",sAgent)+6,8))
				llRetval =iVersion > 20030210
			ENDIF
		ENDIF
		RETURN (llRetval)
	ENDFUNC

&& -----------------------------------------------------------------------
	FUNCTION GetConfigFieldString()
		LOCAL sParams
		LOCAL bFirst
		LOCAL sKey
		sParams = ""
		bFirst = .T.
		FOR lnLoop=1 TO 10 && ALEN(this.aconfig)
			IF !EMPTY(THIS.aConfig(lnLoop,1))
				IF bFirst = .F.
					sParams = sParams + "&"
				ELSE
					bFirst = .F.
				ENDIF
				sParams = sParams +THIS.aConfig(lnLoop,1)+[=]+THIS.aConfig(lnLoop,2)
			ELSE
				EXIT
			ENDIF
		NEXT
		RETURN(sParams)
	ENDFUNC
ENDDEFINE

