Sign in to follow this  
Followers 0
Arclite86

firefox start up problem

8 posts in this topic

I juat refreshed my pc but it deleted all the firefox plugins

I have downloaded the latest autoit and installed the firefox script 

but I still get an error when I try to start up the porgram

this is the error that I get and I not remmber how i solved this before

__FFStartProcess ==> General Error: Error reading registry entry for FireFox.
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Mozilla\Mozilla Firefox\*CurrentVersion*\Main\PathToExe
Error from RegRead: 1

please help me.

Share this post


Link to post
Share on other sites



Have now managed to start up the firefox browser but it response after that:

__FFStartProcess: ""C:\Program Files (x86)\Mozilla Firefox\firefox.exe" -new-window "https://www.google.nl"  "-repl 4242 "
_FFConnect: OS: WIN_8 WIN32_NT 9200 
_FFConnect: AutoIt: 3.3.10.2
_FFConnect: FF.au3: 0.6.0.1b-10
_FFConnect: IP: 127.0.0.1
_FFConnect: Port:   4242
_FFConnect: Delay:  2ms

Share this post


Link to post
Share on other sites

I assume you applied the fix we previously discussed >here.

Do you have MozRepl installed and started?

Share this post


Link to post
Share on other sites

I assume you applied the fix we previously discussed >here.

Do you have MozRepl installed and started?

Yes I also chanced that:

and I installed the MozRepl and it in the firefox addons

Local $sFFExe = RegRead($sHKLM & "\" & RegRead($sHKLM, "CurrentVersion") & "\Main", "PathToExe")

but when i try to run a script firefox starts up on  google.nl (for example) than it doesnt respond any more, how is that possible

this are the  scripts that i use, I thought I did everything right:

FF.au3

; :wrap=none:collapseFolds=1:maxLineLen=80:mode=autoitscript:tabSize=8:folding=indent:
; created with jEdit4AutoIt
#include-once
#Tidy_Off
#Region Copyright
#cs
    * FF.au3
    *
    * This program is free software; you can redistribute it and/or
    * modify it under the terms of the GNU General Public License
    * as published by the Free Software Foundation; either version 2
    * of the License, or any later version.
    *
    * This program is distributed in the hope that it will be useful,
    * but WITHOUT ANY WARRANTY; without even the implied warranty of
    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    * GNU General Public License for more details.
    *
    * You should have received a copy of the GNU General Public License
    * along with this program; if not, write to the Free Software
    * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
#ce
#EndRegion

#Region Many thanks to:
#cs
    - Jonathan Bennett and the AutoIt Team for AutoIt v3 the freeware
    BASIC-like scripting language
    (and thanks John George Kemeny and Thomas Eugene Kurtz for BASIC)
    - Dale Hohm, for his great IE.au3, which I've used as base for the
    functions-names and the error handling.
    - Johannes Schirmer, for some functions and suggestions for the FF.au3
    - all others for their suggestions, bug reports ...
    - the FireFox-Team for his fantastic browser

    - and Massimiliano Mirra, without his work would this UDF impossible,
    for MozLab / MozRepl
#ce
#EndRegion

#Region #CURRENT# ==============================================================
;_FFAction
;_FFClick
;_FFCmd
;_FFConnect
;_FFDialogWait
;_FFDisConnect
;_FFDispatchEvent
;_FFFormCheckBox
;_FFFormGetElementsLength
;_FFFormOptionSelect
;_FFFormRadioButton
;_FFFormReset
;_FFFormSubmit
;_FFFrameEnter
;_FFFrameLeave
;_FFGetLength
;_FFGetObjectInfo
;_FFGetPosition
;_FFGetValue
;_FFImageClick
;_FFImageGetBySize
;_FFImageMapClick
;_FFIsConnected
;_FFLinkClick
;_FFLinksGetAll
;_FFLoadWait
;_FFLoadWaitTimeOut
;_FFObj
;_FFObjDelete
;_FFObjGet
;_FFObjNew
;_FFOpenURL
;_FFPrefGet
;_FFPrefReset
;_FFPrefSet
;_FFQuit
;_FFReadHTML
;_FFReadText
;_FFSearch
;_FFSetValue
;_FFStart
;_FFTabAdd
;_FFTabClose
;_FFTabDuplicate
;_FFTabExists
;_FFTabGetSelected
;_FFTabSetSelected
;_FFTableWriteToArray
;_FFWindowClose
;_FFWindowGetHandle
;_FFWindowOpen
;_FFWindowSelect
;_FFWriteHTML
;_FFXPath
#EndRegion

#Region Description
; ==============================================================================
; UDF ...........: FF.au3
Global Const $_FF_AU3VERSION = "0.6.0.1b-10"
; Description ...: An UDF for FireFox automation.
; Requirement ...: MozRepl AddOn:
;                  http://hyperstruct.net/projects/mozlab
;                  http://wiki.github.com/bard/mozrepl/home
; Author(s) .....: Thorsten Willert, Johannes Schirmer
; Date ..........: Mon Sep 23 18:57:50 CEST 2013 @748 /Internet-Zeit/
; FireFox Version: Firefox/23 (required 3.x.x)
; AutoIt Version : v3.3.6.1
; ==============================================================================
#cs
    V0.6.0.1b-10
    - Added: __IsIP: IPV6 Support (IVP6, HexCompressed, 6Hex4Dec, Hex4DecCompressed)

    V0.6.0.1b-9
    - Added: __FFStartProcess: 64bit support
    - Added: __FFIsURL: support for intranet
    - Changed: _FFQuit now closes FireFox with multiple windows
    - Fixed: Connection-limit to MozRepl

    V0.6.0.1b-8 (by Danp2)
    - Changed: _FFTabExists to allow search by href
    - Changed: _FFTabSetSelected to allow selection by href
    - Changed: SelectWin to check individual tabs
    - Added: FFau3.SearchTabURL helper function
    - Fixed: __FFStartProcess
    - Fixed: _FFGetPosition

    V0.6.0.1b-7
    - New: Internal function: __FFMultiDispatchEvent: Dispatches multiple events on one element
    - Added: _FFDisPatchEvent can now simulate MouseEvents: click, mousedown, mouseup, mouseover, mousemove, mouseout
    - Added: Global constants $_FF_Event_*
    - Changed: Removed connection-limit to MozRepl
    - Optimized: __FFFilterString
    - Optimized: __FFB2S (Bool to string)
    - Optimized: __FFIsIP

    V0.6.0.1b-6
    - Added: Internal function __FFSetTopDocument()
    - Changed: Default values for _FFXpath: _FFXPath($sQuery, $sAttribute = "", $iReturnType = 9, $iFilter = 0)
    - Changed/Fixed: _FFSearch($sSearchString[, $bCaseSensitive = False[, $bWholeWord = False[, $bSearchInFrames = True]]])
    !!! Now you can use as $sSearchString RegExp, too!
    - Fixed:
        _FFAction
        _FFClick
        _FFFormSubmit
        _FFLoadWait
        _FFDisPatchEvent
        _FFOpenURL
        _FFTabAdd
        _FFTabClose
        _FFTabSetSelected
        now updating the FFau3.WCD-object (window.content.document)
    - Fixed: Different problems after _FFTabAdd
    - Fixed: Different problems after _FFOpenURL
    - Fixed: Error in _FFAu3Option()

    <V0.6.x.x
    For compatibily for older scripts, please use this UDF:
    http://thorsten-willert.de/Themen/FFau3/FF.au3/FFEx.au3

    ToDo:
    Textsuche (name, id, text ...) per Substring, String, RegEx
    Events fuer die _FFForm* Funktionen
    Update der Window-Funktionen
#ce
#EndRegion

#Region Global Constants
Global Const $_FF_PROC_NAME = "firefox.exe" ; Firefox process name
Global Const $_FF_COM_DELAY_MAX = 200 ; alternative connection delay in ms
Global Enum $_FF_ERROR_Success = 0, _   ; No error
        $_FF_ERROR_GeneralError, _  ; General error
        $_FF_ERROR_SocketError, _   ; No socket
        $_FF_ERROR_InvalidDataType, _   ; Invalid data type (IP, URL, Port ...)
        $_FF_ERROR_InvalidValue, _  ; Invalid value in function-call
        $_FF_ERROR_SendRecv, _      ; Send / Recv Error
        $_FF_ERROR_Timeout, _       ; Connection / Send / Recv timeout
        $_FF_ERROR___UNUSED, _      ;
        $_FF_ERROR_NoMatch, _       ; No match for _FFAction-find/search _FFGetElement...
        $_FF_ERROR_RetValue, _      ; Error echo from Repl e.g. _FFAction("fullscreen","true") <> "true"
        $_FF_ERROR_ReplException, _     ; Exception from MozRepl / FireFox
        $_FF_ERROR_InvalidExpression    ; Invalid expression in XPath query or RegEx
Global Enum Step * 2 $_FF_Event_Change = 1, _
        $_FF_Event_Select, _
        $_FF_Event_Focus, _
        $_FF_Event_Blur, _
        $_FF_Event_Resize, _
        $_FF_Event_Reset, _
        $_FF_Event_Keydown, _
        $_FF_Event_Keypress, _
        $_FF_Event_Keyup, _
        $_FF_Event_Click, _
        $_FF_Event_MouseDown, _
        $_FF_Event_MouseUp, _
        $_FF_Event_MouseOver, _
        $_FF_Event_MouseMove, _
        $_FF_Event_MouseOut
#EndRegion

#Region Global Variables
Global $_FF_GLOBAL_SOCKET = -1 ; Socket
Global $_FF_CON_DELAY ; Connection Delay
Global $_FF_LOADWAIT_TIMEOUT = 120000
Global $_FF_LOADWAIT_STOP = True ; stop loading after $_FF_LOADWAIT_TIMEOUT
Global $_FF_COM_TRACE = True ; Trace communication to console (debugging)
Global $_FF_ERROR_MSGBOX = True ; Shows in compiled scripts error messages in msgboxes
Global $_FF_FRAME = 'top'
Global $_FF_SEARCH_MODE = 0 ; 0 = Substring / 1 = Compare / (2 = RegEx not activ)
#EndRegion
#Tidy_On
; #FUNCTION# ===================================================================
; Name ..........: _FFAction
; Description ...: Some standard actions to work with FireFox
; Beschreibung ..: Standardaktionen in FireFox
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFAction($sAction[, $vOption = ""[, $vOption2 = ""[, $bLoadWait = True]]])
; Parameter(s): .: $sAction     - one of the following actions:
;                               | about
;                               | alert
;                               | back
;                               | blank
;                               | copy
;                               | fullscreen / fs
;                               | hideall
;                               | home
;                               | maximize / max
;                               | minimize / min
;                               | presentationmode / pm
;                               | print
;                               | reload
;                               | resetconsole
;                               | restore
;                               | scrollXY
;                               | stop
;                               | zoom
;                  $vOption     - Optional: (Default = "") :
;                  $vOption2    - Optional: (Default = "") :
;                  $bLoadWait   - Optional: (Default = true) :
; Return Value ..: Success      - Return-value from MozRepl (sometimes an empty string!!!)
;                  Failure      - ""
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Sat Feb 26 18:21:40 CET 2011 @765 /Internet Time/
; Link ..........: http://developer.mozilla.org/en/docs/XUL:tabbrowser, http://developer.mozilla.org/en/docs/XUL:Method:reloadWithFlags, https://developer.mozilla.org/En/DOM/Window.scrollBy, http://kb.mozillazine.org/About_Protocol_Links
; Related .......:
; Example .......: Yes
; ==============================================================================
Func _FFAction($sAction, $vOption = "", $vOption2 = "", $bLoadWait = True)
    Local Const $sFuncName = "_FFAction"

    Local $sCommand
    Local $sActionL = StringLower($sAction)

    Select
        Case $sActionL = "back"
            $sCommand = "gBrowser.goBack()"
        Case $sActionL = "home"
            $sCommand = "gBrowser.goHome()"
        Case $sActionL = "forward"
            $sCommand = "gBrowser.goForward()"
        Case $sActionL = "copy"
            Return _FFCmd(".getSelection()", $_FF_CON_DELAY + 100)
        Case $sActionL = "reload" And $vOption <> ""
            $sCommand = "gBrowser.reloadWithFlags('" & $vOption & "')"
        Case $sActionL = "reload"
            $sCommand = "gBrowser.reload()"
        Case $sActionL = "fullscreen" Or $sActionL = "fs" And $vOption
            $sCommand = "fullScreen=true"
            $bLoadWait = False
        Case $sActionL = "fullscreen" Or $sActionL = "fs" And Not $vOption
            $sCommand = "fullScreen=false"
            $bLoadWait = False
        Case $sActionL = "minimize" Or $sActionL = "min"
            $bLoadWait = False
            $sCommand = "minimize()"
        Case $sActionL = "maximize" Or $sActionL = "max"
            $bLoadWait = False
            $sCommand = "maximize()"
        Case $sActionL = "restore"
            $bLoadWait = False
            $sCommand = "restore()"
        Case $sActionL = "stop"
            $bLoadWait = False
            $sCommand = "gBrowser.stop()"
        Case $sActionL = "print"
            $bLoadWait = False
            $sCommand = "content.print()"
        Case $sActionL = "find" Or $sActionL = "search"
            _FFLoadWait()
            $sCommand = "content.find()"
        Case $sActionL = "hideall" And $vOption
            Return _FFCmd("toggleAffectedChrome(true);")
        Case $sActionL = "hideall" And Not $vOption
            Return _FFCmd("toggleAffectedChrome(false);")
        Case $sActionL = "presentationmode" Or $sActionL = "pm" And $vOption
            Return _FFCmd("toggleAffectedChrome(true)" & @CRLF & "fullScreen=true")
        Case $sActionL = "presentationmode" Or $sActionL = "pm" And Not $vOption
            Return _FFCmd("toggleAffectedChrome(false)" & @CRLF & "fullScreen=false")
        Case $sActionL = "alert" And $vOption <> ""
            $sCommand = 'alert("' & __FFValue2JavaScript($vOption) & '")'
            $bLoadWait = False
        Case $sActionL = "chrome" And $vOption <> ""
            $sCommand = '.location.href="' & __FFChromeSelect($vOption) & '"'
        Case $sActionL = "blank"
            $vOption = "blank"
            ContinueCase
        Case $sActionL = "about"
            $sCommand = '.location.href="about:' & $vOption & '"'
        Case $sActionL = "scrollxy" And IsInt($vOption) And IsInt($vOption2)
            $sCommand = "window.content.scrollBy(" & $vOption & "," & $vOption2 & ");"
            $bLoadWait = False
        Case $sActionL = "zoom" And $vOption = ""
            $vOption = 1
            ContinueCase
        Case $sActionL = "zoom" And IsNumber($vOption)
            $sCommand = "gBrowser.selectedBrowser.markupDocumentViewer.fullZoom=" & $vOption
            $bLoadWait = False
        Case $sActionL = "resetconsole"
            $sCommand = ";" & @CRLF & "repl.home()"
            $bLoadWait = False
        Case Else
            SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "$sAction: " & $sAction & " or " & "$vOption :" & $vOption & " or " & "$vOption2 :" & $vOption2))
            Return ""
    EndSelect

    Local $sRet = _FFCmd($sCommand)
    If Not @error Then
        If $bLoadWait Then _FFLoadWait()
        __FFSetTopDocument()
        Return $sRet
    Else
        SetError(@error)
        Return ""
    EndIf

EndFunc   ;==>_FFAction

; #FUNCTION# ===================================================================
; Name ..........: _FFClick
; Description ...: Simulates a click on an element.
; Beschreibung ..: Simuliert einen Klick auf ein Element.
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFClick($sElement[, $sMode = "elements"[, $iIndex = 0[, $bLoadWait = True]]])
; Parameter(s): .: $sElement    - Element to click on
;                  $sMode       - Optional: (Default = "elements") :
;                               | elements
;                               | id
;                               | name
;                               | class
;                               | tag
;                  $iIndex      - Optional: (Default = 0) : Index if $sMode = class, name, tag
;                  $bLoadWait   - Optional: (Default = True) :
; Return Value ..: Success      - 1
;                  Failure      - 0
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Sat Feb 26 16:57:09 CET 2011 @706 /Internet Time/
; Link ..........:
; Related .......: _FFImageClick, _FFLinkClick. _FFImageMapClick
; Example .......: Yes
; ==============================================================================
Func _FFClick($sElement, $sMode = "elements", $iIndex = 0, $bLoadWait = True)
    Local Const $sFuncName = "_FFClick"

    If Not IsInt($iIndex) Then
        SetError(__FFError($sFuncName, $_FF_ERROR_InvalidDataType, "(int) $iIndex: " & $iIndex))
        Return 0
    EndIf

    If $sMode = Default Then $sMode = "elements"
    If $iIndex = Default Then $iIndex = 0

    Switch StringLower($sMode)
        Case "elements"
            If StringLeft($sElement, 7) = "OBJECT|" Then $sElement = StringMid($sElement, 8)
        Case "id"
            $sElement = ".getElementById('" & $sElement & "')"
        Case "name"
            $sElement = ".getElementsByName('" & $sElement & "')[" & $iIndex & "]"
        Case "class"
            $sElement = ".getElementsByClassName('" & $sElement & "')[" & $iIndex & "]"
        Case "tag"
            $sElement = ".getElementsByTagName('" & $sElement & "')[" & $iIndex & "]"
        Case Else
            SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "(elements|id|name|class|tag) $sMode: " & $sMode))
            Return 0
    EndSwitch

    If StringLeft($sElement, 1) = "." Then $sElement = "FFau3.WCD" & $sElement

    Local $RetVal = _FFCmd("FFau3.simulateEvent(" & $sElement & ",'MouseEvents','click');")
    If Not @error And $RetVal <> "_FFCmd_Err" And $RetVal = 1 Then
        Sleep(25)
        If $bLoadWait Then Return _FFLoadWait()
        __FFSetTopDocument()
        Return 1
    Else
        SetError(__FFError($sFuncName, $_FF_ERROR_NoMatch, "$sElement: " & $sElement))
        Return 0
    EndIf

EndFunc   ;==>_FFClick

; #FUNCTION# ===================================================================
; Name ..........: _FFDialogWait
; Description ...: Waits for a browser-dialog-message (e.g. alert) and closes it.
; Beschreibung ..: Wartet auf ein Dialog-Fenster (z.B.: alert) und schließt es.
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFDialogWait($sText[, $sTitle = ""[, $sClose = "close"[, $iTimeOut = 10000]]])
; Parameter(s): .: $sText       - Text in the dialog (substring)
;                  $sTitle      - Optional: (Default = "") : Window-title of the dialog (substring)
;                  $bClose      - Optional: (Default = "close") :
;                               | close = Just closes the dialog window
;                               | open = Do nothing
;                               | ok = Uses the "ok"-button
;                               | cancel = Uses the"cancel"-button
;                  $iTimeOut    - Optional: (Default = 10000) : Timeout for waiting (min. 1000ms)
; Return Value ..: Success      - 1
;                  Failure      - 0
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Tue Apr 14 12:18:08 CEST 2009
; Link ..........:
; Related .......: _FFLoadWait
; Example .......: Yes
; ==============================================================================
Func _FFDialogWait($sText, $sTitle = "", $sClose = "close", $iTimeOut = 10000)
    Local Const $sFuncName = "_FFDialogWait"
    If $sTitle = "" And $sText = "" Then
        SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "Empty String: $sText and $sTitle"))
        Return 0
    EndIf
    If $sClose = Default Then $sClose = "close"
    If $iTimeOut < 1000 Then $iTimeOut = 1000

    Local $bFound = False, $b1 = False, $b2 = False

    Local $iTimer = TimerInit()
    While TimerDiff($iTimer) < $iTimeOut
        If _FFCmd('FFau3.obj=Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator).getMostRecentWindow("").window;' & _
                'FFau3.obj.document.documentURI') = "chrome://global/content/commonDialog.xul" Then
            If $sTitle <> "" Then
                If StringInStr(_FFCmd("FFau3.obj.title"), $sTitle) Then $b1 = True
            EndIf
            If $sText <> "" Then
                If StringInStr(_FFCmd("FFau3.obj.document.documentElement.textContent"), $sText) Then $b2 = True
            EndIf
            Select
                Case $sTitle = "" And $sText <> "" And Not $b1 And $b2
                    $bFound = True
                Case $sTitle <> "" And $sText <> "" And $b1 And $b2
                    $bFound = True
                Case $sTitle <> "" And $sText = "" And $b1 And Not $b2
                    $bFound = True
                Case Else
                    $bFound = False
            EndSelect
            If $bFound Then
                Switch StringLower($sClose)
                    Case "close" ; just close the window
                        _FFCmd("FFau3.obj.close()")
                    Case "ok"
                        _FFCmd("FFau3.obj.document.documentElement.acceptDialog()")
                    Case "cancel"
                        _FFCmd("FFau3.obj.document.documentElement.cancelDialog()")
                    Case "open" ; do nothing
                    Case Else
                        SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "$sClose: " & $sClose))
                        Return 0
                EndSwitch
                Return 1
            EndIf
        EndIf
        Sleep(500)
    WEnd

    SetError(__FFError($sFuncName, $_FF_ERROR_Timeout, Round(TimerDiff($iTimer)) & "ms > " & $iTimeOut & "ms"))
    Return 0
EndFunc   ;==>_FFDialogWait

; #FUNCTION# ===================================================================
; Name ..........: _FFImageClick
; Description ...: Clicks an image-link.
; Beschreibung ..: Klickt einen Image-Link.
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFImageClick($vSearch[, $sMode = "src"[, $bLoadWait = True]])
; Parameter(s): .: $vSearch     - String to search or number (0-n) in index mode (the search is performed in the attributes of the image and the link)
;                  $sMode       - Optional: (Default = "src") :
;                               | alt
;                               | href
;                               | id
;                               | index
;                               | name
;                               | src
;                               | title
;                  $bLoadWait   - Optional: (Default = True) :
; Return Value ..: Success      - 1
;                  Failure      - 0
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Fri Dec 04 14:55:57 CET 2009
; Link ..........:
; Related .......: _FFClick, _FFLinkClick, _FFImageMapClick
; Example .......: Yes
; ==============================================================================
Func _FFImageClick($vSearch, $sMode = "src", $bLoadWait = True)
    Local Const $sFuncName = "_FFImageClick"

    Local $sX
    $sMode = StringLower($sMode)
    $vSearch = __FFValue2JavaScript($vSearch)

    Switch $sMode
        Case "index"
            If Not IsInt($vSearch) Then
                SetError(__FFError($sFuncName, $_FF_ERROR_InvalidDataType, "(int) $vSearch: " & $vSearch))
                Return 0
            EndIf
            $sX = ".images[" & $vSearch & "]"
        Case "id", "src", "href", "alt", "name", "title"
            Switch $_FF_SEARCH_MODE
                Case 0
                    $sX = "contains(@" & $sMode & ",'" & $vSearch & "')"
                Case 1
                    $sX = "@" & $sMode & "='" & $vSearch & "'"
            EndSwitch
        Case Else
            SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "(src|href|alt|name|title|id|index) $sMode: " & $sMode))
            Return 0
    EndSwitch

    If $sMode <> "index" Then
        If _FFClick(_FFXPath("//a//img[" & $sX & "] | //a[" & $sX & "]//img", "", 9)) Then
            If $bLoadWait Then Return _FFLoadWait()
            Return 1
        EndIf
    Else
        If _FFClick($sX) Then
            If $bLoadWait Then Return _FFLoadWait()
            Return 1
        EndIf
    EndIf

    SetError(__FFError($sFuncName, $_FF_ERROR_NoMatch, "$vSearch: " & $vSearch))
    Return 0

EndFunc   ;==>_FFImageClick

; #FUNCTION# ===================================================================
; Name ..........: _FFImageMapClick
; Description ...: Clicks on area of an image-map
; Beschreibung ..: Klickt auf ein Area einer Image-map
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFImageMapClick($vArea[, $sModeArea = "index"[, $vMap = 0[, $sModeMap = "index"[, $bLoadWait = True]]]])
; Parameter(s): .: $vArea       - (substring)
;                  $sModeArea   - Optional: (Default = "index") :
;                               | alt
;                               | class
;                               | coords
;                               | href
;                               | id
;                               | index
;                               | name
;                               | title
;                  $vMap        - Optional: (Default = 0) : (substring)
;                  $sModeMap    - Optional: (Default = "index") :
;                               | class
;                               | id
;                               | index
;                               | name
;                               | title
;                  $bLoadWait   - Optional: (Default = True) :
; Return Value ..: Success      - 1
;                  Failure      - 0
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Mon Sep 28 10:39:55 CEST 2009
; Related .......: _FFClick, _FFLinkClick, _FFImageClick
; Example .......: Yes
; ==============================================================================
Func _FFImageMapClick($vArea, $sModeArea = "index", $vMap = 0, $sModeMap = "index", $bLoadWait = True)
    Local Const $sFuncName = "_FFImageMapClick"

    Local $sXPath

    $sModeArea = StringLower($sModeArea)
    $sModeMap = StringLower($sModeMap)

    Switch $sModeMap
        Case "index"
            If Not IsInt($vMap) Then
                SetError(__FFError($sFuncName, $_FF_ERROR_InvalidDataType, "(int) $vMap: " & $vMap))
                Return 0
            EndIf
            $sXPath = "//map[" & $vMap + 1 & "]"
        Case "id", "name", "title", "class"
            $sXPath = "//map[contains(@" & $sModeMap & ",'" & $vMap & "')]"
        Case Else
            SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "(name|title|id|index|class) $sModeMap: " & $sModeMap))
            Return 0
    EndSwitch

    Switch $sModeArea
        Case "index"
            If Not IsInt($vMap) Then
                SetError(__FFError($sFuncName, $_FF_ERROR_InvalidDataType, "(int) $vArea: " & $vArea))
                Return 0
            EndIf
            $sXPath &= "//area[" & $vArea & "]"
        Case "id", "name", "title", "alt", "href", "class", "coords"
            $sXPath &= "//area[contains(@" & $sModeArea & ",'" & $vArea & "')]"
        Case Else
            SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "(index|id|name|title|alt|href|coords|class) $sModeArea: " & $sModeArea))
            Return 0
    EndSwitch

    If _FFClick(_FFXPath($sXPath, "", 9)) Then
        If $bLoadWait Then Return _FFLoadWait()
        Return 1
    EndIf

    SetError(__FFError($sFuncName, $_FF_ERROR_NoMatch))
    Return 0
EndFunc   ;==>_FFImageMapClick

; #FUNCTION# ===================================================================
; Name ..........: _FFImagesGetBySize
; Description ...: Returns an array with the index of matching images.
; Beschreibung ..: Liefert ein Array mit den Indizes der passenden Bilder.
; Syntax ........: _FFImagesGetBySize($iHeight, $iWidth[, $sMode = "eq"[, $iPercent = 0]])
; Parameter(s): .: $iHeight     - Heigth of the image(s)
;                  $iWidth      - Width of the image(s)
;                  $sMode       - Optional (Default = "eq") :
;                               | eq
;                               | lt
;                               | gt
;                  $iPercent    - Optional (Default = 0) : +/- tolerance in percent for $sMode = "eq" (min=0, max=100)
; Return Value ..: Success      - array[0] > 0
;                  Failure      - array[0] = 0
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Mon Sep 28 10:40:47 CEST 2009
; Link ..........:
; Related .......:
; Example .......: Yes
; ==============================================================================
Func _FFImagesGetBySize($iHeight, $iWidth, $sMode = "eq", $iPercent = 0)
    Local Const $sFuncName = "_FFImagesGetBySize"
    Local $aRet[1] = [0]

    If $iPercent < 0 Or $iPercent > 100 Then $iPercent = 0
    $sMode = StringLower($sMode)

    If Not IsInt($iHeight) Then
        SetError(__FFError($sFuncName, $_FF_ERROR_InvalidDataType, "(int) $iHeight: " & $iHeight))
        Return $aRet
    EndIf
    If Not IsInt($iWidth) Then
        SetError(__FFError($sFuncName, $_FF_ERROR_InvalidDataType, "(int) $iWidth: " & $iWidth))
        Return $aRet
    EndIf
    Switch $sMode
        Case "eq", "lt", "gt"
        Case Else
            SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "(eq|lt|gt) $sMode: " & $sMode))
            Return $aRet
    EndSwitch

    Local $sCommand = StringFormat("FFau3.SearchImageBySize(%s,%s,'%s',%s);", $iHeight, $iWidth, $sMode, $iPercent)
    Local $iIndex = StringStripWS(_FFCmd($sCommand, 10000), 3)
    $aRet = StringSplit($iIndex, " ")
    If Not @error And $aRet[0] > 0 Then
        For $i = 1 To $aRet[0]
            $aRet[$i] = Int($aRet[$i])
        Next
    Else
        SetError(__FFError($sFuncName, $_FF_ERROR_NoMatch))
        Return $aRet
    EndIf

    Return $aRet
EndFunc   ;==>_FFImagesGetBySize

; #FUNCTION# ===================================================================
; Name ..........: _FFLinkClick
; Description ...: Simulates a click on a link.
; Beschreibung ..: Simuliert einen Klick auf einen Link
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFLinkClick($vSearch[, $sMode = "href"[, $bLoadWait = True]])
; Parameter(s): .: $vSearch     - (Sub)String to search or number (0-n) in index mode
;                  $sMode       - Optional: (Default = "href") :
;                               | href
;                               | alt
;                               | name
;                               | title
;                               | id
;                               | index
;                  $bLoadWait   - Optional: (Default = True) :
; Return Value ..: Success      - 1
;                  Failure      - 0
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Fri Jan 22 16:09:48 CET 2010
; Link ..........:
; Related .......: _FFClick, _FFImageClick, _FFImageMapClick
; Example .......: Yes
; ==============================================================================
Func _FFLinkClick($vSearch, $sMode = "href", $bLoadWait = True)
    Local Const $sFuncName = "_FFLinkClick"

    Local $sX
    $sMode = StringLower($sMode)
    If Not $sMode = "index" Then $vSearch = __FFValue2JavaScript($vSearch)

    Switch $sMode
        Case "index"
            If Not IsInt($vSearch) Then
                SetError(__FFError($sFuncName, $_FF_ERROR_InvalidDataType, "(int) $vSearch: " & $vSearch))
                Return 0
            EndIf
            $sX = ".links[" & $vSearch & "]"
        Case "text"
            $sX = "//a[contains(.,'" & $vSearch & "')]"
        Case "href", "name", "title", "id"
            Switch $_FF_SEARCH_MODE
                Case 0
                    $sX = "//a[contains(@" & $sMode & ",'" & $vSearch & "')]"
                Case 1
                    $sX = "//a[@" & $sMode & "='" & $vSearch & "']"
            EndSwitch
        Case Else
            SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "(index|href|text|name|title|id) $sMode: " & $sMode))
            Return 0
    EndSwitch

    If $sMode <> "index" Then
        Return _FFClick(_FFXPath($sX, "", 9), "elements", 0, $bLoadWait)
    Else
        Return _FFClick($sX, "elements", 0, $bLoadWait)
    EndIf

    SetError(__FFError($sFuncName, $_FF_ERROR_NoMatch, "$vSearch: " & $vSearch))
    Return 0

EndFunc   ;==>_FFLinkClick

; #FUNCTION# ===================================================================
; Name ..........: _FFFrameLeave
; Description ...: Leaves the currently entered frame
; Beschreibung ..: Verläßt den aktuellen Frame
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFFrameLeave()
; Parameter(s): .:
; Return Value ..: Success      - 1
;                  Failure      - 0
; Author(s) .....: Thorsten Willert
; Date ..........: Fri Sep 18 11:08:20 CEST 2009 @422 /Internet Time/
; Link ..........:
; Related .......: _FFFrameEnter
; Example .......: Yes
; ==============================================================================
Func _FFFrameLeave()
    ;Local Const $sFuncName = "_FFFrameLeave"
    Local $bTrc = $_FF_COM_TRACE
    $_FF_COM_TRACE = False

    Local $sFrame = StringMid($_FF_FRAME, 1, StringInStr($_FF_FRAME, ".", 2, -1) - 1)
    _FFCmd("FFau3.WCD=window.content.wrappedJSObject." & $sFrame & ".document;")
    If Not @error Then
        $_FF_COM_TRACE = $bTrc
        $_FF_FRAME = $sFrame
        Return 1
    EndIf

    $_FF_COM_TRACE = $bTrc
    Return 0
EndFunc   ;==>_FFFrameLeave

; #FUNCTION# ===================================================================
; Name ..........: _FFFrameEnter
; Description ...: Selects a frame, which all subsequent commands apply on.
; Beschreibung ..: Wählt einen Frame aus, auf den alle nachfolgenden Befehle wirken.
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFFrameEnter($vFrame[, $sMode = "index"])
; Parameter(s): .: $vFrame      - Frame name or id or number in index mode
;                  $sMode       - Optional: (Default = "index") :
;                               | name
;                               | id
;                               | index
; Return Value ..: Success      - 1
;                  Failure      - 0
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Sat Oct 24 21:05:36 CEST 2009
; Link ..........:
; Related .......: _FFFrameLeave
; Example .......: Yes
; ==============================================================================
Func _FFFrameEnter($vFrame, $sMode = "index")
    Local Const $sFuncName = "_FFFrameEnter"

    Local $sFrame = $_FF_FRAME
    Local $bTrc = $_FF_COM_TRACE

    Switch StringLower($sMode)
        Case "index"
            If IsInt($vFrame) Then
                $sFrame &= ".frames[" & $vFrame & "]"
            Else
                SetError(__FFError($sFuncName, $_FF_ERROR_InvalidDataType, "(int) $vFrame: " & $vFrame))
                Return 0
            EndIf
        Case "name", "id"
            If IsString($vFrame) Then
                $sFrame &= "." & $vFrame
            Else
                SetError(__FFError($sFuncName, $_FF_ERROR_InvalidDataType, "(string) $vFrame: " & $vFrame))
                Return 0
            EndIf
        Case Else
            SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "(index|name|id) $sMode: " & $sMode))
            Return 0
    EndSwitch

    $_FF_COM_TRACE = False
    _FFCmd("FFau3.WCD=window.content.wrappedJSObject." & $sFrame & ".document;")
    If Not @error Then
        $_FF_FRAME = $sFrame
        $_FF_COM_TRACE = $bTrc
        Return 1
    EndIf

    $_FF_COM_TRACE = $bTrc
    SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "Frame not found $vFrame: " & $vFrame))
    Return 0
EndFunc   ;==>_FFFrameEnter

; #FUNCTION# ===================================================================
; Name ..........: _FFGetLength
; Description ...: Returns the length of the elements in $sMode
; Beschreibung ..: Gibt die Anzahl der angegebenen Elemente zurück.
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFGetLength([$sMode = "links"])
; Parameter(s): .: $sMode       - Optional: (Default = "links") :
;                               | links
;                               | images
;                               | forms
;                               | frames
;                               | anchors
;                               | tables
;                               | styleSheets
;                               | tabs
;                               | history
;                               | applets
;                               | embeds
;                               | plugins
;                               | tag
; Return Value ..: Success      - Length of the elements
;                  Failure      - 0
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Mon Mar 23 23:24:13 CET 2009 @975 /Internet Time/
; Link ..........:
; Related .......:
; Example .......: Yes
; ==============================================================================
Func _FFGetLength($sMode = "links")
    Local Const $sFuncName = "_FFGetLength"

    $sMode = StringLower($sMode)

    Switch $sMode
        Case "links", "images", "forms", "anchors", "applets", "embeds"
            Return _FFCmd("." & $sMode & ".length")
        Case "tabs"
            Return _FFCmd("gBrowser.tabContainer.childNodes.length")
        Case "frames"
            Return _FFCmd("content.frames.length")
        Case "tables"
            Return _FFCmd(".getElementsByTagName('table').length")
        Case "history"
            Return _FFCmd("content.history.length")
        Case "stylesheets"
            Return _FFCmd(".styleSheets.length")
        Case "plugins"
            Return _FFCmd("navigator.plugins.length")
        Case Else
            Local $RetVal = _FFCmd(".getElementsByTagName('" & $sMode & "').length;")
            If Not @error And $RetVal <> "_FFCmd_Err" Then
                Return $RetVal
            Else
                SetError(__FFError($sFuncName, $_FF_ERROR_NoMatch, "$sMode: " & $sMode))
                Return 0
            EndIf
    EndSwitch

    Return 0

EndFunc   ;==>_FFGetLength

; #FUNCTION# ===================================================================
; Name ..........: _FFLinksGetAll
; Description ...: Returns an array with informations about all existing links.
; Beschreibung ..: Gibt ein Array mit Informationen über alle vorhandenen Links zurück.
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFLinksGetAll()
; Parameter(s): .:
; Return Value ..: Success      - 2 dim array with the link informations:
;                               | array[n][0] = href
;                               | array[n][1] = hash
;                               | array[n][2] = search
;                               | array[n][3] = name
;                               | array[n][4] = id
;                               | array[n][5] = text
;                               | array[n][6] = innerHTML
;                               | array[n][7] = target
;                               | array[n][8] = protocol
;                               | array[n][9] = port
;                  Failure      - array[0][0] = 0
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Tue Sep 22 12:00:34 CEST 2009 @458 /Internet Time/
; Link ..........:
; Related .......:
; Example .......: Yes
; ==============================================================================
Func _FFLinksGetAll()
    Local Const $sFuncName = "_FFLinksGetAll"

    Local $aInfo, $sInfo, $aRet[1][9], $aTmp
    Local $sDelimiter

    Local $bTrc = $_FF_COM_TRACE
    $_FF_COM_TRACE = False

    If _FFGetLength() > 0 Then
        $sDelimiter = "FF" & Random(1000, 9999, 1)
        $sInfo = _FFCmd('FFau3.GetLinks("' & $sDelimiter & '");')
        $aInfo = StringSplit($sInfo, @CRLF)
        If @error Then
            $_FF_COM_TRACE = $bTrc
            SetError(__FFError($sFuncName, $_FF_ERROR_NoMatch))
            Return $aRet[0][0] = 0
        EndIf
        ReDim $aRet[$aInfo[0] - 1][9]
        For $i = 1 To $aInfo[0] - 1
            $aTmp = StringSplit($aInfo[$i], $sDelimiter, 1)
            If @error Then
                SetError(__FFError($sFuncName, $_FF_ERROR_RetValue, "StringSplit: " & $aInfo[$i]))
                ExitLoop
            EndIf
            If UBound($aTmp) <> 11 Then
                $sDelimiter = "FF" & Random(1000, 9999, 1)
                $sInfo = _FFCmd("FFau3.GetLinkInfo(" & $i & " ,'top','" & $sDelimiter & "')")
                $aTmp = StringSplit($sInfo, $sDelimiter, 1)
            EndIf
            For $j = 1 To $aTmp[0] - 1
                $aRet[$i - 1][$j - 1] = $aTmp[$j]
            Next
        Next
        $_FF_COM_TRACE = $bTrc
        Return $aRet
    Else
        SetError(__FFError($sFuncName, $_FF_ERROR_NoMatch))
        $aRet[0][0] = 0
    EndIf

    $_FF_COM_TRACE = $bTrc
    SetError(__FFError($sFuncName, $_FF_ERROR_GeneralError))
    Return $aRet[0][0] = 0
EndFunc   ;==>_FFLinksGetAll

; #FUNCTION# ===================================================================
; Name ..........: _FFConnect
; Description ...: Connects to FireFox / MozRepl
; Beschreibung ..: Stellt eine Verbindung mit Firefox / MozRepl her.
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFConnect([$IP = "127.0.0.1"[, $iPort = 4242[, $iTimeOut = 60000]]])
; Parameter(s): .: $IP          - Optional: (Default = "127.0.0.1") :
;                  $iPort       - Optional: (Default = 4242) :
;                  $iTimeOut    - Optional: (Default = 60000) :
; Return Value ..: Success      - 1 / $_FF_GLOBAL_SOCKET > -1
;                  @EXTENDED    - 1 = Non Browser-window
;                               | 2 = Browser-window
;                  Failure      - 0 / $_FF_GLOBAL_SOCKET = -1
;                  @ERROR       -
;                  @EXTENDED    - 0
; Author(s) .....: Thorsten Willert
; Date ..........: Tue Aug 18 09:36:57 CEST 2009
; Link ..........: http://msdn.microsoft.com/en-us/library/ms740668(VS.85).aspx
; Related .......: _FFDisConnect, _FFIsConnected, _FFStart
; Example .......: Yes
; ==============================================================================
Func _FFConnect($IP = "127.0.0.1", $iPort = 4242, $iTimeOut = 60000)
    Local Const $sFuncName = "_FFConnect"
    Local $Extended = 2

    If $_FF_CON_DELAY > 100 Then Opt("TCPTimeout", $_FF_CON_DELAY)

    If $IP = Default Then $IP = "127.0.0.1"
    If $iPort = Default Then $iPort = 4242
    If $iTimeOut = Default Then $iTimeOut = 60000

    If Not __FFIsIP($IP) Then
        SetError(__FFError($sFuncName, $_FF_ERROR_InvalidDataType, $IP))
        Return 0
    EndIf
    If Not __FFIsPort($iPort) Then
        SetError(__FFError($sFuncName, $_FF_ERROR_InvalidDataType, $iPort))
        Return 0
    EndIf

    Local $iTCPErr
    Local $bTrace = $_FF_COM_TRACE
    $_FF_COM_TRACE = False

    ConsoleWrite("_FFConnect: OS:" & @TAB & @OSVersion & " " & @OSType & " " & @OSBuild & " " & @OSServicePack & @CRLF)
    ConsoleWrite("_FFConnect: AutoIt:" & @TAB & @AutoItVersion & @CRLF)
    ConsoleWrite("_FFConnect: FF.au3:" & @TAB & $_FF_AU3VERSION & @CRLF)
    ConsoleWrite("_FFConnect: IP:" & @TAB & $IP & @CRLF)
    ConsoleWrite("_FFConnect: Port:" & @TAB & $iPort & @CRLF)

    TCPStartup()
    If Not @error Then
        ; delay for connection over network
        $_FF_CON_DELAY = Ping($IP)
        If @error Then
            SetError(__FFError($sFuncName, $_FF_ERROR_GeneralError, "Ping Error: " & @error))
            $_FF_CON_DELAY = $_FF_COM_DELAY_MAX
        EndIf
        $_FF_CON_DELAY += Round($_FF_CON_DELAY * 0.5)
        ConsoleWrite("_FFConnect: Delay: " & @TAB & $_FF_CON_DELAY & "ms" & @CRLF)

        ; trying to connect
        Local $iTimeOutTimer = TimerInit()
        While 1
            $_FF_GLOBAL_SOCKET = TCPConnect($IP, $iPort)
            $iTCPErr = @error
            Sleep(500)
            If __FFIsSocket($_FF_GLOBAL_SOCKET) Then ExitLoop
            If (TimerDiff($iTimeOutTimer) > $iTimeOut) Then ; Profil laden
                SetError(__FFError($sFuncName, $_FF_ERROR_Timeout, "TCPConnect Error: " & $iTCPErr))
                $_FF_GLOBAL_SOCKET = -1
                ExitLoop
            EndIf
        WEnd
        If $_FF_GLOBAL_SOCKET <> -1 Then
            ConsoleWrite("_FFConnect: Socket: " & @TAB & $_FF_GLOBAL_SOCKET & @CRLF)
            If __FFWaitForRepl(10000) Then
                _FFCmd(".browserDOMWindow")
                If @error Then
                    SetError(__FFError($sFuncName, $_FF_ERROR_GeneralError, "Warning: Connected to a non browser-window"))
                    $Extended = 1
                EndIf
                ConsoleWrite("_FFConnect: Browser:" & @TAB & _FFCmd("navigator.userAgent") & @CRLF)
                __FFSendJavaScripts()
                $_FF_COM_TRACE = $bTrace
                Return SetError(0, $Extended, 1)
            EndIf
        Else
            TCPShutdown()
            $_FF_COM_TRACE = $bTrace
            Return SetError(__FFError($sFuncName, $_FF_ERROR_GeneralError, "Timeout: Can not connect to FireFox/MozRepl on: " & $IP & ":" & $iPort), 0, 0)
        EndIf
    Else
        $_FF_COM_TRACE = $bTrace
        Return SetError(__FFError($sFuncName, $_FF_ERROR_GeneralError, "TCPStartup Error: " & @error), 0, 0)
    EndIf

    $_FF_COM_TRACE = $bTrace
    Return SetError($_FF_ERROR_GeneralError, $Extended, 0)
EndFunc   ;==>_FFConnect

; #FUNCTION# ===================================================================
; Name ..........: _FFDisConnect
; Description ...: Disconnects from FireFox
; Beschreibung ..: Trennt die Verbindung mit FireFox / MozRepl
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFDisConnect()
; Parameter(s): .:
; Return Value ..: Success      - 1 / $_FF_GLOBAL_SOCKET = -1
;                  Failure      - 0
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Wed Apr 15 09:54:09 CEST 2009
; Link ..........: http://msdn.microsoft.com/en-us/library/ms740668(VS.85).aspx
; Related .......: _FFConnect, _FFIsConnected, _FFStart
; Example .......: Yes
; ==============================================================================
Func _FFDisConnect()
    Local Const $sFuncName = "_FFDisConnect"

    Opt("TCPTimeout", 200)

    If __FFIsSocket($_FF_GLOBAL_SOCKET) Then
        __FFSend("repl.quit()")
        TCPCloseSocket($_FF_GLOBAL_SOCKET)
        If @error Then
            SetError(__FFError($sFuncName, $_FF_ERROR_GeneralError, "TCP Error: " & @error))
            Return 0
        EndIf
        TCPShutdown()
        If Not @error Then
            If $_FF_COM_TRACE Then ConsoleWrite("_FFDisConnect: disconnected" & @CRLF)
            $_FF_FRAME = 'top'
            $_FF_GLOBAL_SOCKET = -1
            Return 1
        Else
            SetError(__FFError($sFuncName, $_FF_ERROR_GeneralError, "TCP Error: " & @error))
            Return 0
        EndIf
    Else
        SetError(__FFError($sFuncName, $_FF_ERROR_SocketError, $_FF_GLOBAL_SOCKET))
        Return 0
    EndIf

EndFunc   ;==>_FFDisConnect

; #FUNCTION# ===================================================================
; Name ..........: _FFIsConnected
; Description ...: Connection status to FireFox / MozRepl
; Beschreibung ..: Liefert den Status der Verbindung mit FireFox / MozRepl
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFIsConnected()
; Parameter(s): .:
; Return Value ..: Success      - 1
;                  Failure      - 0
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Mon Sep 28 11:03:44 CEST 2009
; Link ..........:
; Related .......: _FFConnect, _FFDisConnect, _FFStart
; Example .......: Yes
; ==============================================================================
Func _FFIsConnected()
    Local Const $sFuncName = "_FFIsConnected"

    If __FFIsSocket($_FF_GLOBAL_SOCKET) And _FFCmd("FFau3 != null?1:0") = 1 Then Return 1

    SetError(__FFError($sFuncName, $_FF_ERROR_SocketError, $_FF_GLOBAL_SOCKET))
    Return 0
EndFunc   ;==>_FFIsConnected

; #FUNCTION# ===================================================================
; Name ..........: _FFFormCheckBox
; Description ...: Checks or unchecks a CheckBox in a form.
; Beschreibung ..: Wählt eine Checkbox an oder ab.
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFFormCheckBox($vBox[, $bChecked = True[, $iBoxNameIndex = 0[, $sBoxMode = "index"[, $vForm = 0[, $sFormMode = "index"[, $bCheckBox = True]]]]]])
; Parameter(s): .: $vBox        - Index name, id or value of the CheckBox
;                  $bChecked    - Optional: (Default = True) :
;                               | True
;                               | False
;                  $iBoxNameIndex - Optional: (Default = 0) : Index if $sBoxMode = "name"
;                  $sBoxMode    - Optional: (Default = "index") :
;                               | index
;                               | name
;                               | id
;                               | value
;                  $vForm       - Optional: (Default = 0) : Index, name or id of the Form
;                  $sFormMode   - Optional: (Default = "index") :
;                               | index
;                               | name
;                               | id
;                               | action
;                               | title
;                  $bCheckBox   - Optional: (Default = True) : Internal use if the function should work for RadioButtons
; Return Value ..: Success      - 1
;                  Failure      - 0
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Fri Nov 06 18:10:36 CET 2009
; Link ..........:
; Related .......: _FFFormOptionSelect, _FFFormRadioButton, _FFFormReset, _FFFormSubmit
; Example .......: Yes
; ==============================================================================
Func _FFFormCheckBox($vBox, $bChecked = True, $iBoxNameIndex = 0, $sBoxMode = "index", $vForm = 0, $sFormMode = "index", $bCheckBox = True)
    Local Const $sFuncName = "_FFFormCheckBox"

    ; Default parameters
    ;If $bChecked = Default Then $bChecked = true
    If $iBoxNameIndex = Default Then $iBoxNameIndex = 0
    If $sBoxMode = Default Then $sBoxMode = "index"
    If $vForm = Default Then $vForm = 0
    If $sFormMode = Default Then $sFormMode = "index"

    Local $sType
    If $bCheckBox Then
        $sType = "checkbox"
    Else
        $sType = "radio"
    EndIf

    $sBoxMode = StringLower($sBoxMode)
    $sFormMode = StringLower($sFormMode)

    If Not IsBool($bChecked) Then
        SetError(__FFError($sFuncName, $_FF_ERROR_InvalidDataType, "(bool) $bChecked: " & $bChecked))
        Return 0
    EndIf

    Local $sCommand = "checked=" & __FFB2S($bChecked)
    Local $sForm, $sCheckBox

    Switch $sFormMode
        Case "index"
            If Not IsInt($vForm) Then
                SetError(__FFError($sFuncName, $_FF_ERROR_InvalidDataType, "(int) $vForm: " & $vForm))
                Return 0
            EndIf
            $sForm = $vForm + 1
        Case "id", "name", "action", "title"
            $sForm = StringFormat("@%s='%s'", $sFormMode, $vForm)
        Case Else
            SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "(index|name|id) $sFormMode: " & $sFormMode))
            Return 0
    EndSwitch

    Switch $sBoxMode
        Case "index"
            If Not IsInt($vBox) Then
                SetError(__FFError($sFuncName, $_FF_ERROR_InvalidDataType, "(int) $vBox: " & $vBox))
                Return 0
            EndIf
            $sCheckBox = "position()=" & $vBox + 1
        Case "name"
            If Not IsInt($iBoxNameIndex) Then
                SetError(__FFError($sFuncName, $_FF_ERROR_InvalidDataType, "(int) $iBoxNameIndex: " & $iBoxNameIndex))
                Return 0
            EndIf
            $sCheckBox = StringFormat("@name='%s' and position()=%i", $vBox, $iBoxNameIndex + 1)
        Case "id", "value"
            $sCheckBox = StringFormat("@%s='%s'", $sBoxMode, $vBox)
        Case Else
            SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "(index|name|id|value) $sBoxMode: " & $sBoxMode))
            Return 0
    EndSwitch

    _FFXPath(StringFormat("//form[%s]//input[@type='%s' and %s]", $sForm, $sType, $sCheckBox), $sCommand, 9)
    If Not @error Then
        Return 1
    Else
        SetError(@error)
        Return 0
    EndIf

EndFunc   ;==>_FFFormCheckBox

; #FUNCTION# ===================================================================
; Name ..........: _FFFormGetElementsLength
; Description ...: Length of the form elements
; Beschreibung ..: Gibt die Anzahl der Elemente eines Formulars zurück.
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFFormGetElementsLength([$vForm = 0[, $sMode = "index"]])
; Parameter(s): .: $vForm       - Optional: (Default = 0) : Index (0-n), name or id
;                  $sMode       - Optional: (Default = "index") :
;                               | index
;                               | name
;                               | id
;                               | action
;                               | title
; Return Value ..: Success      - >0
;                  Failure      - 0
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Fri Nov 06 22:04:28 CET 2009
; Link ..........:
; Related .......: _FFGetLength
; Example .......: Yes
; ==============================================================================
Func _FFFormGetElementsLength($vForm = 0, $sMode = "index")
    Local Const $sFuncName = "_FFFormGetElementsLength"

    If $vForm = Default Then $vForm = 0
    If $sMode = Default Then $sMode = "index"
    $sMode = StringLower($sMode)
    Local $sForm

    Switch $sMode
        Case "index"
            If IsInt($vForm) Then
                $sForm = $vForm + 1
            Else
                SetError(__FFError($sFuncName, $_FF_ERROR_InvalidDataType, "(int) $vForm: " & $vForm))
                Return 0
            EndIf
        Case "name", "id", "action", "title"
            $sForm = "@" & $sMode & "='" & $vForm & "'"
        Case Else
            SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "(index|name|id|action|title) $sMode: " & $sMode))
            Return 0
    EndSwitch

    Local $bTrace = $_FF_COM_TRACE
    $_FF_COM_TRACE = False

    _FFXPath(StringFormat("//form[%s]", $sForm), "", 9)
    Local $sRet = _FFCmd("FFau3.xpath.elements.length")
    If Not @error Then
        $_FF_COM_TRACE = $bTrace
        Return $sRet
    Else
        $_FF_COM_TRACE = $bTrace
        SetError(__FFError($sFuncName, $_FF_ERROR_NoMatch, "$vForm: " & $vForm))
        Return 0
    EndIf
EndFunc   ;==>_FFFormGetElementsLength

; #FUNCTION# ===================================================================
; Name ..........: _FFFormOptionSelect
; Description ...: Selects an element of an OptionSelect.
; Beschreibung ..: Wählt ein Element eines OptionSelect aus.
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFFormOptionSelect([$vElement = 0[, $sElementMode = "index"[, $vOption = 0[, $sOptionMode = "index"[, $vForm = 0[, $sFormMode = "index"]]]]]])
; Parameter(s): .: $vElement    - Optional: (Default = 0) : index (0-n), name, id
;                  $sElementMode - Optional: (Default = "index") :
;                               | index
;                               | name
;                               | id
;                  $vOption     - Optional: (Default = 0) : index (0-n), name, id, text, value
;                  $sOptionMode - Optional: (Default = "index") :
;                               | index
;                               | name
;                               | id
;                               | text
;                               | value
;                  $vForm       - Optional: (Default = 0) : index (0-n), name, id
;                  $sFormMode   - Optional: (Default = "index") :
;                               | index
;                               | name
;                               | id
;                               | action
;                               | title
; Return Value ..: Success      - 1
;                  Failure      - 0 and sets
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Sun Mar 06 13:03:49 CET 2011 @544 /Internet Time/
; Link ..........:
; Related .......: _FFFormCheckBox, _FFFormRadioButton, _FFFormReset, _FFFormSubmit
; Example .......: Yes
; ==============================================================================
Func _FFFormOptionSelect($vElement = 0, $sElementMode = "index", $vOption = 0, $sOptionMode = "index", $vForm = 0, $sFormMode = "index")
    Local Const $sFuncName = "_FFFormOptionSelect"

    ; Default parameters
    If $vElement = Default Then $vElement = 0
    If $sElementMode = Default Then $sElementMode = "index"
    If $vOption = Default Then $vOption = 0
    If $sOptionMode = Default Then $sOptionMode = "index"
    If $vForm = Default Then $vForm = 0
    If $sFormMode = Default Then $sFormMode = "index"

    Local $sForm, $sElement, $sOption
    $sElementMode = StringLower($sElementMode)
    $sOptionMode = StringLower($sOptionMode)
    $sFormMode = StringLower($sFormMode)

    Switch $sFormMode
        Case "index"
            If Not IsInt($vForm) Then
                SetError(__FFError($sFuncName, $_FF_ERROR_InvalidDataType, "(int) $vForm: " & $vForm))
                Return 0
            EndIf
            $sForm = $vForm + 1
        Case "id", "name", "action", "title"
            $sForm = StringFormat("@%s='%s'", $sFormMode, $vForm)
        Case Else
            SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "(index|name|id) $sFormMode: " & $sFormMode))
            Return 0
    EndSwitch

    Switch $sElementMode
        Case "index"
            If Not IsInt($vElement) Then
                SetError(__FFError($sFuncName, $_FF_ERROR_InvalidDataType, "(int) $vElement: " & $vElement))
                Return 0
            EndIf
            $sElement = "position()=" & $vElement + 1
        Case "id", "name"
            $sElement = StringFormat("@%s='%s'", $sElementMode, $vElement)
        Case Else
            SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "(index|name|id) $sElementMode: " & $sElementMode))
            Return 0
    EndSwitch

    Switch $sOptionMode
        Case "index"
            If Not IsInt($vOption) Then
                SetError(__FFError($sFuncName, $_FF_ERROR_InvalidDataType, "(int) $vOption: " & $vOption))
                Return 0
            EndIf
            $sOption = "position()=" & $vOption + 1
        Case "text"
            $sOption = StringFormat("contains(.,'%s')", $vOption)
        Case "name", "id", "value"
            $sOption = StringFormat("@%s='%s'", $sOptionMode, $vOption)
        Case Else
            SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "(index|text|name|id|value) $sOptionMode: " & $sOptionMode))
            Return 0
    EndSwitch

    Local $sCommand = StringFormat("//form[%s]//select[%s]//option[%s]", $sForm, $sElement, $sOption)
    _FFXPath($sCommand, "selected=true", 9)
    If Not @error Then
        $sCommand = StringFormat("//form[%s]//select[%s]", $sForm, $sElement)
        _FFDispatchEvent(_FFXPath($sCommand, "", 9), "change")
        Return 1
    Else
        SetError(@error)
        Return 0
    EndIf

EndFunc   ;==>_FFFormOptionSelect

; #FUNCTION# ===================================================================
; Name ..........: _FFFormRadioButton
; Description ...: Selects a RadioButton in a form
; Beschreibung ..: Wählt einen RadioButton aus.
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFFormRadioButton($vRadioButton[, $iRadioButtonIndex = 0[, $sRadioButtonMode = "index"[, $vForm = 0[, $sFormMode = "index"]]]])
; Parameter(s): .: $vRadioButton - name, id or value
;                  $iRadioButtonIndex - Optional: (Default = 0) : RadioButton index (0-n)
;                  $sRadioButtonMode - Optional: (Default = "index") : RadioButton
;                               | index
;                               | name
;                               | id
;                               | value
;                  $vForm       - Optional: (Default = 0) : Form index or name
;                  $sFormMode   - Optional: (Default = "index") :
;                               | index
;                               | name
; Return Value ..: Success      - RadioButton state 1 or 0
;                  Failure      - -1
; Author(s) .....: Thorsten Willert
; Date ..........: Wed Mar 25 09:22:11 CET 2009 @390 /Internet Time/
; Link ..........:
; Related .......: _FFFormCheckBox, _FFFormOptionSelect, _FFFormReset, _FFFormSubmit
; Example .......: Yes
; ==============================================================================
Func _FFFormRadioButton($vRadioButton, $iRadioButtonIndex = 0, $sRadioButtonMode = "index", $vForm = 0, $sFormMode = "index")
    ;Local Const $sFuncName = "_FFFormRadioButton"
    Local $RetVal = _FFFormCheckBox($vRadioButton, True, $iRadioButtonIndex, $sRadioButtonMode, $vForm, $sFormMode, False)
    SetError(@error)
    Return $RetVal
EndFunc   ;==>_FFFormRadioButton

; #FUNCTION# ===================================================================
; Name ..........: _FFFormReset
; Description ...: Resets a form
; Beschreibung ..: Setzt ein Formular zurück.
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFFormReset([$vForm = 0[, $sMode = "index"]])
; Parameter(s): .: $vForm       - Optional: (Default = 0) : Index (0-n), name, id
;                  $sMode       - Optional: (Default = "index") :
;                               | Index
;                               | name
;                               | id
; Return Value ..: Success      - 1
;                  Failure      - 0
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Fri Sep 18 06:01:42 CEST 2009 @209 /Internet Time/
; Link ..........:
; Related .......: _FFFormCheckBox, _FFFormOptionSelect, _FFFormSubmit, _FFFormRadioButton
; Example .......: Yes
; ==============================================================================
Func _FFFormReset($vForm = 0, $sMode = "index")
    Local Const $sFuncName = "_FFFormReset"

    Local $sCommand

    Switch StringLower($sMode)
        Case "index"
            If Not IsInt($vForm) Then
                SetError(__FFError($sFuncName, $_FF_ERROR_InvalidDataType, "(int) $vForm: " & $vForm))
                Return 0
            EndIf
            $sCommand = '.forms[' & $vForm & ']'
        Case "id"
            $sCommand = '.getElementById("' & $vForm & '")'
        Case "name"
            $sCommand = '.getElementsByName("' & $vForm & '")[0]'
        Case Else
            SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "(index|id|name) $sMode: " & $sMode))
            Return 0
    EndSwitch

    Local $sRetVal = _FFCmd($sCommand & ".reset();")
    If Not @error And $sRetVal <> "_FFCmd_Err" Then Return 1

    SetError(__FFError($sFuncName, $_FF_ERROR_NoMatch, "$vForm: " & $vForm))
    Return 0

EndFunc   ;==>_FFFormReset

; #FUNCTION# ===================================================================
; Name ..........: _FFFormSubmit
; Description ...: Submits a form
; Beschreibung ..: Sendet ein Formular ab.
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFFormSubmit([$vForm = 0[, $sMode = "index"[, $sSubmitMode = "submit"[, $bLoadWait = True]]]])
; Parameter(s): .: $vForm       - Optional: (Default = 0) : Index-number, name or id
;                  $sSubmitMode - Optional: (Default = "auto") :
;                               | auto
;                               | click
;                               | submit
;                               | keydown
;                               | keypress
;                  $bLoadWait   - Optional: (Default = true) :
;                               | True
;                               | False
; Return Value ..: Success      - 1
;                  Failure      - 0
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Sat Feb 26 18:19:36 CET 2011 @763 /Internet Time/
; Link ..........:
; Related .......: _FFFormCheckBox, _FFFormOptionSelect, _FFFormReset, _FFFormRadioButton
; Example .......: Yes
; ==============================================================================
Func _FFFormSubmit($vForm = 0, $sMode = "index", $sSubmitMode = "submit", $bLoadWait = True)
    Local Const $sFuncName = "_FFFormSubmit"

    Local $sRetVal
    Local $iSubmit = -1, $iPassword = -1
    Local $bTrace
    $sMode = StringLower($sMode)

    If $sMode = "index" Then
        If IsInt($vForm) Then
            $vForm = 'forms[' & $vForm & ']'
        Else
            SetError(__FFError($sFuncName, $_FF_ERROR_InvalidDataType, "(int) $vForm: " & $vForm))
            Return 0
        EndIf
    ElseIf $sMode = "id" Then
        $vForm = "getElementById('" & $vForm & "')"
    ElseIf $sMode = "name" Then
        $vForm = "getElementsByName('" & $vForm & "')[0]"
    Else
        SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "(index|id|name) $sMode: " & $sMode))
        Return 0
    EndIf

    Local $iLength = _FFCmd(StringFormat('.%s.elements.length;', $vForm))
    If $iLength = "_FFCmd_Err" Then
        SetError(__FFError($sFuncName, $_FF_ERROR_NoMatch, "No Elements found in form: " & $vForm))
        Return 0
    EndIf

    $bTrace = $_FF_COM_TRACE
    $_FF_COM_TRACE = False
    If $iLength > 0 And ($sSubmitMode = "keypress" Or $sSubmitMode = "keydown" Or $sSubmitMode = "click" Or $sSubmitMode = "auto") Then
        For $i = 0 To $iLength - 1
            $sRetVal = _FFCmd(StringFormat('.%s.elements[%i].type;', $vForm, $i))
            If @error Then Return 0

            If $sRetVal = "submit" Then $iSubmit = $i
            If $sRetVal = "password" Then $iPassword = $i
            If $iSubmit > -1 And $iPassword > -1 Then ExitLoop
        Next
    EndIf
    $_FF_COM_TRACE = $bTrace

    Switch StringLower($sSubmitMode)
        Case "auto"
            ContinueCase
        Case "keypress"
            ; fire "enter" with keypress on the password element
            _FFDispatchEvent(StringFormat('.%s.elements[%i]', $vForm, $iPassword), "keypress", 13)
            If Not @error Then
                If $bLoadWait Then
                    If Not _FFLoadWait() Then Return 0
                EndIf
                Return 1
            Else
                If $sSubmitMode = "auto" Then ContinueCase
            EndIf
        Case "click"
            ; clicks on the submit element
            $sRetVal = _FFCmd(StringFormat('.%s.elements[%i].click();', $vForm, $iSubmit), 3000)
            If Not @error And $sRetVal <> "_FFCmd_Err" Then
                If $bLoadWait Then
                    If Not _FFLoadWait() And $sSubmitMode = "auto" Then ContinueCase
                EndIf
                __FFSetTopDocument()
                Return 1
            Else
                If $sSubmitMode = "auto" Then ContinueCase
            EndIf
        Case "submit"
            ; use form.submit()
            $sRetVal = _FFCmd(StringFormat('.%s.submit();', $vForm))
            If Not @error And $sRetVal <> "_FFCmd_Err" Then
                If $bLoadWait Then
                    If Not _FFLoadWait() And $sSubmitMode = "auto" Then ContinueCase
                EndIf
                __FFSetTopDocument()
                Return 1
            Else
                If $sSubmitMode = "auto" Then ContinueCase
            EndIf
        Case "keydown"
            ; fire "enter" with keydown on the password element
            _FFDispatchEvent(StringFormat(".%s.elements[%i]", $vForm, $iPassword), "keydown", 13)
            If Not @error Then
                If $bLoadWait Then
                    If Not _FFLoadWait() And $sSubmitMode = "auto" Then ContinueCase
                EndIf
                __FFSetTopDocument()
                Return 1
            EndIf
        Case Else
            Return 0
    EndSwitch

    Return 0

EndFunc   ;==>_FFFormSubmit

; #FUNCTION# ===================================================================
; Name ..........: _FFGetValue
; Description ...: Gets an value of an element
; Beschreibung ..: Liefert das Value eines Elements
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFGetValue($sElement[, $sMode = "elements"[, $iIndex = 0[, $iFilter = 0]]])
; Parameter(s): .: $sElement    -
;                  $sMode       - Optional: (Default = "elements") :
;                               | elements: element or object from _FFXpath or _FFObj*
;                               | id
;                               | name
;                               | class
;                               | tag
;                  $iIndex      - Optional: (Default = 0) : index if $sMode = class, name, tag
;                  $iFilter     - Optional: (Default = 0) : you can add them:
;                               | 0 = No filter
;                               | 1 = Remove all non ASCII
;                               | 2 = Remove all double withespaces
;                               | 4 = Remove all double linefeeds
;                               | 8 = Remove all HTML-tags
;                               | 16 = simple html-tag / entities convertor
; Return Value ..: Success      - 1
;                  Failure      - 0
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Wed Sep 23 22:55:36 CEST 2009
; Link ..........:
; Related .......: _FFSetValue, _FFXPath
; Example .......: Yes
; ==============================================================================
Func _FFGetValue($sElement, $sMode = "elements", $iIndex = 0, $iFilter = 0)
    Local Const $sFuncName = "_FFGetValue"

    If Not IsInt($iIndex) Then
        SetError(__FFError($sFuncName, $_FF_ERROR_InvalidDataType, "(int) $iIndex: " & $iIndex))
        Return 0
    EndIf
    If Not IsInt($iFilter) Then
        SetError(__FFError($sFuncName, $_FF_ERROR_InvalidDataType, "(int) $iFilter: " & $iFilter))
        Return 0
    EndIf

    Switch StringLower($sMode)
        Case "elements"
            If StringLeft($sElement, 7) = "OBJECT|" Then $sElement = StringMid($sElement, 8)
        Case "id"
            $sElement = ".getElementById('" & $sElement & "')"
        Case "name"
            $sElement = ".getElementsByName('" & $sElement & "')[" & $iIndex & "]"
        Case "class"
            $sElement = ".getElementsByClassName('" & $sElement & "')[" & $iIndex & "]"
        Case "tag"
            $sElement = ".getElementsByTagName('" & $sElement & "')[" & $iIndex & "]"
        Case Else
            SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "(elements|id|name|class|tag) $sMode: " & $sMode))
            Return 0
    EndSwitch

    If StringLeft($sElement, 1) = "." Then $sElement = "window.content.document" & $sElement

    Local $sRetVal = _FFCmd($sElement & ".value")
    If Not @error And $sRetVal <> "_FFCmd_Err" Then
        If $iFilter > 0 Then __FFFilterString($sRetVal, $iFilter)
        Return $sRetVal
    Else
        SetError(__FFError($sFuncName, $_FF_ERROR_NoMatch, "$sElement: " & $sElement))
        Return 0
    EndIf

EndFunc   ;==>_FFGetValue

; #FUNCTION# ===================================================================
; Name ..........: _FFDispatchEvent
; Description ...: Simulates a HTML event
; Beschreibung ..: Simuliert ein HTML-Ereignis an einem Element.
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFDispatchEvent($sElement[, $sEventType = "change"[, $iKeyCode = 13]])
; Parameter(s): .: $sElement    - Element where the event is fired (or object from _FFXpath/_FFObj*)
;                  $sEventType  - Optional: (Default = "change") :
;                               | change
;                               | select
;                               | focus
;                               | blur
;                               | resize
;                               | keydown
;                               | keypress
;                               | keyup
;                               | click
;                               | mousedown
;                               | mouseup
;                               | mouseover
;                               | mousemove
;                               | mouseout
;                  $iKeyCode    - ASCII-KeyCode (decimal)
; Return Value ..: Success      - 1
;                  Failure      - 0
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Sun Mar 06 22:37:07 CET 2011 @942 /Internet Time/
; Link ..........: http://www.w3.org/TR/DOM-Level-2-Events/events.html
; Related .......:
; Example .......: Yes
; ==============================================================================
Func _FFDispatchEvent($sElement, $sEventType = "change", $iKeyCode = 13)
    Local Const $sFuncName = "_FFDispatchEvent"

    If $iKeyCode < 0 Or $iKeyCode > 255 Then
        SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "(int) $iKeyCode: 0-255" & $iKeyCode))
        Return 0
    EndIf

    Local $sType

    $sEventType = StringLower($sEventType)
    If StringLeft($sElement, 7) = "OBJECT|" Then $sElement = StringMid($sElement, 8)

    Switch $sEventType
        Case "change", "select", "focus", "blur", "resize", "reset"
            $sType = "Event"
        Case "keydown", "keypress", "keyup"
            $sType = "KeyboardEvent"
        Case "click", "mousedown", "mouseup", "mouseover", "mousemove", "mouseout"
            $sType = "MouseEvents"
        Case Else
            SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "(change|select|focus|blur|resize|keydown|keypress|keyup|click|mousedown|mouseup|mouseover|mousemove|mouseout) $sEventType: " & $sEventType))
            Return 0
    EndSwitch

    If StringLeft($sElement, 1) = "." Then $sElement = "window.content.document" & $sElement

    Local $RetVal = _FFCmd(StringFormat("FFau3.simulateEvent(%s,'%s','%s',%s);", $sElement, $sType, $sEventType, $iKeyCode))
    If Not @error And $RetVal <> "_FFCmd_Err" Then
        __FFSetTopDocument()
        Return $RetVal
    Else
        SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "$sElement: " & $sElement))
        Return 0
    EndIf

    Return 0
EndFunc   ;==>_FFDispatchEvent

; #FUNCTION# ===================================================================
; Name ..........: _FFLoadWait
; Description ...: Wait while the page is loading.
; Beschreibung ..: Wartet bis die Seite geladen ist.
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFLoadWait([$iTimeOut = $_FF_LOADWAIT_TIMEOUT[, $bStop = $_FF_LOADWAIT_STOP]])
; Parameter(s): .: $iTimeOut    - Optional: (Default = $_FF_LOADWAIT_TIMEOUT) : Timeout while waiting in ms
;                  $bStop       - Optional: (Default = $_FF_LOADWAIT_STOP) : Stops loading after TimeOut
; Return Value ..: Success      - 1
;                  @EXTENDED    - loading time in ms
;                  Failure      - 0
;                  @ERROR       -
;                  @EXTENDED    - loading time in ms
; Author(s) .....: Thorsten Willert
; Date ..........: Sat Feb 26 17:17:09 CET 2011 @720 /Internet Time/
; Link ..........: https://developer.mozilla.org/en/nsIWebProgress
; Related .......: _FFDialogWait
; Example .......: Yes
; ==============================================================================
Func _FFLoadWait($iTimeOut = $_FF_LOADWAIT_TIMEOUT, $bStop = $_FF_LOADWAIT_STOP)
    Local Const $sFuncName = "_FFLoadWait"

    Local $iLoadingTime = 0
    If $iTimeOut < 1000 Then $iTimeOut = 1000

    Local $bTrace = $_FF_COM_TRACE
    $_FF_COM_TRACE = False

    If Not $_FF_COM_TRACE Then ConsoleWrite("_FFLoadWait: ")

    Local $TimeOutTimer = TimerInit()

    While TimerDiff($TimeOutTimer) < $iTimeOut
        If Not $_FF_COM_TRACE Then ConsoleWrite(".")
        If _FFCmd("FFau3.tmp=window.getBrowser().webProgress;FFau3.tmp.isLoadingDocument && FFau3.tmp.busyFlags ? false: true;") Then
            $iLoadingTime = Round(TimerDiff($TimeOutTimer))
            ConsoleWrite(" loaded in " & $iLoadingTime & "ms" & @CRLF)
            Sleep($_FF_CON_DELAY * 1.4)
            __FFSetTopDocument()
            $_FF_COM_TRACE = $bTrace
            Return SetError(0, $iLoadingTime - $_FF_CON_DELAY * 1.4, 1)
        EndIf
        Sleep(250)
    WEnd

    If $bStop Then _FFAction("stop")

    __FFSetTopDocument()
    $_FF_COM_TRACE = $bTrace
    ConsoleWrite(@CRLF & @CRLF)

    Return SetError(__FFError($sFuncName, $_FF_ERROR_Timeout, "Can not check site status."), $iLoadingTime, 0)
EndFunc   ;==>_FFLoadWait

; #FUNCTION# ===================================================================
; Name ..........: _FFGetObjectInfo
; Description ...: Returns a 2-dimensional array with every information of an object.
; Beschreibung ..: Liefert ein 2-dimensionales Array mit allen Informationen über ein Objekt.
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFGetObjectInfo([$sObject = "window"])
; Parameter(s): .: $sObject     - Optional: (Default = "window") :
; Return Value ..: Success      - Array with object information
;                  Failure      -
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Mon Mar 23 23:05:55 CET 2009 @962 /Internet Time/
; Link ..........:
; Related .......:
; Example .......: Yes
; ==============================================================================
Func _FFGetObjectInfo($sObject = "window")
    Local Const $sFuncName = "_FFGetObjectInfo"

    Local $aRet[1][2], $aTmp
    If StringLeft($sObject, 1) = "." Then $sObject = "window.content.document" & $sObject

    Local $aInfo = StringSplit(_FFCmd("repl.inspect(" & $sObject & ");"), @CRLF, 2)
    If Not @error And IsArray($aInfo) And $aInfo <> "_FFCmd_Err" Then
        ReDim $aRet[UBound($aInfo)][2]
        For $i = 0 To UBound($aInfo) - 1
            $aTmp = StringRegExp($aInfo[$i], "<object>.(.*?)=(.*?)$", 3)
            If Not @error And IsArray($aTmp) Then
                $aRet[$i][0] = $aTmp[0]
                $aRet[$i][1] = $aTmp[1]
            EndIf
        Next
        Return $aRet
    Else
        SetError(__FFError($sFuncName, $_FF_ERROR_NoMatch, $sObject))
        Return $aRet[0][0] = 0
    EndIf
EndFunc   ;==>_FFGetObjectInfo

; #FUNCTION# ===================================================================
; Name ..........: _FFGetPosition
; Description ...: Returns an array with the position of an element and/or the position and size of the FireFox content area, relative to the client area of the window
; Beschreibung ..: Liefert ein Array mit der Position eines Elementes und/oder die Position und Größe des FireFox-Inhalts, relativ zur Client Area des Fensters
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFGetPosition([$sElement = ""])
; Parameter(s): .: $sElement    - Optional: (Default = "") : Element or FFau3 - object.
;                                 An empty string returns only the position and size of the content area
; Return Value ..: Success      - array with the position and sizes
;                               | [0] = X position of the element (relative to the document)
;                               | [1] = Y position of the element (relative to the document)
;                               | [2] = X position of the content area (relative to the window client)
;                               | [3] = Y position of the content area (relative to the window client)
;                               | [4] = width of the content area
;                               | [6] = height of the content area
;                  Failure      -
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Thu Feb 04 18:49:07 CET 2010
; Link ..........: https://developer.mozilla.org/en/Accessibility/AT-APIs/MSAA/FindWindow
; Related .......:
; Example .......: Yes
; ==============================================================================
Func _FFGetPosition($sElement = "")
    Local Const $sFuncName = "_FFGetPosition"

    Local $aElement[2] = [-1, -1]

    If StringLeft(_FFCmd(".location.href"), 7) = "chrome:" Then
        SetError(__FFError($sFuncName, $_FF_ERROR_GeneralError, "Can't get position from chrome-address"))
        Return
    EndIf

    If $sElement <> "" Then
        If StringLeft($sElement, 7) = "OBJECT|" Then $sElement = StringMid($sElement, 8)
        If StringLeft($sElement, 1) = "." Then $sElement = "window.content.document" & $sElement

        Local $sPos = _FFCmd("FFau3.findPos(" & $sElement & ")")
        If $sPos <> "_FFCmd_Err" Then
            $aElement = StringSplit($sPos, ' ', 2)
        Else
            SetError(__FFError($sFuncName, $_FF_ERROR_NoMatch, "$sElement not found: " & $sElement))
            Return
        EndIf
    EndIf

    ;   Local $aContent = ControlGetPos(_FFCmd(".title"), "", "[CLASS:MozillaContentWindowClass]")
    Local $aContent = ControlGetPos(_FFCmd(".title"), "", _FFWindowGetHandle())
    If @error Then
        SetError(__FFError($sFuncName, $_FF_ERROR_NoMatch, "Cant find 'MozillaContentWindowClass'-control " & @error))
        Local $aContent[4] = [-1, -1, -1, -1]
    EndIf

    Local $aRet[6] = [$aElement[0], $aElement[1], $aContent[0], $aContent[1], $aContent[2], $aContent[3]]

    Return $aRet
EndFunc   ;==>_FFGetPosition

; #FUNCTION# ===================================================================
; Name ..........: _FFOpenURL
; Description ...: Opens a new URL
; Beschreibung ..: Öffnet eine URL.
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFOpenURL($sURL[, $bLoadWait = True])
; Parameter(s): .: $sURL        - URL or chrome (shortcut)
;                  $bLoadWait   - Optional: (Default = True) :
; Return Value ..: Success      - 1
;                  Failure      - 0
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Sat Feb 26 18:18:56 CET 2011 @763 /Internet Time/
; Link ..........:
; Related .......: _FFTabAdd
; Example .......: Yes
; ==============================================================================
Func _FFOpenURL($sURL, $bLoadWait = True)
    Local Const $sFuncName = "_FFOpenURL"

    If Not __FFCheckURL($sURL) Then
        SetError(__FFError($sFuncName, $_FF_ERROR_InvalidDataType, "(URL) $sURL: " & $sURL))
        Return 0
    EndIf

    If StringLeft($sURL, 7) = "chrome:" Then $sURL = __FFChromeSelect(StringMid($sURL, 8))

    ConsoleWrite("_FFOpenURL: " & $sURL & @CRLF)

    Local $sRetVal = _FFCmd(StringFormat(".location.href='%s'", $sURL))
    If Not @error And $sRetVal = $sURL Then
        If $bLoadWait Then
            $sRetVal = _FFLoadWait()
        Else
            $sRetVal = 1
        EndIf
        __FFSetTopDocument()
        Return $sRetVal
    Else
        SetError(__FFError($sFuncName, $_FF_ERROR_NoMatch, $sURL))
        Return 0
    EndIf

EndFunc   ;==>_FFOpenURL

; #FUNCTION# ===================================================================
; Name ..........: _FFPrefReset
; Description ...: Resets a config entry
; Beschreibung ..: Setzt einen Eintrag in der Config zurück
; Syntax ........: _FFPrefReset($sName)
; Parameter(s): .: $sName       - Name of the config entry
; Return Value ..: Success      - 1
;                  Failure      - 0
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Modified ......: Wed Mar 25 18:06:53 CET 2009 @754 /Internet Time/
; Link ..........: https://developer.mozilla.org/en/nsIPrefBranch, http://kb.mozillazine.org/About:config_entries
; Related .......: _FFPrefSet, _FFPrefGet
; Example .......: Yes
; ==============================================================================
Func _FFPrefReset($sName)
    Local Const $sFuncName = "_FFPrefReset"

    Local $iType = _FFCmd('FFau3.obj=Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);FFau3.obj.getPrefType("' & $sName & '");')
    If @error Then
        SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "$sName: " & $sName))
        Return 0
    EndIf

    If $iType <> 0 Then
        If Not _FFCmd('FFau3.obj.prefHasUserValue("' & $sName & '");') Then Return 1

        _FFCmd('FFau3.obj.clearUserPref("' & $sName & '");')
        If Not @error Then Return 1
    Else
        SetError(__FFError($sFuncName, $_FF_ERROR_NoMatch, "$sName: " & $sName))
    EndIf

    Return 0
EndFunc   ;==>_FFPrefReset

; #FUNCTION# ===================================================================
; Name ..........: _FFPrefGet
; Description ...: Gets a config entry
; Beschreibung ..: Ließt einen Wert aus der Config aus
; Syntax ........: _FFPrefGet($sName)
; Parameter(s): .: $sName       - Name of the config entry
; Return Value ..: Success      - Value of the entry
;                  Failure      - 0 and sets @error
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Modified ......: Wed Mar 25 18:06:59 CET 2009 @754 /Internet Time/
; Link ..........: https://developer.mozilla.org/en/nsIPrefBranch, http://kb.mozillazine.org/About:config_entries
; Related .......: _FFPrefSet, _FFPrefReset
; Example .......: Yes
; ==============================================================================
Func _FFPrefGet($sName)
    Local Const $sFuncName = "_FFPrefGet"

    Local $sCommand
    Local $iType = _FFCmd('FFau3.obj=Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); FFau3.obj.getPrefType("' & $sName & '");')
    If @error Then
        SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, $sName))
        Return 0
    EndIf

    Switch $iType
        Case 0
            SetError(__FFError($sFuncName, $_FF_ERROR_NoMatch, "$sName: " & $sName))
            Return 0
        Case 32 ; PREF_STRING
            $sCommand = "getCharPref"
        Case 64 ; PREF_INT
            $sCommand = "getIntPref"
        Case 128 ; PREF_BOOL
            $sCommand = "getBoolPref"
    EndSwitch

    $sCommand = StringFormat('FFau3.obj.%s("%s");', $sCommand, $sName)

    Return _FFCmd($sCommand)
EndFunc   ;==>_FFPrefGet

; #FUNCTION# ===================================================================
; Name ..........: _FFPrefSet
; Description ...: Sets a config entry
; Beschreibung ..: Setzt einen Wert in der Config.
; Syntax ........: _FFPrefSet($sName, $vValue)
; Parameter(s): .: $sName       - Name of the config entry
;                  $vValue      - Value of the config entry
; Return Value ..: Success      - 1 and sets @EXTENDED
;                  Failure      - 0
;                  @ERROR       -
;                  @EXTENDED    - Old value
; Author(s) .....: Thorsten Willert
; Modified ......: Wed Mar 25 18:07:07 CET 2009 @754 /Internet Time/
; Link ..........: https://developer.mozilla.org/en/nsIPrefBranch, http://kb.mozillazine.org/About:config_entries
; Related .......: _FFPrefGet, _FFPrefReset
; Example .......: Yes
; ==============================================================================
Func _FFPrefSet($sName, $vValue)
    Local Const $sFuncName = "_FFPrefSet"

    Local $sCommand
    Local $iType = _FFCmd('FFau3.obj=Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);FFau3.obj.getPrefType("' & $sName & '");')
    If @error Then
        SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, $sName))
        Return 0
    EndIf
    Local $vOldValue = _FFPrefGet($sName)

    Switch $iType
        Case 0
            SetError(__FFError($sFuncName, $_FF_ERROR_NoMatch, "$sName: " & $sName))
            Return 0
        Case 32 ; PREF_STRING
            If Not IsString($vValue) Then
                SetError(__FFError($sFuncName, $_FF_ERROR_InvalidDataType, "(string) $vValue: " & $vValue))
                Return 0
            EndIf
            $sCommand = StringFormat('FFau3.obj.%s("%s","%s");', "setCharPref", $sName, $vValue)
        Case 64 ; PREF_INT
            If Not IsInt($vValue) Then
                SetError(__FFError($sFuncName, $_FF_ERROR_InvalidDataType, "(int) $vValue: " & $vValue))
                Return 0
            EndIf
            $sCommand = StringFormat('FFau3.obj.%s("%s",%s);', "setIntPref", $sName, $vValue)
        Case 128 ; PREF_BOOL
            If Not IsBool($vValue) Then
                SetError(__FFError($sFuncName, $_FF_ERROR_InvalidDataType, "(bool) $vValue: " & $vValue))
                Return 0
            EndIf
            $sCommand = StringFormat('FFau3.obj.%s("%s",%s);', "setBoolPref", $sName, __FFB2S($vValue))
    EndSwitch

    _FFCmd($sCommand)
    If Not @error Then
        Local $vRetVal = _FFPrefGet($sName)
        If Not @error And $vRetVal = $vValue Then
            SetExtended($vOldValue)
            Return 1
        Else
            SetError(__FFError($sFuncName, $_FF_ERROR_RetValue, "$vValue <> " & $vRetVal))
            Return 0
        EndIf
    EndIf

    Return 0
EndFunc   ;==>_FFPrefSet

; #FUNCTION# ===================================================================
; Name ..........: _FFQuit
; Description ...: Quits FireFox
; Beschreibung ..: Schließt FireFox
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFQuit()
; Parameter(s): .:
; Return Value ..: Success      - 1 / $_FF_GLOBAL_SOCKET = -1
;                  Failure      - 0
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Fri Sep 13 08:39:32 CEST 2013 @319 /Internet-Zeit/
; Link ..........:
; Related .......: _FFDisConnect
; Example .......: Yes
; ==============================================================================
Func _FFQuit()
    Local Const $sFuncName = "_FFQuit"

    If $_FF_GLOBAL_SOCKET = -1 Then Return
    If Not __FFIsSocket($_FF_GLOBAL_SOCKET) Then
        SetError(__FFError($sFuncName, $_FF_ERROR_SocketError))
        Return 0
    EndIf

    TCPSend($_FF_GLOBAL_SOCKET, "goQuitApplication()" & @CRLF) ; close()
    If Not @error Then
        $_FF_FRAME = "top"
        $_FF_GLOBAL_SOCKET = -1
        If $_FF_COM_TRACE Then ConsoleWrite('__FFQuit: Closing FireFox ...' & @CRLF)
        Return 1
    Else
        Return 0
    EndIf

EndFunc   ;==>_FFQuit

; #FUNCTION# ===================================================================
; Name ..........: _FFReadHTML
; Description ...: Returns the HTML-source code of a page.
; Beschreibung ..: Liefert den HTMl-Quellcode einer Seite.
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFReadHTML([$sMode = "body"[, $iFilter = 0]])
; Parameter(s): .: $sMode       - Optional: (Default = "body") :
;                               | body = innerHTML from <body>
;                               | html = innerHTML from <html>
;                  $iFilter     - Optional: (Default = 0) : you can add them:
;                               | 0 = No filter
;                               | 1 = Remove all non ASCII
;                               | 2 = Remove all double withespaces
;                               | 4 = Remove all double linefeeds
;                               | 8 = Remove all HTML-tags
;                               | 16 = simple html-tag / entities convertor
; Return Value ..: Success      - String with the HTML-source code
;                  Failure      - ""
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Mon Mar 23 22:55:56 CET 2009 @955 /Internet Time/
; Link ..........:
; Related .......: _FFReadText, _FFXPath
; Example .......: Yes
; ==============================================================================
Func _FFReadHTML($sMode = "body", $iFilter = 0)
    Local Const $sFuncName = "_FFReadHTML"

    Local $sCommand

    Switch StringLower($sMode)
        Case "body"
            $sCommand = ".body"
        Case "html"
            $sCommand = ".documentElement"
        Case Else
            SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "(body|html) $sMode: " & $sMode))
            Return 0
    EndSwitch

    Local $sRetVal = _FFCmd($sCommand & ".innerHTML;", 10000)
    If Not @error And $sRetVal <> "_FFCmd_Err" Then
        If $iFilter > 0 Then $sRetVal = __FFFilterString($sRetVal, $iFilter)
        Return $sRetVal
    Else
        SetError(1)
        Return ""
    EndIf
EndFunc   ;==>_FFReadHTML

; #FUNCTION# ===================================================================
; Name ..........: _FFReadText
; Description ...: Returns the text of a page.
; Beschreibung ..: Liefert den Text einer Seite.
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFReadText([$iFilter = 0])
; Parameter(s): .: $iFilter     - Optional: (Default = 0) : you can add them:
;                               | 0 = No filter
;                               | 1 = Remove all non ASCII
;                               | 2 = Remove all double withespaces
;                               | 4 = Remove all double linefeeds
;                               | 8 = Remove all HTML-tags
;                               | 16 = simple html-tag / entities convertor
; Return Value ..: Success      - String
;                  Failure      - ""
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Mon Mar 23 22:55:05 CET 2009 @954 /Internet Time/
; Link ..........:
; Related .......: _FFReadHTML, _FFXPath
; Example .......: Yes
; ==============================================================================
Func _FFReadText($iFilter = 0)
    ;Local Const $sFuncName = "_FFReadText"

    Local $sRetVal = _FFCmd(".documentElement.textContent;", 10000)
    If Not @error And $sRetVal <> "_FFCmd_Err" Then
        If $iFilter > 0 Then $sRetVal = __FFFilterString($sRetVal, $iFilter)
        Return $sRetVal
    Else
        SetError(1)
        Return ""
    EndIf
EndFunc   ;==>_FFReadText

; #FUNCTION# ===================================================================
; Name ..........: _FFSearch
; Description ...: Searches a string
; Beschreibung ..: Sucht einen Text.
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFSearch($sSearchString[, $bCaseSensitive = False[, $bWholeWord = False[, $bSearchInFrames = True]]])
; Parameter(s): .: $sSearchString - String to search
;                  $bCaseSensitive - Optional: (Default = false) :
;                  $bWholeWord  - Optional: (Default = false) :
;                  $bSearchInFrames - Optional: (Default = true) :
; Return Value ..: Success      - 1
;                  Failure      - 0 and sets
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Sat Feb 26 18:53:10 CET 2011
; Link ..........:
; Related .......: _FFAction
; Example .......: Yes
; ==============================================================================
Func _FFSearch($sSearchString, $bCaseSensitive = False, $bWholeWord = False, $bSearchInFrames = True)
    Local Const $sFuncName = "_FFSearch"
    Local $RetVal

    If $sSearchString = "" Then
        SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "Empty String $sSearchString"))
        Return ""
    EndIf

    If ($bCaseSensitive = Default) Or ($bCaseSensitive = False) Then
        $bCaseSensitive = 'i'
    Else
        $bCaseSensitive = ''
    EndIf

    If ($bWholeWord = Default) Or ($bWholeWord = False) Then
        $bWholeWord = ''
    Else
        $bWholeWord = '\b'
    EndIf


    Local $sCMD = "FFau3.search=/" & $bWholeWord & $sSearchString & $bWholeWord & "/" & $bCaseSensitive & ";FFau3.search.test(FFau3.WCD.documentElement.textContent);"
    If $bSearchInFrames Then
        For $i = 0 To _FFGetLength("frames")
            _FFFrameEnter($i)
            $RetVal = _FFCmd($sCMD)
            If $RetVal Then
                _FFFrameLeave()
                ExitLoop
            EndIf
            _FFFrameLeave()
        Next
    Else
        $RetVal = _FFCmd($sCMD)
    EndIf

    If Not @error And $RetVal <> "_FFCmd_Err" Then
        Return 1
    Else
        SetError(__FFError($sFuncName, $_FF_ERROR_NoMatch, "$sSearchString: " & $sSearchString))
        Return 0
    EndIf
EndFunc   ;==>_FFSearch

; #FUNCTION# ===================================================================
; Name ..........: _FFCmd
; Description ...: Send and receive data from Firefox.
; Beschreibung ..: Sendet und empfängt Daten von FireFox.
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFCmd($sArg[, $iTimeOut = 30000[, $bTry = True[, $bRec = True]]])
; Parameter(s): .: $sArg        - Any JavaScript
;                  $iTimeOut    - Optional: (Default = 30000) :
;                  $bTry        - Optional: (Default = True) : adds try/catch to $sArg
;                  $bRec        - Optional: (Default = True) : record command
; Return Value ..: Success      - String
;                  Failure      - ""
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Fri Sep 18 06:03:57 CEST 2009 @211 /Internet Time/
; Link ..........:
; Related .......:
; Example .......: Yes
; ==============================================================================
Func _FFCmd($sArg, $iTimeOut = 30000, $bTry = True)
    Local Const $sFuncName = "_FFCmd"
    Local $sRet

    If StringLeft($sArg, 1) = "." Then $sArg = "window.content.document" & $sArg

    If $bTry And Not StringInStr(StringLower($sArg), "try") Then $sArg = "try{" & $sArg & "}catch(e){'_FFCmd_Err';};"

    Local $sArgWrapped = StringReplace($sArg, "window.content.document", "window.content.wrappedJSObject.document")

    $sArg = StringReplace($sArg, "window.content.document", "window.content." & $_FF_FRAME & ".document")
    $sArgWrapped = StringReplace($sArgWrapped, "window.content.wrappedJSObject.document", "window.content.wrappedJSObject." & $_FF_FRAME & ".document")

    If (Not StringInStr($sArg, ".frames[")) Or StringInStr($sArg, "evaluate") Or (Not StringRegExp($sArg, "\.[a-zA-z]+\(.*?\)(\[.+\])?\.", 0)) Then
        If __FFSend($sArg) Then

            $sRet = __FFRecv($iTimeOut)

            If Not @error Or String($sRet) <> "_FFCmd_Err" Then
                Return $sRet
            ElseIf StringInStr($sArgWrapped, "wrappedJSObject") Then
                __FFSend($sArgWrapped)
                $sRet = __FFRecv($iTimeOut)
                If Not @error And String($sRet) <> "_FFCmd_Err" Then Return $sRet
            EndIf
        EndIf
    Else
        __FFSend($sArgWrapped)
        $sRet = __FFRecv($iTimeOut)
        If Not @error And String($sRet) <> "_FFCmd_Err" Then Return $sRet
    EndIf

    SetError(__FFError($sFuncName, $_FF_ERROR_RetValue, $sRet))
    Return ""
EndFunc   ;==>_FFCmd

; #FUNCTION# ===================================================================
; Name ..........: _FFSetValue
; Description ...: Sets a value of an element
; Beschreibung ..: Setzt den Wert (value) eines Elements
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFSetValue($sValue, $sElement[, $sMode = "elements"[, $iIndex = 0]])
; Parameter(s): .: $sElement    -
;                  $sMode       - Optional: (Default = "elements") :
;                               | elements: element or object from _FFXpath or _FFObj*
;                               | id
;                               | name
;                               | class
;                               | tag
;                  $iIndex      - Optional: (Default = 0) : index if $sMode = class, name, tag
; Return Value ..: Success      - 1
;                  Failure      - 0
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Sun Mar 06 13:06:56 CET 2011 @546 /Internet Time/
; Link ..........:
; Related .......: _FFSetValue, _FFXPath
; Example .......: Yes
; ==============================================================================
Func _FFSetValue($sValue, $sElement, $sMode = "elements", $iIndex = 0)
    Local Const $sFuncName = "_FFSetValue"

    If Not IsInt($iIndex) Then
        SetError(__FFError($sFuncName, $_FF_ERROR_InvalidDataType, "(int) $iIndex: " & $iIndex))
        Return 0
    EndIf

    Switch StringLower($sMode)
        Case "elements"
            If StringLeft($sElement, 7) = "OBJECT|" Then $sElement = StringMid($sElement, 8)
        Case "id"
            $sElement = ".getElementById('" & $sElement & "')"
        Case "name"
            $sElement = ".getElementsByName('" & $sElement & "')[" & $iIndex & "]"
        Case "class"
            $sElement = ".getElementsByClassName('" & $sElement & "')[" & $iIndex & "]"
        Case "tag"
            $sElement = ".getElementsByTagName('" & $sElement & "')[" & $iIndex & "]"
        Case Else
            SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "(elements|id|name|class|tag) $sMode: " & $sMode))
            Return 0
    EndSwitch

    __FFValue2JavaScript($sValue)

    Local $sRetVal = _FFCmd($sElement & ".value='" & $sValue & "'")
    If Not @error And $sRetVal <> "_FFCmd_Err" Then
        _FFDispatchEvent($sElement, "change")
        Return 1
    Else
        SetError(__FFError($sFuncName, $_FF_ERROR_NoMatch, "$sElement: " & $sElement))
        Return 0
    EndIf

EndFunc   ;==>_FFSetValue

; #FUNCTION# ===================================================================
; Name ..........: _FFStart
; Description ...: Starts FireFox
; Beschreibung ..: Startet FireFox
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFStart([$sURL = "about:blank"[, $sProfile = "default"[, $iMode = 1[, $bHide = False[, $IP = "127.0.0.1"[, $iPort = 4242]]]]]])
; Parameter(s): .: $sURL        - Optional: (Default = "about:blank") : Start URL
;                  $sProfile    - Optional: (Default = "default") : User profile
;                  $iMode       - Optional: (Default = 1) : Start mode:
;                               | 0 = Connect to existing process
;                               | 1 = Start new process
;                               | 2 = Connect to an existing process, on failure start a new process
;                               | +8 = Starting FF with parameter -no-remote
;                  $bHide       - Optional: (Default = False) : Start in hidden mode
;                  $IP          - Optional: (Default = "127.0.0.1") : IP of MozRepl
;                  $iPort       - Optional: (Default = 4242) : Port number of MozRepl
; Return Value ..: Success      - 1
;                  @EXTENDED    - PID
;                  Failure      - 0
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Thu Apr 30 22:10:07 CEST 2009
; Link ..........:
; Related .......: _FFQuit, _FFConnect, _FFDisConnect, _FFIsConnected
; Example .......: Yes
; ==============================================================================
Func _FFStart($sURL = "about:blank", $sProfile = "default", $iMode = 1, $bHide = False, $IP = "127.0.0.1", $iPort = 4242)
    Local Const $sFuncName = "_FFStart"

    ; Default parameters
    If $sURL = Default Then $sURL = "about:blank"
    If $IP = Default Then $IP = "127.0.0.1"
    If $iPort = Default Then $iPort = 4242

    If Not __FFCheckURL($sURL) Then
        SetError(__FFError($sFuncName, $_FF_ERROR_InvalidDataType, "(URL) $sURL: " & $sURL))
        Return 0
    EndIf
    If Not __FFIsIP($IP) Then
        SetError(__FFError($sFuncName, $_FF_ERROR_InvalidDataType, "(IP) $IP: " & $IP))
        Return 0
    EndIf
    If Not __FFIsPort($iPort) Then
        SetError(__FFError($sFuncName, $_FF_ERROR_InvalidDataType, "(PORT) $iPort: " & $iPort))
        Return 0
    EndIf

    ; Default parameters
    If $sProfile = Default Then $sProfile = "default"
    If $iMode = Default Then $iMode = 1
    If $bHide = Default Then $bHide = False

    Local $PID = -1, $bNoRemote = False

    If $iMode >= 8 Then
        $iMode -= 8
        $bNoRemote = True
    EndIf

    Switch $iMode
        Case 2
            ContinueCase
        Case 0
            If ProcessExists($_FF_PROC_NAME) Then _FFConnect($IP, $iPort)
            If $_FF_GLOBAL_SOCKET > -1 Then
                _FFOpenURL($sURL)
            ElseIf $iMode = 2 Then
                ContinueCase
            EndIf
        Case 1
            __FFStartProcess($sURL, True, $sProfile, $bNoRemote, $bHide, $iPort)
            $PID = @extended
            If ProcessExists($_FF_PROC_NAME) Then _FFConnect($IP, $iPort)
            If $_FF_GLOBAL_SOCKET > -1 Then _FFLoadWait()
        Case Else
            SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "$iMode: " & $iMode))
            Return 0
    EndSwitch

    If $bHide Then
        Local $hWin = _FFWindowGetHandle()
        WinSetState($hWin, "", @SW_HIDE)
    EndIf

    SetExtended($PID)
    Return 1
EndFunc   ;==>_FFStart

; #FUNCTION# ===================================================================
; Name ..........: _FFTabAdd
; Description ...: Opens a new tab.
; Beschreibung ..: Öffnet einen neuen Tab
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFTabAdd([$sURL = "about:blank"[, $bSelect = True[, $bLoadWait = True]]])
; Parameter(s): .: $sURL        - Optional: (Default = "about:blank") :
;                  $bSelect     - Optional: (Default = true) : Select new tab
;                  $bLoadWait   - Optional: (Default = true) : Wait while the page is loading
; Return Value ..: Success      - 1
;                  Failure      - 0
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Sat Feb 26 18:18:02 CET 2011 @762 /Internet Time/
; Link ..........: https://developer.mozilla.org/en/XUL/tabs
; Related .......: _FFTabDuplicate, _FFTabClose, _FFTabCloseAll, _FFTabExists, _FFTabSetSelected, _FFTabGetSelected
; Example .......: Yes
; ==============================================================================
Func _FFTabAdd($sURL = "about:blank", $bSelect = True, $bLoadWait = True)
    Local Const $sFuncName = "_FFOpenURL"

    If $sURL = Default Then $sURL = "about:blank"
    If Not __FFCheckURL($sURL) Then
        SetError(__FFError($sFuncName, $_FF_ERROR_InvalidDataType, "(URL) $sURL: " & $sURL))
        Return 0
    EndIf
    If $bSelect Then
        _FFCmd("gBrowser.selectedTab = gBrowser.addTab('" & $sURL & "')", 3000)
    Else
        _FFCmd("gBrowser.loadOneTab('" & $sURL & "',null,null,null,true)", 3000)
    EndIf
    If Not @error Then
        Sleep(1000)
        __FFSetTopDocument()
        If $bLoadWait Then Return _FFLoadWait()
        Return 1
    EndIf

    Return 0

EndFunc   ;==>_FFTabAdd

; #FUNCTION# ===================================================================
; Name ..........: _FFTabClose
; Description ...: Closes one or all existing tabs.
; Beschreibung ..: Schließt einen oder alle vorhandenen Tabs.
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFTabClose([$vTab = -1[, $sMode = "index"]])
; Parameter(s): .: $vTab        - Optional: (Default = -1 = current tab) :
;                               | index (0-n)
;                               | label
;                               | prev
;                               | next
;                               | first
;                               | last
;                               | all (except current)
;                  $sMode       - Optional: (Default = "index") :
;                               | index
;                               | label
;                               | key or keyword
; Return Value ..: Success      - 1
;                  Failure      - 0
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Sat Feb 26 18:17:30 CET 2011 @762 /Internet Time/
; Link ..........: https://developer.mozilla.org/en/XUL/tabs
; Related .......: _FFTabAdd, _FFTabDuplicate, _FFTabCloseAll, _FFTabExists, _FFTabSetSelected, _FFTabGetSelected
; Example .......: Yes
; ==============================================================================
Func _FFTabClose($vTab = -1, $sMode = "index")
    Local Const $sFuncName = "_FFTabClose"

    Local $sCommand
    ;Local $bWarn
    Local $iLength = _FFGetLength("tabs")

    Switch StringLower($sMode)
        Case "index"
            If $vTab = -1 Then
                $sCommand = "gBrowser.removeCurrentTab();"
            ElseIf $vTab > -1 And $vTab < $iLength Then
                $sCommand = "gBrowser.removeTab(gBrowser.mTabs[" & $vTab & "]);"
            Else
                SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "(int) $vTab: " & $vTab))
                Return 0
            EndIf
        Case "label"
            If _FFTabExists($vTab) Then
                $sCommand = "gBrowser.removeTab(gBrowser.mTabs[" & @extended & "]);"
            Else
                SetError(__FFError($sFuncName, $_FF_ERROR_NoMatch, "$vTab: " & $vTab))
                Return 0
            EndIf
        Case "key", "keyword"
            Switch StringLower($vTab)
                Case "prev"
                    $sCommand = "gBrowser.removeTab(gBrowser.mTabs[gBrowser.tabContainer.selectedIndex-1]);"
                Case "next"
                    $sCommand = "gBrowser.removeTab(gBrowser.mTabs[gBrowser.tabContainer.selectedIndex+1]);"
                Case "first"
                    $sCommand = "gBrowser.removeTab(gBrowser.mTabs[0]);"
                Case "last"
                    $sCommand = "gBrowser.removeTab(gBrowser.mTabs[gBrowser.tabContainer.childNodes.length-1]);"
                Case "all"
                    ; browser.tabs.warnOnClose
                    $sCommand = "gBrowser.removeAllTabsBut(gBrowser.selectedTab);"
                Case Else
                    SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "(prev|next|first|last|all) $vTab: " & $vTab))
                    Return 0
            EndSwitch
        Case Else
            SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "(index|label|key|keyword) $sMode: " & $sMode))
            Return 0
    EndSwitch

    If _FFCmd($sCommand & "gBrowser.tabContainer.childNodes.length", 3000) < $iLength - 1 Then
        Sleep(100)
        __FFSetTopDocument()
        Return 1
    EndIf

    Return 0
EndFunc   ;==>_FFTabClose

; #FUNCTION# ===================================================================
; Name ..........: _FFTabDuplicate
; Description ...: Duplicates a tab
; Beschreibung ..: Dupliziert einen Tab
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFTabDuplicate([$vTab = -1[, $sMode = "index"[, $bSelect = False]]])
; Parameter(s): .: $vTab        - Optional: (Default = -1) : Tab to duplicate, -1 = current tab
;                  $sMode       - Optional: (Default = "index") :
;                               | index
;                               | label
;                  $bToFront    - Optional: (Default = false) : Bring duplicated tab to front
; Return Value ..: Success      - Lenght of tabs >= 1
;                  Failure      - 0
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Mon Aug 03 16:13:08 CEST 2009
; Link ..........: https://developer.mozilla.org/en/XUL/tabs
; Related .......: _FFTabAdd, _FFTabClose, _FFTabCloseAll, _FFTabExists, _FFTabSetSelected, _FFTabGetSelected
; Example .......: Yes
; ==============================================================================
Func _FFTabDuplicate($vTab = -1, $sMode = "index", $bSelect = False)
    Local Const $sFuncName = "_FFTabDuplicate"

    If $sMode = "index" And Not IsInt($vTab) Then
        SetError(__FFError($sFuncName, $_FF_ERROR_InvalidDataType, "(int) $vTab: " & $vTab))
        Return 0
    EndIf

    If $vTab = Default Then $vTab = -1
    If $sMode = Default Then $sMode = "index"

    Local $iRet
    Local $sCommand

    Switch StringLower($sMode)
        Case "index"
            If $vTab = -1 Then
                $sCommand = "gBrowser.duplicateTab(gBrowser.mCurrentTab);"
            ElseIf $vTab >= 0 And $vTab < _FFGetLength("tabs") Then
                $sCommand = "gBrowser.duplicateTab(gBrowser.mTabs[" & $vTab & "]);"
            Else
                SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "$vTab: " & $vTab))
                Return 0
            EndIf
        Case "label"
            If _FFTabExists($vTab) Then
                $sCommand = "gBrowser.duplicateTab(gBrowser.mTabs[" & @extended & "]);"
            Else
                SetError(__FFError($sFuncName, $_FF_ERROR_NoMatch, "$vTab: " & $vTab))
                Return 0
            EndIf
        Case Else
            SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "(index|label) $sMode: " & $sMode))
            Return 0
    EndSwitch

    $iRet = _FFCmd($sCommand & "gBrowser.tabContainer.childNodes.length;", 3000)

    If $bSelect Then _FFTabSetSelected("last")

    Return $iRet

EndFunc   ;==>_FFTabDuplicate

; #FUNCTION# ===================================================================
; Name ..........: _FFTabExists
; Description ...: Checks if a tab exists
; Beschreibung ..: Prüft ob ein Tab existiert.
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFTabExists($sLabel)
; Parameter(s): .: $sLabel      - Label of the tab (substring or RegEx)
;                  $sMode       - Optional: (Default = "label") :
; Return Value ..: Success      - 1
;                  @EXTENDED    - Index of the tab
;                  Failure      - 0
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Mon Jul 27 08:47:03 CEST 2009
; Link ..........: https://developer.mozilla.org/en/XUL/tabs
; Related .......: _FFTabAdd, _FFTabDuplicate, _FFTabClose, _FFTabCloseAll, _FFTabSetSelected, _FFTabGetSelected
; Example .......: Yes
; ==============================================================================
Func _FFTabExists($sLabel, $sMode = "label")
    Local Const $sFuncName = "_FFTabExists"

    _FFLoadWait()

    Switch StringLower($sMode)
        Case "label"
            Local $RetVal = Int(_FFCmd("FFau3.SearchTab('" & $sLabel & "')", 3000))
            Switch @error
                Case $_FF_ERROR_Success
                    If $RetVal > -1 Then
                        SetExtended($RetVal)
                        Return 1
                    ElseIf $RetVal = -3 Then
                        SetError(__FFError($sFuncName, $_FF_ERROR_InvalidExpression, "$sLabel: " & $sLabel))
                        Return 0
                    Else
                        SetError(__FFError($sFuncName, $_FF_ERROR_NoMatch, "$sLabel: " & $sLabel))
                        Return 0
                    EndIf
                Case Else
                    SetError(__FFError($sFuncName, $_FF_ERROR_GeneralError))
                    Return 0
            EndSwitch
        Case "href"
            Local $RetVal = Int(_FFCmd("FFau3.SearchTabURL('" & $sLabel & "')", 3000))

            Switch @error
                Case $_FF_ERROR_Success
                    If $RetVal > -1 Then
                        SetExtended($RetVal)
                        Return 1
                    ElseIf $RetVal = -3 Then
                        SetError(__FFError($sFuncName, $_FF_ERROR_InvalidExpression, "$sLabel: " & $sLabel))
                        Return 0
                    Else
                        SetError(__FFError($sFuncName, $_FF_ERROR_NoMatch, "$sLabel: " & $sLabel))
                        Return 0
                    EndIf
                Case Else
                    SetError(__FFError($sFuncName, $_FF_ERROR_GeneralError))
                    Return 0
            EndSwitch

    EndSwitch
EndFunc   ;==>_FFTabExists

; #FUNCTION# ===================================================================
; Name ..........: _FFTabSetSelected
; Description ...: Select a tab
; Beschreibung ..: Wählt ein Tab aus.
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFTabSetSelected([$vTab = 0[, $sMode = "index"]])
; Parameter(s): .: $vTab        - Optional: (Default = 0) :
;                               | index (0-n)
;                               | label = Substring or RegEx
;                               | href
;                               | prev
;                               | next
;                               | first
;                               | last
;                  $sMode       - Optional: (Default = "index") :
;                               | index
;                               | label
;                               | otherwise the keywords in $vTab are used
; Return Value ..: Success      -
;                  Failure      - -1
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Sat Feb 26 18:17:19 CET 2011 @762 /Internet Time/
; Link ..........: https://developer.mozilla.org/en/XUL/tabs
; Related .......: _FFTabAdd, _FFTabDuplicate, _FFTabClose, _FFTabCloseAll, _FFTabExists, _FFTabGetSelected
; Example .......: Yes
; ==============================================================================
Func _FFTabSetSelected($vTab = 0, $sMode = "index")
    Local Const $sFuncName = "_FFTabSetSelected"

    Local $sCommand = "gBrowser.tabContainer"

    If $sMode = "index" Then
        $sCommand &= ".selectedIndex = " & $vTab
    ElseIf $sMode = "label" Or $sMode = "href" Then
        If _FFTabExists($vTab, $sMode) Then
            $sCommand &= ".selectedIndex = " & @extended
        Else
            Return -1
        EndIf
    Else
        Switch StringLower($vTab)
            Case "prev"
                $sCommand &= ".advanceSelectedTab( -1, true )"
            Case "next"
                $sCommand &= ".advanceSelectedTab( 1, true )"
            Case "first"
                $sCommand &= ".selectedIndex = 0"
            Case "last"
                $sCommand &= ".selectedIndex = gBrowser.tabContainer.childNodes.length -1"
            Case Else
                SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "(index|label|prev|next|first|last) $sMode: " & $sMode))
                Return -1
        EndSwitch
    EndIf

    Local $RetVal = _FFCmd($sCommand, 3000)
    Sleep(50)
    __FFSetTopDocument()

    Return $RetVal

EndFunc   ;==>_FFTabSetSelected

; #FUNCTION# ===================================================================
; Name ..........: _FFTabGetSelected
; Description ...: Returns the name or the index of the selected tab.
; Beschreibung ..: Gibt den Namen (label) oder den Index des aktuellen Tabs zurück.
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFTabGetSelected([$sMode = "index"])
; Parameter(s): .: $sMode       - Optional: (Default = "index") :
;                               | index
;                               | label
; Return Value ..: Success      - Tab index 0-n or label
;                  Failure      - -1
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Thu Apr 23 08:52:13 CEST 2009 @327 /Internet Time/
; Link ..........: https://developer.mozilla.org/en/XUL/tabs
; Related .......: _FFTabAdd, _FFTabDuplicate, _FFTabClose, _FFTabCloseAll, _FFTabExists, _FFTabSetSelected
; Example .......: Yes
; ==============================================================================
Func _FFTabGetSelected($sMode = "index")
    Local Const $sFuncName = "_FFTabGetSelected"

    _FFLoadWait()
    Switch StringLower($sMode)
        Case "index"
            Return Int(_FFCmd("gBrowser.tabContainer.selectedIndex", 3000))
        Case "label"
            Return _FFCmd("gBrowser.mTabs[gBrowser.tabContainer.selectedIndex].label", 3000)
        Case Else
            SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "(index|label) $sMode: " & $sMode))
            Return -1
    EndSwitch

EndFunc   ;==>_FFTabGetSelected

; #FUNCTION# ===================================================================
; Name ..........: _FFTableWriteToArray
; Description ...: Writes a HTML-table to an array
; Beschreibung ..: Kopiert eine HTML-Tabelle in ein Array.
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFTableWriteToArray([$vTable = 0[, $sMode = "index"[, $sReturnMode = "text"[, $iFilter = 0[, $bTransponse = False]]]]])
; Parameter(s): .: $vTable      - Optional: (Default = 0) : Table selection by $sMode
;                  $sMode       - Optional: (Default = "index") :
;                               | index (0-n)
;                               | name
;                               | id
;                  $sReturnMode - Optional: (Default = "text") :
;                               | text
;                               | html
;                  $iFilter     - Optional: (Default = 0) :
;                               | 0 = No filter
;                               | 1 = Remove all non ASCII
;                               | 2 = Remove all double withespaces
;                               | 4 = Remove all double linefeeds
;                               | 8 = Remove all HTML-tags
;                               | 16 = simple html-tag / entities convertor
;                  $bTransponse - Optional: (Default = False) : Switch Rows and Columns
; Return Value ..: Success      - Array containing contents of the table
;                  Failure      - 0
;                  @ERROR       -
; Author(s) .....: Thorsten Willert, Johannes Schirmer
; Date ..........: Fri Sep 18 17:38:05 CEST 2009 @693 /Internet Time/
; Link ..........:
; Related .......: _FFXpath
; Example .......: Yes
; ==============================================================================
Func _FFTableWriteToArray($vTable = 0, $sMode = "index", $sReturnMode = "text", $iFilter = 0, $bTransponse = False)
    Local $sFuncName = "_FFTableWriteToArray"

    Local $sTable, $sRnd

    Local $bTrace = $_FF_COM_TRACE
    $_FF_COM_TRACE = False

    Switch StringLower($sMode)
        Case "index"
            If IsInt($vTable) And $vTable < _FFGetLength("tables") Then
                $sTable = "//table[" & $vTable + 1 & "]"
            Else
                SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "(INT) $vTable: " & $vTable))
                Return 0
            EndIf
        Case "name"
            $sTable = "//table[@name='" & $vTable & "']"
        Case "id"
            $sTable = "//table[@id='" & $vTable & "']"
        Case Else
            SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "(index|name|id) $sMode: " & $sMode))
            Return 0
    EndSwitch

    Switch StringLower($sReturnMode)
        Case "text"
            $sReturnMode = "textContent"
        Case "html"
            $sReturnMode = "innerHTML"
        Case Else
            SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "(text|html) $sReturnMode: " & $sReturnMode))
            Return 0
    EndSwitch

    If Not IsInt($iFilter) Then
        SetError(__FFError($sFuncName, $_FF_ERROR_InvalidDataType, "(int) $iFilter: " & $iFilter))
        Return 0
    EndIf

    If Not IsBool($bTransponse) Then
        SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "(boolean) $bTransponse: " & $bTransponse))
        Return 0
    EndIf

    Local $iRows = _FFXPath($sTable & "//tr", Default, 10)
    If @error Or $iRows = 0 Then
        SetError(__FFError($sFuncName, $_FF_ERROR_GeneralError, $sTable & " not found."))
        Return 0
    EndIf

    Local $aCols

    If _FFXPath($sTable & "//@colspan", Default, 10) > 0 Or _FFXPath($sTable & "//@rowspan", Default, 10) > 0 Then
        Local $iColsTmp[$iRows + 1]
        Local $iCols = 0, $iSum, $iCol
        For $i = 1 To $iRows
            $iSum = 0
            $aCols = _FFXPath($sTable & "//tr[" & $i & "]//td", "colSpan", 6)
            $iColsTmp[$i - 1] = $aCols[0]
            For $j = 1 To $aCols[0]
                $iSum += $aCols[$j]
            Next
            If $iSum > $iCols Then $iCols = $iSum
        Next

        Local $aTable[$iRows][$iCols]
        Local $iRow = 0
        Local $sCMD, $aTmp

        For $i = 0 To $iRows
            $sRnd = "FF" & Random(100, 999, 1)
            $iCol = 0
            If $iColsTmp[$i] < $iCols Then
                For $j = 0 To $iColsTmp[$i] - 1
                    $sCMD = "FFau3.xpath=window.content.document.evaluate('//tr[" & $i + 1 & "]//td[" & $j + 1 & "]',window.content.document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;FFau3.xpath." & $sReturnMode & "+'" & $sRnd & "'+FFau3.xpath.colSpan"
                    $aTmp = StringSplit(_FFCmd($sCMD), $sRnd, 3)
                    $aTable[$iRow][$iCol] = __FFFilterString($aTmp[0], $iFilter)
                    $iCol += $aTmp[1]
                Next

            Else
                Local $aRows = _FFXPath($sTable & "//tr[" & $i + 1 & "]//td", $sReturnMode, 6, $iFilter)
                If $aRows[0] > 0 Then
                    For $j = 1 To $aRows[0]
                        $aTable[$i][$j - 1] = $aRows[$j]
                    Next
                EndIf
            EndIf

            $iRow += 1
        Next
    Else
        $iCols = _FFXPath($sTable & "//tr[last()]//td", Default, 10)
        Local $aTable[$iRows][$iCols]

        If $iCols > $iRows Then
            For $i = 0 To $iRows - 1
                $aCols = _FFXPath($sTable & "//tr[" & $i + 1 & "]//td", $sReturnMode, 6, $iFilter)
                If $aCols[0] > 0 Then
                    For $j = 0 To $iCols - 1
                        $aTable[$i][$j] = $aCols[$j + 1]
                    Next
                EndIf
            Next
        Else
            For $i = 0 To $iCols - 1
                $aRows = _FFXPath($sTable & "//tr//td[" & $i + 1 & "]", $sReturnMode, 6, $iFilter)
                If $aRows[0] > 0 Then
                    For $j = 0 To $iRows - 1
                        $aTable[$j][$i] = $aRows[$i + 1]
                    Next
                EndIf
            Next
        EndIf
    EndIf

    If $bTransponse Then
        Local $iD1 = UBound($aTable, 1), $iD2 = UBound($aTable, 2), $aTmp[$iD2][$iD1]
        For $i = 0 To $iD2 - 1
            For $j = 0 To $iD1 - 1
                $aTmp[$i][$j] = $aTable[$j][$i]
            Next
        Next
        $aTable = $aTmp
    EndIf

    $_FF_COM_TRACE = $bTrace

    Return $aTable
EndFunc   ;==>_FFTableWriteToArray

; #FUNCTION# ===================================================================
; Name ..........: _FFWindowClose
; Description ...: Closes a browser window
; Beschreibung ..: Schließt ein Browser Fenster.
; Syntax ........: _FFWindowClose([$sSearch = ""[, $sSearchMode = "title"]])
; Parameter(s): .: $sSearch     - Optional: (Default = "") : "" = current window, Substring to search
;                  $sSearchMode - Optional: (Default = "title") :
;                               | "title" window title
;                               | "label" tab label
;                               | "href" current url
; Return Value ..: Success      - 1
;                  Failure      - 0
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Mon Mar 23 22:33:01 CET 2009 @939 /Internet Time/
; Link ..........: https://developer.mozilla.org/En/DOM/Window, https://developer.mozilla.org/En/NsIWindowMediator
; Related .......: _FFWindowSelect, _FFWindowOpen
; Example .......: Yes
; ==============================================================================
Func _FFWindowClose($sSearch = "", $sSearchMode = "title")
    Local Const $sFuncName = "_FFWindowClose"

    If $sSearch = "" Then
        _FFCmd("window.close();")
        Return @error
    EndIf

    Switch StringLower($sSearchMode)
        Case "title", "label", "href" ; current href
            Local $sRetVal = _FFCmd(StringFormat("FFau3.CloseWin('%s','%s')", $sSearch, $sSearchMode))
            If Not @error And $sRetVal = 1 Then
                Return 1
            Else
                SetError(__FFError($sFuncName, $_FF_ERROR_NoMatch, "$sSearch: " & $sSearch))
            EndIf
        Case Else
            SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "(title|label|href) $sSearchMode: " & $sSearchMode))
    EndSwitch

    Return 0
EndFunc   ;==>_FFWindowClose

; #FUNCTION# ===================================================================
; Name ..........: _FFWindowGetHandle
; Description ...: Returns the window-handle (hwnd) from the current browser-window.
; Beschreibung ..: Liefert das Window-handle (hwnd) des aktuellen Browser Fenster.
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFWindowGetHandle()
; Parameter(s): .:
; Return Value ..: Success      - Window handle
;                  Failure      - ""
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Sun Oct 18 21:35:12 CEST 2009
; Link ..........:
; Related .......: _FFWindowClose, _FFWindowSelect, _FFWindowOpen
; Example .......: Yes
; ==============================================================================
Func _FFWindowGetHandle()
    Local Const $sFuncName = "_FFWindowGetHandle"
    ; in the future to handle with XPCOM =#=
    Local $bErr = False
    Local $hWindow = ""

    BlockInput(1) ; =#=
    If Not @error Then
        Local $sTitleRnd = "FFAU3" & Random(1000000000, 9999999999, 1)
        _FFCmd("FFau3.tmp=document.title;document.title='" & $sTitleRnd & "'")
        Local $iMatchMode = AutoItSetOption("WinTitleMatchMode", 1)
        Sleep(500)
        $hWindow = WinGetHandle($sTitleRnd)
        If @error Then $bErr = True
        BlockInput(0)
        AutoItSetOption("WinTitleMatchMode", $iMatchMode)
        _FFCmd("document.title=FFau3.tmp")
        ConsoleWrite("_FFWindowGetHandle: " & $hWindow & @CRLF)
    EndIf
    BlockInput(0)

    If $bErr Then SetError(__FFError($sFuncName, $_FF_ERROR_GeneralError))
    Return $hWindow
EndFunc   ;==>_FFWindowGetHandle

; #FUNCTION# ===================================================================
; Name ..........: _FFWindowSelect
; Description ...: Selects the active window for all other functions
; Beschreibung ..: Wählt das aktive Browser Fenster für alle nachfolgenden Befehle.
; Syntax ........: _FFWindowSelect([$sSearch = ""[, $sSearchMode = "title"[, $bActivate = True]]])
; Parameter(s): .: $sSearch     - Optional: (Default = "") : "" = most recent window, Substring to search
;                  $sSearchMode - Optional: (Default = "title") :
;                               | "title" window title
;                               | "label" tab label
;                               | "href" current url
;                  $bActivate   - Optional: (Default = True) :
; Return Value ..: Success      - 1
;                  @EXTENDED    - Window handle
;                  Failure      - 0
;                  @ERROR       -
;                  @EXTENDED    - ""
; Author(s) .....: Thorsten Willert
; Date ..........: Mon Mar 23 22:32:05 CET 2009 @938 /Internet Time/
; Link ..........: https://developer.mozilla.org/En/DOM/Window, https://developer.mozilla.org/En/NsIWindowMediator
; Related .......: _FFWindowOpen, _FFWindowClose, _FFWindowGetHandle
; Example .......: Yes
; ==============================================================================
Func _FFWindowSelect($sSearch = "", $sSearchMode = "title", $bActivate = True)
    Local Const $sFuncName = "_FFWindowSelect"

    Local $hWin = ""

    If $sSearch = "" Then
        Local $sCommand = 'Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator).getMostRecentWindow("navigator:browser")'
        _FFCmd("repl.enter(" & $sCommand & ")")
        If Not @error Then
            $hWin = _FFWindowGetHandle()
            If Not @error And $bActivate Then WinActivate($hWin)
            SetExtended($hWin)
            Return 1
        EndIf
        SetExtended($hWin)
        Return 0
    EndIf

    Switch StringLower($sSearchMode)
        Case "title", "label", "href"
            Local $sRetVal = _FFCmd(StringFormat("FFau3.SelectWin('%s','%s','navigator:browser');", $sSearch, $sSearchMode))
            If Not @error And $sRetVal = 1 Then
                $hWin = _FFWindowGetHandle()
                If Not @error And $bActivate Then WinActivate($hWin)
                SetExtended($hWin)
                Return 1
            Else
                SetError(__FFError($sFuncName, $_FF_ERROR_NoMatch, "$sSearch: " & $sSearch), $hWin)
            EndIf
        Case Else
            SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "(title|label|href) $sSearchMode: " & $sSearchMode), $hWin)
    EndSwitch

    SetExtended($hWin)
    Return 0
EndFunc   ;==>_FFWindowSelect

; #FUNCTION# ===================================================================
; Name ..........: _FFWindowOpen
; Description ...: Opens a new browser window
; Beschreibung ..: Öffnet ein neues Browser Fenster.
; Syntax ........: _FFWindowOpen([$sURL = "about:blank"[, $bActivate = True[, $bLoadWait = True]]])
; Parameter(s): .: $sURL        - Optional: (Default = "about:blank") :
;                  $bActivate   - Optional: (Default = True)
;                  $bLoadWait   - Optional: (Default = True) :
; Return Value ..: Success      - 1 and sets
;                  @EXTENDED    - Window handle
;                  Failure      - 0 and sets
;                  @ERROR       -
;                  @EXTENDED    - ""
; Author(s) .....: Thorsten Willert
; Date ..........: Fri Nov 13 18:31:06 CET 2009
; Link ..........: https://developer.mozilla.org/En/DOM/Window, https://developer.mozilla.org/En/NsIWindowMediator
; Related .......: _FFWindowSelect, _FFWindowClose, _FFWindowGetHandle
; Example .......: Yes
; ==============================================================================
Func _FFWindowOpen($sURL = "about:blank", $bActivate = True, $bLoadWait = True)
    Local Const $sFuncName = "_FFWindowOpen"

    If Not __FFCheckURL($sURL) Then
        SetError(__FFError($sFuncName, $_FF_ERROR_InvalidDataType, "(URL) $sURL: " & $sURL))
        Return 0
    EndIf

    Local $bTrace = $_FF_COM_TRACE
    $_FF_COM_TRACE = False

    ConsoleWrite("_FFWindowOpen: " & $sURL & @CRLF)

    _FFCmd("window.open('" & $sURL & "');")
    If $bLoadWait Then _FFLoadWait()
    If Not @error Then
        If _FFWindowSelect() Then
            Local $hWin = @extended
            If Not @error And $bActivate Then WinActivate($hWin)
            __FFSendJavaScripts()
            $_FF_COM_TRACE = $bTrace
            SetExtended($hWin)
            Return 1
        EndIf
    EndIf

    $_FF_COM_TRACE = $bTrace
    SetExtended("")
    Return 0
EndFunc   ;==>_FFWindowOpen

; #FUNCTION# ===================================================================
; Name ..........: _FFWriteHTML
; Description ...: Replaces the html of body element
; Beschreibung ..: Ersetzt das HTML des Body Elements.
; Syntax ........: _FFWriteHTML([$sHTML = ""[, $sMode = "body"]])
; Parameter(s): .: $sHTML       - Optional: (Default = "") :
;                  $sMode       - Optional: (Default = "body") :
;                               | body
;                               | html
; Return Value ..: Success      - 1
;                  Failure      - 0
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Mon Mar 23 22:30:01 CET 2009 @937 /Internet Time/
; Link ..........:
; Related .......:
; Example .......: Yes
; ==============================================================================
Func _FFWriteHTML($sHTML = "", $sMode = "body")
    Local Const $sFuncName = "_FFWriteHTML"

    Local $sCommand

    Switch StringLower($sMode)
        Case "body"
            $sCommand = "body"
        Case "html"
            $sCommand = "documentElement"
        Case Else
            SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "(body|html) $sMode: " & $sMode))
            Return 0
    EndSwitch

    $sCommand = StringFormat("content.document.%s.innerHTML='" & $sHTML & "';", $sCommand)

    Local $sRetVal = _FFCmd($sCommand)
    If Not @error And $sRetVal <> "_FFCmd_Err" Then Return 1

    Return 0
EndFunc   ;==>_FFWriteHTML

; #FUNCTION# ===================================================================
; Name ..........: _FFXPath
; Description ...: Returns and sets values due to a XPath-query.
; Beschreibung ..: Abfrage und setzen von Werten anhand einer XPath-Abfrage.
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFXPath($sQuery[, $sAttribute = ""[, $iReturnType = 9[, $iFilter = 0]]])
; Parameter(s): .: $sQuery      - XPath query
;                  $sAttribute  - Optional: (Default = "") : attribute OR searchstring for SEARCH
;                  $iReturnType - Optional: (Default = 0) :
;                               | 0 = ANY_TYPE
;                               | 1 = NUMBER_TYPE (Returns numberValue)
;                               | 2 = STRING_TYPE (Return stringValue)
;                               | 3 = BOOLEAN_TYPE (Returns booleanValue)
;                               | 4 = UNORDERED_NODE_ITERATOR_TYPE - not implemented
;                               | 5 = ORDERED_NODE_ITERATOR_TYPE - not implemented
;                               | 6 = UNORDERED_NODE_SNAPSHOT_TYPE (Returns arrray)
;                               | 7 = ORDERED_NODE_SNAPSHOT_TYPE (Returns arrray)
;                               | 8 = ANY_UNORDERED_NODE_TYPE (Returns singleNodeValue) (Object in FFau3.xpath)
;                               | 9 = FIRST_ORDERED_NODE_TYPE (Returns singleNodeValue) (Object in FFau3.xpath)
;                               | 10 = COUNT (Returns the number of matches)
;                               | 11 = CONTAINS (stringValue contains substring in $sAttribute) (Returns booleanValue)
;                               | 12 = STARTS-WITH (stringValue start-with string in $sAttribute) (Returns booleanValue)
;                               | 13 = SUBSTRING-AFTER (stringValue substring-after in $sAttribute)
;                               | 14 = SUBSTRING-BEFORE (stringValue substring-bevore in $sAttribute)
;                  $iFilter     - Optional: (Default = 0) :
;                               | 0 = No filter
;                               | 1 = Remove all non ASCII
;                               | 2 = Remove all double withespaces
;                               | 4 = Remove all double linefeeds
;                               | 8 = Remove all HTML-tags
;                               | 16 = simple html-tag / entities convertor
; Return Value ..: Success      - Value $iReturnType 0-5 and 8-10
;                               | Value $iReturnType 8-9 + object FFau3.xpath
;                               | Array $iReturnType 6-7 or if an attribute is set the number of the matches.
;                  Failure      - 0 and sets
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Tue Feb 16 19:43:55 CET 2010
; Link ..........: http://www.w3.org/TR/xpath, https://developer.mozilla.org/en/XPath, https://developer.mozilla.org/En/XPathResult, https://developer.mozilla.org/en/Introduction_to_using_XPath_in_JavaScript
; Related .......: _FFGetValue, _FFSetValue
; Example .......: Yes
; ==============================================================================
Func _FFXPath($sQuery, $sAttribute = "", $iReturnType = 9, $iFilter = 0)
    Local Const $sFuncName = "_FFXPath"

    If $sQuery = "" Then
        SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "Empty String $sQuery"))
        Return 0
    EndIf
    If Not IsInt($iFilter) Then
        SetError(__FFError($sFuncName, $_FF_ERROR_InvalidDataType, "(int) $iFilter: " & $iFilter))
        Return 0
    EndIf
    If $iReturnType < 10 And Not StringInStr($sAttribute, "=") And StringRegExp($sAttribute, "[\W]+") Then
        SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "$sAttribute: " & $sAttribute))
        Return 0
    EndIf

    If $sAttribute = Default Then $sAttribute = "textContent"
    If $iReturnType = Default Then $iReturnType = 0
    $sQuery = StringReplace($sQuery, '"', "'")

    Local $sResult, $sValue

    Switch StringLower($sAttribute)
        Case "textcontent"
            $sAttribute = "textContent"
        Case "innerhtml"
            $sAttribute = "innerHTML"
    EndSwitch

    Switch $iReturnType
        Case 0
            $sResult = "ANY_TYPE"
        Case 1
            $sResult = "NUMBER_TYPE"
            $sValue = ".numberValue"
        Case 2
            $sResult = "STRING_TYPE"
            $sValue = ".stringValue"
        Case 3
            $sResult = "BOOLEAN_TYPE"
            $sValue = ".booleanValue"
            #cs  - not implemented yet
                Case 4
                $sResult = "UNORDERED_NODE_ITERATOR_TYPE"
                Case 5
                $sResult = "ORDERED_NODE_ITERATOR_TYPE"
            #ce
        Case 6
            $sResult = "UNORDERED_NODE_SNAPSHOT_TYPE"
            If $sAttribute <> "" And StringLeft($sAttribute, 1) <> "." Then $sValue &= "." & $sAttribute
        Case 7
            $sResult = "ORDERED_NODE_SNAPSHOT_TYPE"
            If $sAttribute <> "" And StringLeft($sAttribute, 1) <> "." Then $sValue &= "." & $sAttribute
        Case 8
            $sResult = "ANY_UNORDERED_NODE_TYPE"
            $sValue = ".singleNodeValue"
            If $sAttribute <> "" And StringLeft($sAttribute, 1) <> "." Then $sValue &= "." & $sAttribute
        Case 9
            $sResult = "FIRST_ORDERED_NODE_TYPE"
            $sValue = ".singleNodeValue"
            If $sAttribute <> "" And StringLeft($sAttribute, 1) <> "." Then $sValue &= "." & $sAttribute
            ; no datatypes
        Case 10
            $sQuery = "count(" & $sQuery & ")"
            $sResult = "NUMBER_TYPE"
            $sValue = ".numberValue"
        Case 11
            $sQuery = "contains(" & $sQuery & ",'" & $sAttribute & "')"
            $sResult = "BOOLEAN_TYPE"
            $sValue = ".booleanValue"
        Case 12
            $sQuery = "starts-with(" & $sQuery & ",'" & $sAttribute & "')"
            $sResult = "BOOLEAN_TYPE"
            $sValue = ".booleanValue"
        Case 13
            $sQuery = "substring-after(" & $sQuery & ",'" & $sAttribute & "')"
            $sResult = "STRING_TYPE"
            $sValue = ".stringValue"
        Case 14
            $sQuery = "substring-before(" & $sQuery & ",'" & $sAttribute & "')"
            $sResult = "STRING_TYPE"
            $sValue = ".stringValue"
        Case Else
            SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "(int) $iReturnType: 0-9 10-14: " & $iReturnType))
            Return 0
    EndSwitch

    Local $sErrVal = "_FFXPath_Error: "
    Local $sCommand

    If $iReturnType < 6 Or $iReturnType >= 8 Then
        $sCommand = 'try{FFau3.xpath=FFau3.WCD.evaluate("' & $sQuery & '",FFau3.WCD,null,XPathResult.' & $sResult & ',null)'
        $sCommand &= $sValue & ";}catch(e){'" & $sErrVal & "'+e;};"

    ElseIf $iReturnType = 6 Or $iReturnType = 7 Then

        Local $sDelimiter = "FF" & Random(100, 999, 1)
        $sCommand = 'try{with(FFau3){'
        $sCommand &= 'this.obj=FFau3.WCD.evaluate("' & $sQuery & '",FFau3.WCD,null,XPathResult.' & $sResult & ',null);'
        $sCommand &= 'this.tmp=this.obj.snapshotLength;'
        If Not StringInStr($sAttribute, "=") Then
            $sCommand &= 'for(var i=0;i<this.obj.snapshotLength;i++){this.tmp+="' & $sDelimiter & '"+this.obj.snapshotItem(i)' & $sValue & ';};'
        Else
            $sCommand &= 'for(var i=0;i<this.obj.snapshotLength;i++){this.obj.snapshotItem(i)' & $sValue & ';};'
        EndIf
        $sCommand &= "this.tmp;}}catch(e){'" & $sErrVal & "' +e;};"
    EndIf

    Local $sRetVal = _FFCmd("FFau3.xpath=null;" & $sCommand)
    If Not StringInStr($sRetVal, $sErrVal) Then
        __FFFilterString($sRetVal, $iFilter)
        If $iFilter > 0 Then __FFFilterString($sRetVal, $iFilter)

        If $iReturnType = 6 Or $iReturnType = 7 Then
            Return StringSplit($sRetVal, $sDelimiter, 3)
        Else
            If $iReturnType < 10 And $sAttribute = "" Then Return "OBJECT|FFau3.xpath"
            Return StringStripWS($sRetVal, 3)
        EndIf
    Else
        If StringInStr($sRetVal, "TypeError") And StringInStr($sRetVal, "is null") Then
            SetError(__FFError($sFuncName, $_FF_ERROR_NoMatch, "singleNodeValue is null $sQuery: " & $sQuery & " - " & $sAttribute))
        ElseIf StringInStr($sRetVal, "NS_ERROR_DOM_INVALID_EXPRESSION_ERR") Then
            SetError(__FFError($sFuncName, $_FF_ERROR_InvalidExpression, "NS_ERROR_DOM_INVALID_EXPRESSION_ERR $sQuery: " & $sQuery))
        Else
            SetError(__FFError($sFuncName, $_FF_ERROR_RetValue, $sRetVal))
        EndIf
        Return 0
    EndIf
EndFunc   ;==>_FFXPath

; #FUNCTION# ===================================================================
; Name ..........: _FFObjGet
; Description ...: Returns an object (string to use with the other _FFObj* functions)
; Beschreibung ..: Liefert ein Object zurueck. (String zur Verwendung mit den anderen _FFObj* Funktionen)
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFObjGet($sElement[, $sMode = "id"[, $iIndex = 0]])
; Parameter(s): .: $sElement    -
;                  $sMode       - Optional: (Default = "id") :
;                               | ID
;                               | Name + index
;                               | Class + index
;                               | Tag-name + index
;                  $iIndex      - Optional: (Default = 0) :
; Return Value ..: Success      - String (object to use in the _FFObj* functions)
;                  Failure      - Epmty string
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Fri Oct 16 19:08:02 CEST 2009
; Link ..........:
; Related .......: _FFObj, _FFObjNew, _FFObjDelete, _FFClick
; Example .......: Yes
; ==============================================================================
Func _FFObjGet($sElement, $sMode = "id", $iIndex = 0)
    Local Const $sFuncName = "_FFObjGet"

    Local $sRet

    Switch StringLower($sMode)
        Case "id"
            $sRet = ".getElementById('" & $sElement & "')"
        Case "name"
            $sRet = ".getElementsByName('" & $sElement & "')[" & $iIndex & "]"
        Case "class"
            $sRet = ".getElementsByClassName('" & $sElement & "')[" & $iIndex & "]"
        Case "tag"
            $sRet = ".getElementsByTagName('" & $sElement & "')[" & $iIndex & "]"
        Case Else
            SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "(id|name|class|tag) $sMode: " & $sMode))
            Return ""
    EndSwitch

    Local $RetVal = _FFCmd("window.content.document" & $sRet & "?1:0;")
    If Not @error And $RetVal = 1 Then
        Return "OBJECT|" & $sRet
    Else
        SetError(__FFError($sFuncName, $_FF_ERROR_NoMatch, "$sElement not found: " & $sElement))
        Return ""
    EndIf
EndFunc   ;==>_FFObjGet

; #FUNCTION# ===================================================================
; Name ..........: _FFObj
; Description ...: Returns or sets an value of an attribute.
; Beschreibung ..: Liefert oder setzt den Wert eines Attributes.
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFObj($sObject[, $sAttrib = ""[, $vValue = ""]])
; Parameter(s): .: $sObject     - Object or element in FireFox
;                  $sAttrib     - Optional: (Default = "") :
;                  $vValue      - Optional: (Default = "") :
; Return Value ..: Success      -
;                  Failure      - ""
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Fri Oct 16 19:07:54 CEST 2009
; Link ..........:
; Related .......: _FFObjGet, _FFObjNew, _FFObjDelete
; Example .......: Yes
; ==============================================================================
Func _FFObj($sObject, $sAttrib = "", $vValue = "")
    Local Const $sFuncName = "_FFObj"

    If StringLeft($sObject, 7) = "OBJECT|" Then $sObject = StringMid($sObject, 8)
    If StringLeft($sObject, 1) = "." Then $sObject = "window.content.document" & $sObject
    If Not (StringInStr($sObject, "window.content") Or StringInStr($sObject, "FFau3.")) Then $sObject = "FFau3." & $sObject

    If $sAttrib <> "" Then
        If Not StringInStr($sAttrib, "(") Then
            _FFCmd($sObject & ".hasAttribute('" & $sAttrib & "')")
            If @error And $vValue <> "" Then
                ;SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "$sAttrib not found: " & $sAttrib))
                _FFCmd($sObject & "setAttributeNode('" & $sAttrib & "')")
            EndIf
        EndIf
        $sObject &= "." & $sAttrib

        If IsInt($vValue) Then
            $sObject &= "=" & $vValue
        ElseIf IsBool($vValue) Then
            $sObject &= "=" & __FFB2S($vValue)
        ElseIf $vValue <> "" Then
            $sObject &= "='" & $vValue & "'"
        EndIf
    EndIf

    Local $RetVal = _FFCmd($sObject)
    If Not @error And $RetVal <> "_FFCmd_Err" Then
        Return $RetVal
    Else
        SetError(__FFError($sFuncName, $_FF_ERROR_NoMatch, "$sObject not found: " & $sObject))
        Return ""
    EndIf
EndFunc   ;==>_FFObj

; #FUNCTION# ===================================================================
; Name ..........: _FFObjNew
; Description ...: Creates a new object in FireFox.
; Beschreibung ..: Erzeugt ein neues Object in FireFox.
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFObjNew($sNewObject, $sObject)
; Parameter(s): .: $sNewObject  -
;                  $sObject     -
; Return Value ..: Success      - 1
;                  Failure      - 0
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Tue Apr 07 15:14:59 CEST 2009
; Link ..........:
; Related .......: _FFObjGet, _FFObj, _FFObjDelete
; Example .......: Yes
; ==============================================================================
Func _FFObjNew($sNewObject, $sObject)
    If StringRegExp($sNewObject, "[\W]+") Then Return 0
    Local $RetVal = _FFCmd("try{FFau3." & $sNewObject & "=" & $sObject & "}catch(e){};FFau3." & $sNewObject & "?1:0;", 3000, False)
    Return SetError(Number($RetVal), @extended, $RetVal)
EndFunc   ;==>_FFObjNew

; #FUNCTION# ===================================================================
; Name ..........: _FFObjDelete
; Description ...: Deletes an object in FireFox.
; Beschreibung ..: Loescht ein Objekt in FireFox.
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFObjDelete($sObject)
; Parameter(s): .: $sObject     -
; Return Value ..: Success      - 1
;                  Failure      - 0
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Wed Apr 08 14:21:26 CEST 2009 @556 /Internet Time/
; Link ..........:
; Related .......: _FFObjGet, _FFObjNew, _FFObj
; Example .......: Yes
; ==============================================================================
Func _FFObjDelete($sObject)
    Local $sFFau3 = "simulateevent getlinkinfo getlinks searchimagebysize searchlink searchtab Searchtaburl closewin selectwin"
    If StringInStr($sFFau3, StringLower($sObject)) Then Return 0
    Return _FFCmd("delete FFau3." & $sObject & ";!FFau3." & $sObject & "?1:0;")
EndFunc   ;==>_FFObjDelete

; #FUNCTION# ===================================================================
; Name ..........: _FFAu3Option
; Description ...: Sets and get options for the FF.au3
; Beschreibung ..: Abfrage und Setzen von Optionen für die FF.au3
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFAu3Option($sOption[, $vValue = ""])
; Parameter(s): .: $sOption     - LoadWaitTimeOut
;                               | SearchMode
;                               | ComTrace
;                               | ErrorMsgBox
;                  $vValue      - Optional: (Default = "") : if noe value is given, the current value is returned
;                               | SearchMode 0 = SubString, 1 = Compare
;                               | LoadWaitTimeOut (int / min. 1000)
;                               | LoadWaitStop (bool) stop loading after LoadWaitTimeOut
;                               | ComTrace (bool)
;                               | ErrorMsgBox (bool)
; Return Value ..: Success      - 1 / current value
;                  Failure      - 0
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Mon Feb 15 22:14:23 CET 2010
; Link ..........:
; Related .......:
; Example .......: Yes
; ==============================================================================
Func _FFAu3Option($sOption, $vValue = "")
    Local Const $sFuncName = "_FFOption"

    Switch $sOption
        Case "SearchMode"
            If $vValue == "" Then Return $_FF_SEARCH_MODE
            If Not IsInt($vValue) Then
                SetError(__FFError($sFuncName, $_FF_ERROR_InvalidDataType, "(int) $vValue: " & $vValue))
                Return 0
            EndIf
            If $vValue > 1 Then $vValue = 0
            $_FF_SEARCH_MODE = $vValue
        Case "LoadWaitTimeOut"
            If $vValue == "" Then Return $_FF_LOADWAIT_TIMEOUT
            If Not IsInt($vValue) Then
                SetError(__FFError($sFuncName, $_FF_ERROR_InvalidDataType, "(int) $vValue: " & $vValue))
                Return 0
            EndIf
            If $vValue < 1000 Then $vValue = 1000
            $_FF_LOADWAIT_TIMEOUT = $vValue
        Case "LoadWaitStop"
            If $vValue == "" Then Return $_FF_LOADWAIT_STOP
            If Not IsBool($vValue) Then
                SetError(__FFError($sFuncName, $_FF_ERROR_InvalidDataType, "(bool) $vValue: " & $vValue))
                Return 0
            EndIf
            $_FF_LOADWAIT_STOP = $vValue
        Case "ComTrace"
            If $vValue == "" Then Return $_FF_COM_TRACE
            If Not IsBool($vValue) Then
                SetError(__FFError($sFuncName, $_FF_ERROR_InvalidDataType, "(bool) $vValue: " & $vValue))
                Return 0
            EndIf
            $_FF_COM_TRACE = $vValue
        Case "ErrorMsgBox"
            If $vValue == "" Then Return $_FF_ERROR_MSGBOX
            If Not IsBool($vValue) Then
                SetError(__FFError($sFuncName, $_FF_ERROR_InvalidDataType, "(bool) $vValue: " & $vValue))
                Return 0
            EndIf
            $_FF_ERROR_MSGBOX = $vValue
        Case Else
            SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "(SearchMode|LoadWaitTimeOut|ComTrace|ErrorMsgBox) $sOption" & $sOption))
    EndSwitch

    Return 1
EndFunc   ;==>_FFAu3Option

;===============================================================================
;
; Internal Functions with names starting with two underscores will not be documented
; as user functions

Func __FFSetTopDocument()
    $_FF_FRAME = 'top'
    __FFSend("FFau3.WCD=window.content.top.document;")
    Local $sRet = __FFRecv(2000)
    ConsoleWrite($sRet & @CRLF)
    Return
EndFunc   ;==>__FFSetTopDocument

;
; #INTERNAL_USE_ONLY# ==========================================================
; Name ..........: __FFRecv
; Description ...:
; AutoIt Version : V3.3.0.0
; Syntax ........: __FFRecv([$iTimeOut = 10000])
; Parameter(s): .: $iTimeOut    - Optional: (Default = 10000) : TimeOut for __FFWaitForRepl
; Return Value ..: Success      - Return value from MozRepl
;                  Failure      - ""
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Mon Mar 23 22:27:52 CET 2009 @936 /Internet Time/
; ==============================================================================
Func __FFRecv($iTimeOut = 30000)
    Local $sRet = __FFWaitForRepl($iTimeOut)
    Local $iErr = @error
    $sRet = StringStripWS($sRet, 3)

    ; Removing leading and trailing "
    If StringLeft($sRet, 1) = '"' Then $sRet = StringTrimLeft($sRet, 1)
    If StringRight($sRet, 1) = '"' Then $sRet = StringTrimRight($sRet, 1)

    ; String to bool
    If $sRet = "true" Then
        $sRet = 1
    ElseIf $sRet = "false" Then
        $sRet = 0
    EndIf

    If $_FF_COM_TRACE Then ConsoleWrite("__FFRecv: " & $sRet & @CRLF)

    SetError($iErr)
    Return $sRet
EndFunc   ;==>__FFRecv

; #INTERNAL_USE_ONLY# ==========================================================
; Name ..........: __FFSend
; Description ...:
; AutoIt Version : V3.3.0.0
; Syntax ........: __FFSend($sCommand)
; Parameter(s): .: $sCommand    - String to send
; Return Value ..: Success      - 1
;                  Failure      - 0
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Mon Mar 23 22:26:09 CET 2009 @934 /Internet Time/
; ==============================================================================
Func __FFSend($sCommand)
    Local Const $sFuncName = "__FFSend"

    If Not __FFIsSocket($_FF_GLOBAL_SOCKET) Then
        SetError(__FFError($sFuncName, $_FF_ERROR_SocketError))
        Return 0
    EndIf

    TCPSend($_FF_GLOBAL_SOCKET, $sCommand & @CRLF)
    If Not @error Then
        If $_FF_COM_TRACE Then ConsoleWrite("__FFSend: " & $sCommand & @CRLF)
        Return 1
    Else
        SetError(__FFError($sFuncName, $_FF_ERROR_SendRecv, "TCPSend: " & $sCommand))
        Return 0
    EndIf
EndFunc   ;==>__FFSend

; #INTERNAL_USE_ONLY# ==========================================================
; Name ..........: __FFChromeSelect
; Description ...: Some shortcuts for chrome
; AutoIt Version : V3.3.0.0
; Syntax ........: __FFChromeSelect($sOpt)
; Parameter(s): .: $sOpt        - Shortcut
; Return Value ..: Success      - crome: + ....xul
;                  Failure      - crome: + $sOpt
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Sat Feb 14 12:33:16 CET 2009 @523 /Internet Time/
; ==============================================================================
Func __FFChromeSelect($sOpt)
    Local $sXUL

    Switch StringLower($sOpt)
        Case "bookmarks"
            $sXUL = "//browser/content/bookmarks/bookmarksPanel.xul"
        Case "history"
            $sXUL = "//browser/content/history/history-panel.xul"
        Case "extensions"
            $sXUL = "//mozapps/content/extensions/extensions.xul?type=extensions"
        Case "advanced-scripts"
            $sXUL = "//browser/content/preferences/advanced-scripts.xul"
        Case "changeaction"
            $sXUL = "//browser/content/preferences/changeaction.xul"
        Case "prefs"
            $sXUL = "//browser/content/preferences/preferences.xul"
        Case "colors"
            $sXUL = "//browser/content/preferences/colors.xul"
        Case "connection"
            $sXUL = "//browser/content/preferences/connection.xul"
        Case "cookies"
            $sXUL = "//browser/content/preferences/cookies.xul"
        Case "downloads"
            $sXUL = "//mozapps/content/downloads/downloads.xul"
        Case "downloadactions"
            $sXUL = "//browser/content/preferences/downloadactions.xul"
        Case "fonts"
            $sXUL = "//browser/content/preferences/fonts.xul"
        Case "languages"
            $sXUL = "//browser/content/preferences/languages.xul"
        Case "permissions"
            $sXUL = "//browser/content/preferences/permissions.xul"
        Case "sanitize"
            $sXUL = "//browser/content/preferences/sanitize.xul"
        Case "fireftp"
            $sXUL = "//fireftp/content/fireftp.xul"
        Case Else
            $sXUL = $sOpt
    EndSwitch

    Return "chrome:" & $sXUL
EndFunc   ;==>__FFChromeSelect

; #FUNCTION# ===================================================================
; Name ..........: __FFFilterString
; Description ...: Filter for strings
; AutoIt Version : V3.3.0.0
; Syntax ........: __FFFilterString(ByRef $sString[, $iMode = 1])
; Parameter(s): .: $sString     - String to filter
;                  $iMode       - Optional: (Default = 0) : removes nothing
;                               - 0 = no filter
;                               - 1 = removes non ascii characters
;                               - 2 = removes all double whitespaces
;                               - 4 = removes all double linefeeds
;                               - 8 = removes all html-tags
;                               - 16 = simple html-tag / entities convertor
; Return Value ..: Success      - Filterd String
;                  Failure      - Input String
; Author(s) .....: Thorsten Willert
; Date ..........: Sun Mar 06 21:26:43 CET 2011 @893 /Internet Time/
; ==============================================================================
Func __FFFilterString(ByRef $sString, $iMode = 0)
    If $iMode = 0 Then Return $sString

    ;16 simple HTML tag converter
    If BitAND($iMode, 16) Then
        Local $sRepl[2][6] = [["<br>", "&nbsp;", "&gt;", "&lt;", "&amp;", "&quot;"], _
                [@CRLF, " ", ">", "<", "&", '"']]
        $sString = StringRegExpReplace($sString, "<p.*>", @CRLF & @CRLF)
        For $i = 0 To UBound($sRepl, 2) - 1
            $sString = StringReplace($sString, $sRepl[0][$i], $sRepl[1][$i])
        Next
    EndIf
    ;8 Tag filter
    If BitAND($iMode, 8) Then
        $sString = StringRegExpReplace($sString, "<[^>]*>", "")
    EndIf
    ; 4 remove all double cr, lf
    If BitAND($iMode, 4) Then
        $sString = StringRegExpReplace($sString, "([ \t]*[\n\r]+[ \t]*)", @CRLF)
        $sString = StringRegExpReplace($sString, "[\n\r]+", @CRLF)
    EndIf
    ; 2 remove all double withespaces
    If BitAND($iMode, 2) Then
        $sString = StringRegExpReplace($sString, "[[:blank:]]+", " ")
        $sString = StringRegExpReplace($sString, "\n[[:blank:]]+", @CRLF)
        $sString = StringRegExpReplace($sString, "[[:blank:]]+\n", "")
        $iMode -= 2
    EndIf
    ; 1 remove all non ASCII
    If BitAND($iMode, 1) Then
        $sString = StringRegExpReplace($sString, "[^\x00-\x7F]", " ")
    EndIf

    Return $sString
EndFunc   ;==>__FFFilterString

; #INTERNAL_USE_ONLY# ==========================================================
; Name ..........: __FFError
; Description ...: Writes Error to the console and show message-boxes if the script is compiled
; AutoIt Version : V3.3.0.0
; Syntax ........: __FFError($sWhere, ByRef $i_FF_ERROR[, $sMessage = ""])
; Parameter(s): .: $i_FF_ERROR  - Error Const
;                  $sMessage    - Optional: (Default = "") : Additional Information
; Return Value ..: Success      - Error Const from $i_FF_ERROR
; Author(s) .....: Thorsten Willert
; Date ..........: Sat Jul 18 11:52:36 CEST 2009
; ==============================================================================
Func __FFError($sWhere, Const ByRef $i_FF_ERROR, $sMessage = "")
    Local $sOut, $sMsg
    Sleep(200)

    Switch $i_FF_ERROR
        Case $_FF_ERROR_Success
            Return $_FF_ERROR_Success
        Case $_FF_ERROR_GeneralError
            $sOut = "General Error"
        Case $_FF_ERROR_SocketError
            $sOut = "Socket Error"
        Case $_FF_ERROR_InvalidDataType
            $sOut = "Invalid data type"
        Case $_FF_ERROR_InvalidValue
            $sOut = "Invalid value"
        Case $_FF_ERROR_Timeout
            $sOut = "Timeout"
        Case $_FF_ERROR_NoMatch
            $sOut = "No match"
        Case $_FF_ERROR_RetValue
            $sOut = "Error return value"
        Case $_FF_ERROR_SendRecv
            $sOut = "Error TCPSend / TCPRecv"
        Case $_FF_ERROR_ReplException
            $sOut = "MozRepl Exception"
        Case $_FF_ERROR_SendRecv
            $sOut = "Error TCPSend / TCPRecv"
        Case $_FF_ERROR_InvalidExpression
            $sOut = "Invalid Expression"
    EndSwitch
    If $sMessage = "" Then
        $sMsg = $sWhere & " ==> " & $sOut & @CRLF
        ConsoleWriteError($sMsg)
        If @Compiled Then
            If $_FF_ERROR_MSGBOX And $i_FF_ERROR < 6 Then MsgBox(16, "FF.au3 Error:", $sMsg)
            DllCall("kernel32.dll", "none", "OutputDebugString", "str", $sMsg)
        EndIf

    Else
        $sMsg = $sWhere & " ==> " & $sOut & ": " & $sMessage & @CRLF
        ConsoleWriteError($sMsg)
        If @Compiled Then
            If $_FF_ERROR_MSGBOX And $i_FF_ERROR < 6 Then MsgBox(16, "FF.au3 Error:", $sMsg)
            DllCall("kernel32.dll", "none", "OutputDebugString", "str", $sMsg)
        EndIf
    EndIf

    Return $i_FF_ERROR
EndFunc   ;==>__FFError

; #INTERNAL_USE_ONLY# ==========================================================
; Name ..........: __FFIsIP
; Description ...: IP4 check
; AutoIt Version : V3.3.0.0
; Syntax ........: __FFIsIP(ByRef $IP[, $bSubstring = False])
; Parameter(s): .: $IP          - IPV4 Address Or IPV6 (HexCompressed/6Hex4Dec/Hex4DecCompressed)
; Return Value ..: Success      - 1
;                  Failure      - 0
; Author(s) .....: Thorsten Willert
; Date ..........: Mon Sep 23 18:50:26 CEST 2013 @743 /Internet-Zeit/
; ==============================================================================
Func __FFIsIP(ByRef $IP, $bSubstring = False)
    Local $sStart = ""
    Local $sEnd = ""

    If Not $bSubstring Then
        $sStart = '^'
        $sEnd = "$"
    EndIf

    $IP = StringStripWS($IP, 3)

    Return StringRegExp($IP, $sStart & '(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])' & $sEnd) Or _
            StringRegExp($IP, $sStart & '(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}' & $sEnd) Or _ ; IPV6
            StringRegExp($IP, $sStart & '((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?)::((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?)' & $sEnd) Or _ ; IPV6 HexCompressed
            StringRegExp($IP, $sStart & '((?:[0-9A-Fa-f]{1,4}:){6,6})(25[0-5]||2[0-4]\d||[0-1]?\d?\d)(\.(25[0-5]||2[0-4]\d||[0-1]?\d?\d)){3}' & $sEnd) Or _ ; IPV6 6Hex4Dec
            StringRegExp($IP, $sStart & '((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?) ::((?:[0-9A-Fa-f]{1,4}:)*)(25[0-5]||2[0-4]\d||[0-1]?\d?\d)(\.(25[0-5]||2[0-4]\d||[0-1]?\d?\d)){3}' & $sEnd) ; IPV6 Hex4DecCompressed

EndFunc   ;==>__FFIsIP

; #INTERNAL_USE_ONLY# ==========================================================
; Name ..........: __FFIsPort
; Description ...: Port check
; AutoIt Version : V3.3.0.0
; Syntax ........: __FFIsPort(ByRef $iPort)
; Parameter(s): .: $iPort       - Port number 1024-65535
; Return Value ..: Success      - 1
;                  Failure      - 0
; Author(s) .....: Thorsten Willert
; Date ..........: 28. August 2007
; ==============================================================================
Func __FFIsPort(ByRef $iPort)
    Return (IsInt($iPort) And $iPort >= 1024 And $iPort <= 65535)
EndFunc   ;==>__FFIsPort

; #INTERNAL_USE_ONLY# ==========================================================
; Name ..........: __FFIsSocket
; Description ...: Socket check
; AutoIt Version : V3.3.0.0
; Syntax ........: __FFIsSocket(ByRef $Socket)
; Parameter(s): .: $Socket      -
; Return Value ..: Success      - 1
;                  Failure      - 0
; Author(s) .....: Thorsten Willert
; Date ..........: Tue Apr 07 11:08:05 CEST 2009 @422 /Internet Time/
; ==============================================================================
Func __FFIsSocket(ByRef $Socket)
    Return ($Socket > 0 And IsInt($Socket))
EndFunc   ;==>__FFIsSocket

; #INTERNAL_USE_ONLY# ==========================================================
; Name ..........: __FFIsURL
; Description ...: URL check
; AutoIt Version : V3.3.0.0
; Syntax ........: __FFIsURL(ByRef $URL)
; Parameter(s): .: $URL         - http/https/ftp/about/chrome/file
; Return Value ..: Success      - 1
;                  Failure      - 0
; Author(s) .....: Thorsten Willert
; Date ..........: Fri Sep 13 08:36:54 CEST 2013 @317 /Internet-Zeit/
; Link ..........: http://geekswithblogs.net/casualjim/archive/2005/12/01/61722.aspx
; ==============================================================================
Func __FFIsURL(ByRef $URL)
    Return (StringRegExp($URL, '^^((ht|f)tp(s?)\:\/\/|~/|/)([\w]+:\w+@)?([a-zA-Z]{1}([\w\-]+\.)+([\w]{2,5}))(:[\d]{1,5})?((/?\w+/)+|/?)(\w+\.[\w]{3,4})?((\?\w+=\w+)?(&\w+=\w+)*)?') Or _
            StringRegExp($URL, '^^((ht|f)tp(s?)\:\/\/|~/|/)(\d{1,3}\.){3}\d{1,3}(:[\d]{1,5})?(/.*)?$') Or _
            StringLeft($URL, 6) = "about:" Or _
            StringLeft($URL, 7) = "chrome:" Or _
            StringLeft($URL, 10) = "localhost:" Or _
            StringLeft($URL, 8) = "file:///") Or _
            StringLeft($url, 7) = "http://" ; for intranet
EndFunc   ;==>__FFIsURL

Func __FFCheckURL(ByRef $URL)
    If Not __FFIsURL($URL) Then
        If Not StringRegExp($URL, '^((ht|f)tp(s?)\:\/\/|~/|/)') Then $URL = "http://" & $URL
    EndIf

    Return __FFIsURL($URL)
EndFunc   ;==>__FFCheckURL

; #INTERNAL_USE_ONLY# ==========================================================
; Name ..........: __FFB2S
; Description ...: Bool to string
; AutoIt Version : V3.3.0.0
; Syntax ........: __FFB2S($bBool)
; Parameter(s): .: $bBool       - true / false
; Return Value ..: Success      - String "true" or "false"
;                  Failure      - ""
; Author(s) .....: Thorsten Willert
; Date ..........: Sun Mar 06 21:27:53 CET 2011 @894 /Internet Time/
; ==============================================================================
Func __FFB2S(ByRef $bBool)
    If $bBool Then Return "true"
    Return "false"
EndFunc   ;==>__FFB2S

; #INTERNAL_USE_ONLY# ==========================================================
; Name ..........: __FFValue2JavaScript
; Description ...:
; AutoIt Version : V3.3.0.0
; Syntax ........: __FFValue2JavaScript(ByRef $sValue)
; Parameter(s): .: $sValue      -
; Return Value ..: Success      -
;                  Failure      -
; Author(s) .....: Thorsten Willert
; Date ..........: Mon Apr 13 15:42:21 CEST 2009
; ==============================================================================
Func __FFValue2JavaScript(ByRef $sValue)
    If $sValue = "" Then Return ""
    Local $sTmp = "", $c

    $sValue = StringRegExpReplace($sValue, '([\\"''])', '\\$1')
    $sValue = StringReplace($sValue, @CRLF, "\n")
    $sValue = StringReplace($sValue, @CR, "\r")
    $sValue = StringReplace($sValue, @TAB, "\t")

    If StringRegExp($sValue, "[^\x00-\x7F]", 0) Then
        For $i = 0 To StringLen($sValue)
            $c = StringMid($sValue, $i, 1)
            If StringRegExp($c, "[^\x00-\x7F]", 0) Then $c = StringFormat("\\u%0000s", Hex(AscW($c), 4))
            $sTmp &= $c
        Next
        $sValue = $sTmp
    EndIf

    Return $sValue

EndFunc   ;==>__FFValue2JavaScript

; #INTERNAL_USE_ONLY# ==========================================================
; Name ..........: __FFMultiDispatchEvent
; Description ...: Dispatches multiple events on one element
; AutoIt Version : V3.3.6.1
; Syntax ........: __FFMultiDispatchEvent($sElement, $iEventType[, $iKeyCode = 13])
; Parameter(s): .: $sElement    -
;                  $iEventType  - one or more of the following events:
;                               | $_FF_Event_Select
;                               | $_FF_Event_Focus
;                               | $_FF_Event_Blur
;                               | $_FF_Event_Resize
;                               | $_FF_Event_Keydown
;                               | $_FF_Event_Keypress
;                               | $_FF_Event_Keyup
;                               | $_FF_Event_Click
;                  $iKeyCode    - Optional: (Default = 13) :
; Return Value ..: Success      - 1
;                  Failure      - 0
; Author(s) .....: Thorsten Willert
; Date ..........: Sun Mar 06 21:47:20 CET 2011
; ==============================================================================
Func __FFMultiDispatchEvent($sElement, $iEventType, $iKeyCode = 13)
    Local $iRet = 1
    If BitAND($iEventType, $_FF_Event_Change) Then $iRet = $iRet And _FFDispatchEvent($sElement, "change", $iKeyCode)
    If BitAND($iEventType, $_FF_Event_Select) Then $iRet = $iRet And _FFDispatchEvent($sElement, "select", $iKeyCode)
    If BitAND($iEventType, $_FF_Event_Focus) Then $iRet = $iRet And _FFDispatchEvent($sElement, "focus", $iKeyCode)
    If BitAND($iEventType, $_FF_Event_Blur) Then $iRet = $iRet And _FFDispatchEvent($sElement, "blur", $iKeyCode)
    If BitAND($iEventType, $_FF_Event_Resize) Then $iRet = $iRet And _FFDispatchEvent($sElement, "resize", $iKeyCode)
    If BitAND($iEventType, $_FF_Event_Keydown) Then $iRet = $iRet And _FFDispatchEvent($sElement, "keydown", $iKeyCode)
    If BitAND($iEventType, $_FF_Event_Keypress) Then $iRet = $iRet And _FFDispatchEvent($sElement, "keypress", $iKeyCode)
    If BitAND($iEventType, $_FF_Event_Keyup) Then $iRet = $iRet And _FFDispatchEvent($sElement, "keyup", $iKeyCode)
    If BitAND($iEventType, $_FF_Event_Click) Then $iRet = $iRet And _FFDispatchEvent($sElement, "click", $iKeyCode)
    If BitAND($iEventType, $_FF_Event_MouseUp) Then $iRet = $iRet And _FFDispatchEvent($sElement, "mouseup", $iKeyCode)
    If BitAND($iEventType, $_FF_Event_MouseDown) Then $iRet = $iRet And _FFDispatchEvent($sElement, "mousedown", $iKeyCode)
    If BitAND($iEventType, $_FF_Event_MouseOver) Then $iRet = $iRet And _FFDispatchEvent($sElement, "mouseover", $iKeyCode)
    If BitAND($iEventType, $_FF_Event_MouseMove) Then $iRet = $iRet And _FFDispatchEvent($sElement, "mousemove", $iKeyCode)
    If BitAND($iEventType, $_FF_Event_MouseOut) Then $iRet = $iRet And _FFDispatchEvent($sElement, "mouseout", $iKeyCode)
    Return $iRet
EndFunc   ;==>__FFMultiDispatchEvent

; #INTERNAL_USE_ONLY# ==========================================================
; Name ..........: __FFSendJavaScripts
; Description ...: JavaScript functions
; AutoIt Version : V3.3.0.0
; Syntax ........: __FFSendJavaScripts([$bRefresh = true[, $bTrace = False]])
; Parameter(s): .: $bRefresh    - Optional: (Default = false) : Send again to FF
; Return Value ..: Success      - 1
;                  Failure      - 0
; Author(s) .....: Thorsten Willert
; Date ..........: Wed Dec 02 17:50:27 CET 2009
; Link ..........: http://developer.mozilla.org/en/docs/DOM:event.initMouseEvent
; ==============================================================================
Func __FFSendJavaScripts($bRefresh = True, $bTrace = False)

    Local $bTrc = $_FF_COM_TRACE
    $_FF_COM_TRACE = $bTrace

    If _FFCmd("repl.search(/FFau3/i)", 3000) = "FFau3" And Not $bRefresh Then
        $_FF_COM_TRACE = $bTrace
        Return 1
    EndIf
    If $bRefresh Then _FFCmd('try{delete FFau3;}catch(e){e};')

    ConsoleWrite("__FFSendJavaScripts: Sending functions to FireFox .")

    _FFCmd('FFau3=new Object();FFau3.tmp="";FFau3.obj=null;FFau3.WCD=window.content.top.document;')
    ConsoleWrite(".")

    ; sEvent = MouseEvents | KeyboardEvent | Event
    ; sType:
    ;   MouseEvents: click
    ;   KeyboardEvent: keyup | keydown | keypress
    ;   Event: change | select | focus | blur | resize
    ; args: oObject, sEvent, sType[, Key[, X[ ,Y]]]
    ; key = dec-ASCII-code
    ; X = clientX
    ; Y = clientY
    _FFCmd('FFau3.simulateEvent=function simulateEvent(a,b,c){try{var d=document.createEvent(b);switch(b){case"MouseEvents":d.initMouseEvent(c,true,true,window,0,0,0,simulateEvent.arguments[4],simulateEvent.arguments[5],false,false,false,false,0,null);break;case"KeyboardEvent":d.initKeyEvent(c,true,true,null,false,false,false,false,simulateEvent.arguments[3],0);break;case"Event":d.initEvent(c,true,true);break}a.dispatchEvent(d);return 1}catch(e){return-3}return 0};')
    #cs
        _FFCmd('FFau3.simulateEvent=function simulateEvent(oObject,sEvent,sType){' & _
        'try{ var evt=document.createEvent(sEvent);' & _
        'switch(sEvent){' & _
        ' case "MouseEvents":' & _
        '  evt.initMouseEvent(sType,true,true,window,0,0,0,simulateEvent.arguments[4],simulateEvent.arguments[5],false,false,false,false,0,null);break;' & _
        ' case "KeyboardEvent":' & _
        '  evt.initKeyEvent(sType,true,true,null,false,false,false,false,simulateEvent.arguments[3],0);break;' & _
        ' case "Event":' & _
        '  evt.initEvent(sType,true,true);break; }' & _
        'oObject.dispatchEvent(evt);' & _
        'return 1;' & _
        '}catch(e){return -3;}return 0;};')
    #ce
    ConsoleWrite(".")

    ; GetLinkInfo(): JavaScript to get all informations about a link
    _FFCmd('FFau3.GetLinkInfo=function GetLinkInfo(i,a){var b="";with(FFau3.WCD){try{b=links[i].href+a;b+=links[i].hash+a;b+=links[i].search+a;b+=links[i].name+a;b+=links[i].id+a;b+=links[i].text+a;b+=links[i].innerHTML+a;b+=(links[i].hasAttribute("target")?links[i].target+a:a);b+=links[i].protocol+a;b+=links[i].port;return b.replace(/[\s]+/g," ")}catch(e){return-3}}};')
    #cs
        _FFCmd('FFau3.GetLinkInfo = function GetLinkInfo(i,sLimiter)' & _
        '{ var info=""; with(FFau3.WCD) {' & _
        'try {' & _
        'info = links[i].href + sLimiter;' & _
        'info += links[i].hash + sLimiter;' & _
        'info += links[i].search + sLimiter;' & _
        'info += links[i].name + sLimiter;' & _
        'info += links[i].id + sLimiter;' & _
        'info += links[i].text + sLimiter;' & _
        'info += links[i].innerHTML + sLimiter;' & _
        'info += (links[i].hasAttribute("target") ? links[i].target + sLimiter : sLimiter);' & _
        'info += links[i].protocol + sLimiter;' & _
        'info += links[i].port;' & _
        'return info.replace(/[\s]+/g," ");' & _
        '}catch(e){return -3;}' & _
        '}};')
    #ce
    ConsoleWrite(".")

    ; GetLinks(): JavaScript to get an information of all links
    _FFCmd('FFau3.GetLinks=function GetLinks(a){var b="";with(FFau3.WCD){try{for(var i=0;i<links.length;i++){b+=this.GetLinkInfo(i,a)+"\n"}return b}catch(e){return-3}}};')
    #cs
        _FFCmd('FFau3.GetLinks = function GetLinks(sLimiter)' & _
        '{ var res=""; with(FFau3.WCD) {try{' & _
        'for (var i=0;i<links.length;i++){res += this.GetLinkInfo(i,sLimiter) + "\n";}' & _
        'return res; } catch(e) {return -3;}}};')
    #ce
    ConsoleWrite(".")

    ; SearchImageBySize(): JavaScript
    _FFCmd('FFau3.SearchImageBySize=function SearchImageBySize(a,b,c,d){var e="";with(FFau3.WCD){for(var i=0;i<images.length;i++){var f=images[i].width;var g=images[i].height;switch(c){case"eq":if((f<=b+b/100*d&&g<=a+a/100*d&&f>=b-b/100*d&&g>=a-a/100*d))e+=" "+i;break;case"lt":if((f<=b&&g<=a)&&(f>=b-b/100*d&&g>=a-a/100*d))e+=" "+i;break;case"gt":if((f>=b&&g>=a)&&(f<=b+b/100*d&&g<=a+a/100*d))e+=" "+i;break;default:return-1}}return e}};')
    #cs
        _FFCmd('FFau3.SearchImageBySize = function SearchImageBySize(iH, iW, sMode, iP){' & _
        'var sRet=""; with(FFau3.WCD) {' & _
        'for (var i=0;i<images.length;i++){' & _
        'var iWidth=images[i].width;' & _
        'var iHeight=images[i].height;' & _
        'switch (sMode) {' & _
        'case "eq": if ((iWidth<=iW+iW/100*iP && iHeight<=iH+iH/100*iP && iWidth>=iW-iW/100*iP && iHeight>=iH-iH/100*iP)) sRet += " " + i; break;' & _
        'case "lt": if ((iWidth<=iW && iHeight<=iH) && (iWidth>=iW-iW/100*iP && iHeight>=iH-iH/100*iP)) sRet += " " + i; break;' & _
        'case "gt": if ((iWidth>=iW && iHeight>=iH) && (iWidth<=iW+iW/100*iP && iHeight<=iH+iH/100*iP)) sRet += " " + i; break;' & _
        'default: return -1}' & _
        '} return sRet; } };')
    #ce
    ConsoleWrite(".")

    _FFCmd('FFau3.findPos=function findPos(a){try{var b=c=0;if(a.offsetParent){do{b+=a.offsetLeft;c+=a.offsetTop}while(a=a.offsetParent);return b+" "+c}}catch(e){return-3}}')
    #cs
        _FFCmd("FFau3.findPos = function findPos(obj){try{" & _
        "var curleft=c=0;" & _
        "if (obj.offsetParent) {" & _
        "do {curleft+=obj.offsetLeft;" & _
        "  c+=obj.offsetTop;" & _
        "} while (obj=obj.offsetParent);" & _
        "return curleft+' '+c;" & _
        "}}catch(e){return -3}}")
    #ce
    ConsoleWrite(".")

    ; SearchTab(); JavaScript to search a tab by label
    _FFCmd('FFau3.SearchTab=function SearchTab(a){try{for(var i=0;i<gBrowser.mTabs.length;i++){if(RegExp(a).test(gBrowser.mTabs[i].label))return i};return-1}catch(e){return-3}};')
    #cs
        _FFCmd('FFau3.SearchTab = function SearchTab(RegEx)' & _
        '{try{' & _
        'for (var i=0;i<gBrowser.mTabs.length;i++){' & _
        'if (RegExp(RegEx).test(gBrowser.mTabs[i].label)) return i;};' & _
        'return -1;}catch(e){return -3;}};')
    #ce
    ConsoleWrite(".")

    ; SearchTabURL(); JavaScript to search a tab by href
    _FFCmd('FFau3.SearchTabURL=function SearchTabURL(a){try{for(var i=0;i<gBrowser.mTabs.length;i++){if(RegExp(a).test(gBrowser.mTabs[i].linkedBrowser.contentWindow.document.location.href))return i};return-1}catch(e){return-3}};')

    ; CloseWin()
    _FFCmd('FFau3.CloseWin=function CloseWin(a,b){var c;var d=Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator).getEnumerator("navigator:browser");while(d.hasMoreElements()){c=d.getNext();switch(b){case"title":if(c.title.indexOf(a)!=-1){c.close();return 1};break;case"label":if(FFau3.SearchTab(a)>-1){c.close();return 1};break;case"href":if(c.content.document.location.href.indexOf(a)!=-1){c.close();return 1}break;default:return-1}}return-1};')
    #cs
        _FFCmd('FFau3.CloseWin = function CloseWin(sSearch,sMode){' & _
        'var win;var enum = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator).getEnumerator("navigator:browser");' & _
        'while(enum.hasMoreElements() ){' & _
        'win=enum.getNext();' & _
        'switch(sMode){' & _
        'case "title": if (win.title.indexOf(sSearch) != -1){win.close();return 1;};break;' & _
        'case "label": if (FFau3.SearchTab(sSearch)>-1){win.close();return 1;};break;' & _
        'case "href": if (win.content.document.location.href.indexOf(sSearch) != -1){win.close();return 1;}break;' & _
        'default: return -1;' & _
        '}}return -1;};')
    #ce
    ConsoleWrite(".")

    ; SelectWin()
    ;   _FFCmd('FFau3.SelectWin=function SelectWin(a,b,c){var d;var e=Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator).getEnumerator(c);while(e.hasMoreElements()){d=e.getNext();switch(b){case"title":if(d.title.indexOf(a)!=-1){repl.enter(d);return 1};break;case"label":if(FFau3.SearchTab(a)>-1){repl.enter(d);return 1};break;case"href":if(d.content.document.location.href.indexOf(a)!=-1){repl.enter(d);return 1};break;default:return-1}}return-1};')
    ; WDP Rewrote to check individual tabs
    _FFCmd('FFau3.SelectWin=function SelectWin(a,b,c){var d;var e=Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator).getEnumerator(c);while(e.hasMoreElements()){d=e.getNext();switch(b){case"title":if(d.title.indexOf(a)!=-1){repl.enter(d);return 1};break;case"label":if(FFau3.SearchTab(a)>-1){repl.enter(d);return 1};break;case"href":for(var f=0; f < d.gBrowser.browsers.length; f++){var g=d.gBrowser.getBrowserAtIndex(f);if (RegExp(a).test(g.currentURI.spec)){repl.enter(g);return 1;}};break;default:return-1}}return-1};')
    #cs
        _FFCmd('FFau3.SelectWin = function SelectWin(sSearch,sMode,sType){' & _
        'var win;var enum = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator).getEnumerator(sType);' & _
        'while(enum.hasMoreElements() ){' & _
        'win=enum.getNext();' & _
        'switch(sMode){' & _
        'case "title": if (win.title.indexOf(sSearch) != -1){repl.enter(win);return 1;};break;' & _
        'case "label": if (FFau3.SearchTab(sSearch)>-1){repl.enter(win);return 1;};break;' & _
        'case "href": if (win.content.document.location.href.indexOf(sSearch) != -1){repl.enter(win);return 1;};break;' & _
        'default: return -1};' & _
        '}return -1;};')
    #ce
    ConsoleWrite(". done" & @CRLF)

    $_FF_COM_TRACE = $bTrc
    Return 1

EndFunc   ;==>__FFSendJavaScripts

; #INTERNAL_USE_ONLY# ==========================================================
; Name ..........: __FFWaitForRepl
; Description ...:
; AutoIt Version : V3.3.0.0
; Syntax ........: __FFWaitForRepl($iTimeOut)
; Parameter(s): .: $iTimeOut
; Return Value ..: Success      - Return value from MozRepl
;                  Failure      - ""
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Fri Dec 04 11:48:08 CET 2009
; ==============================================================================
Func __FFWaitForRepl($iTimeOut)
    Local Const $sFuncName = @CRLF & "__FFWaitForRepl"

    Local $recv, $sRet = "", $TimeOutTimer = TimerInit()
    If $iTimeOut < 200 Then $iTimeOut = 200

    While TimerDiff($TimeOutTimer) < $iTimeOut

        ; connection delay
        Sleep($_FF_CON_DELAY)

        $recv = TCPRecv($_FF_GLOBAL_SOCKET, 4096)
        ;ConsoleWrite($recv & @CRLF)
        ; TCP error
        If @error Then
            SetError(__FFError($sFuncName, $_FF_ERROR_SendRecv, "TCPRecv :" & @error))
            Return ""
        EndIf
        $sRet &= $recv

        ; error from MozRepl
        If StringRegExp($recv, "!!!(.*?)(TypeError|Exception|ReferenceError):?") Then
            $recv = StringLeft($recv, StringInStr($recv, "location") - 1)
            Sleep(200)
            SetError(__FFError($sFuncName, $_FF_ERROR_ReplException, StringStripWS($recv, 3)))
            __FFSend(";") ; MozRepl-Reset
            Sleep(200)
            Return ""
        ElseIf StringInStr($recv, "....>") Then
            __FFSend(";") ; MozRepl-Reset
            Sleep(200)
            SetError(__FFError($sFuncName, $_FF_ERROR_RetValue, "MozRepl ....>"))
            Return ""
        ElseIf StringInStr($recv, "beginning of the line to force evaluation") Then
            Sleep(500) ; first connection delay
        EndIf

        ; multiple connections to MozRepl (e.g repl2?> ...)
        If StringRegExp($recv, "repl[\d]*>") Then Return StringRegExpReplace($sRet, "repl[\d]*>", "")
    WEnd

    ; Timeout
    SetError(__FFError($sFuncName, $_FF_ERROR_Timeout, Round(TimerDiff($TimeOutTimer)) & "ms > " & $iTimeOut & "ms $iTimeOut"))
    Return ""

EndFunc   ;==>__FFWaitForRepl

; #INTERNAL_USE_ONLY# ==========================================================
; Name ..........: __FFStartProcess
; Description ...: Starts the firefox.exe
; AutoIt Version : V3.3.0.0
; Syntax ........: __FFStartProcess([$sURL = "about:blank"[, $bNewWin = False[, $sProfile = "default"[, $bNoRemote = False[, $bHide = False[, $iPort = 4242[, $iTimeOut = 30000]]]]]]])
; Parameter(s): .: $sProfile    - Optional: (Default = "default") :
;                  $bNewWin     - Optional: (Default = false) :
;                  $bNoRemote   - Optional: (Default = false) :
;                  $bHide       - Optional: (Default = False) :
;                  $iPort       - Optional: (Default = 4242) :
;                  $iTimeOut    - Optional: (Default = 30000) : min. 2000ms
; Return Value ..: Success      - 1
;                  Failure      - 0
;                  @ERROR       -
;                  @EXTENDED    - PID from the firefox.exe
; Author(s) .....: Thorsten Willert
; Date ..........: Wed Nov 04 16:01:59 CET 2009
; ==============================================================================
Func __FFStartProcess($sURL = "about:blank", $bNewWin = False, $sProfile = "default", $bNoRemote = False, $bHide = False, $iPort = 4242, $iTimeOut = 30000)
    Local Const $sFuncName = "__FFStartProcess"

    Local $PID = -1
    Local $sNoRemote = "", $sNewWin
    Local $sProcName = $_FF_PROC_NAME

    If $sProfile = "default" Then
        $sProfile = ''
    Else
        $sProfile = ' -P "' & $sProfile & '"'
    EndIf
    If $bNoRemote Then $sNoRemote = "-no-remote"
    If $bNewWin Then $sNewWin = "-new-window"
    $sURL = '"' & $sURL & '"'
    If $iTimeOut < 2000 Then $iTimeOut = 2000


    Local $sHKLM = 'HKEY_LOCAL_MACHINE\SOFTWARE\'
    If @OSArch <> 'X86' Then $sHKLM &= 'Wow6432Node\'
    $sHKLM &= 'Mozilla\Mozilla Firefox'
     Local $sFFExe = RegRead($sHKLM & "\" & RegRead($sHKLM, "CurrentVersion") & "\Main", "PathToExe")
    If @error Then
        SetError(__FFError($sFuncName, $_FF_ERROR_GeneralError, "Error reading registry entry for FireFox." & @CRLF & _
                $sHKLM & "\*CurrentVersion*\Main\PathToExe" & @CRLF & _
                "Error from RegRead: " & @error))
        Return 0
    EndIf

    ; Updated per http://www.autoitscript.com/forum/topic/95595-ffau3-v0600b/page__st__380#entry958812
    Local $sCommand = StringFormat('"%s" %s %s %s "-repl %i %s"', $sFFExe, $sNewWin, $sURL, $sNoRemote, $iPort, $sProfile)
    $PID = Run($sCommand)
    If $bHide Then BlockInput(1)

    Local $iTimeOutTimer = TimerInit()
    While 1
        Sleep(2000)
        If ProcessExists($sProcName) Then ExitLoop
        If (TimerDiff($iTimeOutTimer) > $iTimeOut) Then
            SetError(__FFError($sFuncName, $_FF_ERROR_Timeout, "Browser process not exists: " & $sProcName))
            BlockInput(0)
            Return 0
        EndIf
    WEnd

    If $bHide Then
        Local $WINTITLE_MATCH_MODE = AutoItSetOption("WinTitleMatchMode", 4)
        WinWaitActive("[CLASS:MozillaUIWindowClass]")
        Sleep(500)
        WinSetState("[CLASS:MozillaUIWindowClass]", "", @SW_MINIMIZE)
        BlockInput(0)
        AutoItSetOption("WinTitleMatchMode", $WINTITLE_MATCH_MODE)
    Else
        Sleep(1000)
    EndIf

    If $_FF_COM_TRACE Then ConsoleWrite('__FFStartProcess: "' & $sCommand & @CRLF)

    SetExtended($PID)
    Return 1
EndFunc   ;==>__FFStartProcess

 FFex.au3

; :collapseFolds=0:maxLineLen=80:mode=autoitscript:tabSize=8:indentSize=8:folding=indent:
#include-once
#include <FF.au3>
; Wed Jan 27 16:51:09 CET 2010 @702 /Internet Time/
; by Thorsten Willert

#Region #CURRENT# ==============================================================
; _FFDisPatchKeyEvent
; _FFFormGetLength
; _FFGetValueById
; _FFGetValueByName
; _FFSetValueById
; _FFSetValueByName
; _FFTabCloseAll
; _FFTabGetLength
; _FFTableGetCell
; _FF_Call
; _FF_CookiesAllow
; _FF_CookiesDeny
; _FF_CookiesRemoveAll
; _FF_CookiesSetAccess
; _FF_EmptyCache
; _FF_EmptyCookies / _FF_CookiesRemoveAll
; _FF_EmptyHistory
; _FF_FormSetFileInput
; _FF_GetContentXY
; _FF_GetCurrentURL
; _FF_GetStatus
; _FF_GetTitle
; _FF_MozRepl_Detect
; _FF_ResetTitle
; _FF_TabGetAllTitles
; _FF_TabGetAllURLs
; _FF_TabReloadAll

#EndRegion #CURRENT# ==============================================================
;===============================================================================
; calls a JavaScript function on the current page
; use "CW" as shortcut for "content.wrappedJSObject"
Func _FF_Call($sScript)
    If StringInStr($sScript, "CW.") Then
        $sScript = StringReplace($sScript, "CW.", "FFau3.tmp.")
        Return _FFCmd("FFau3.tmp=content.wrappedJSObject;" & $sScript)
    Else
        Return _FFCmd("content.wrappedJSObject." & $sScript)
    EndIf
EndFunc   ;==>_FF_Call
;===============================================================================
Func _FF_CookiesAllow($sURL)
    Return _FF_CookiesSetAccess($sURL, 1)
EndFunc   ;==>_FF_CookiesAllow
;===============================================================================
Func _FF_CookiesDeny($sURL)
    Return _FF_CookiesSetAccess($sURL, 2)
EndFunc   ;==>_FF_CookiesDeny
;===============================================================================
Func _FF_CookiesRemoveAll()
    _FFCmd('Components.classes["@mozilla.org/cookiemanager;1"].getService(Components.interfaces.nsICookieManager).removeAll();')
    If Not @error Then Return 1
    Return SetError(1, 0, 0)
EndFunc   ;==>_FF_CookiesRemoveAll

;===============================================================================
; https://developer.mozilla.org/en/nsICookiePermission
; $iAccess: 0 = ACCESS_DEFAULT
;           1 = ACCESS_ALLOW
;           2 = ACCESS_DENY
;           8 = ACCESS_SESSION
Func _FF_CookiesSetAccess($sURL, $iAccess)
    If __FFCheckURL($sURL) And ($iAccess = 0 Or $iAccess = 1 Or $iAccess = 2 Or $iAccess = 8) Then
        _FFCmd('Components.classes["@mozilla.org/cookie/permission;1"].getService(Components.interfaces.nsICookiePermission).setAccess(Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService).newURI("' & $sURL & '", null, null),' & $iAccess & ');')
        If Not @error Then Return 1
    EndIf
    Return SetError(1, 0, 0)
EndFunc   ;==>_FF_CookiesSetAccess
;===============================================================================
Func _FF_EmptyCache()
    _FFCmd("Ci=Components.interfaces;Components.classes['@mozilla.org/network/cache-service;1'].getService(Ci.nsICacheService).evictEntries(Ci.nsICache.STORE_ANYWHERE);")
    If Not @error Then Return 1
    Return 0
EndFunc   ;==>_FF_EmptyCache
;===============================================================================
Func _FF_EmptyCookies()
    _FF_CookiesRemoveAll()
EndFunc   ;==>_FF_EmptyCookies
;===============================================================================
Func _FF_EmptyHistory()
    _FFCmd("Components.classes['@mozilla.org/browser/nav-history-service;1'].getService(Components.interfaces.nsIBrowserHistory).removeAllPages();")
    If Not @error Then Return 1
    Return 0
EndFunc   ;==>_FF_EmptyHistory
;===============================================================================
Func _FF_FormSetFileInput($sFile, $vInput = 0, $sInputMode = "index", $vForm = 0, $sFormMode = "index")
    Local $sInput, $sForm
    If Not FileExists($sFile) Then
        SetError(1)
        Return 0
    EndIf
    Switch $sInputMode
        Case "index"
            If Not IsInt($vInput) Then
                SetError(1)
                Return 0
            EndIf
            $sInput = $vInput + 1
        Case "id", "name"
            $sInput = StringFormat("@type='file' and @%s='%s'", $sInputMode, $vInput)
        Case Else
            SetError(1)
            Return 0
    EndSwitch
    Switch $sFormMode
        Case "index"
            If Not IsInt($vForm) Then
                SetError(1)
                Return 0
            EndIf
            $sForm = $vForm + 1
        Case "id", "name", "title"
            $sForm = StringFormat("@%s='%s'", $sFormMode, $vForm)
        Case Else
            SetError(1)
            Return 0
    EndSwitch
    _FFXpath(StringFormat("//form[%s]//input[%s]", $sForm, $sInput), StringFormat("value='%s'", $sFile), 9)
    If Not @error Then Return 1
    SetError(1, 0, 0)
EndFunc   ;==>_FF_FormSetFileInput
;===============================================================================
; Returns an array with x/y/width/height of the content area
Func _FF_GetContentXY()
    Return ControlGetPos(_FFCmd(".title"), "", "[CLASS:MozillaContentWindowClass]")
EndFunc   ;==>_FF_GetContentXY
;===============================================================================
Func _FF_GetCurrentURL()
    Return _FFCmd(".location.href")
EndFunc   ;==>_FF_GetCurrentURL
;===============================================================================
Func _FF_GetStatus()
    Return _FFCmd("XULBrowserWindow.statusTextField.label")
EndFunc   ;==>_FF_GetStatus
;===============================================================================
Func _FF_GetTitle()
    Return _FFCmd(".title")
EndFunc   ;==>_FF_GetTitle
; #FUNCTION# ===================================================================
; Name ..........: _FF_MozRepl_Detect
; Description ...: Checks a Firefox profile for the MozRepl extension and installes it if not available.
; AutoIt Version : V3.3.0.0
; Syntax ........: _FF_MozRepl_Detect([$sProfil = "default"[, $bInstall = True[, $sXPI = "http://repo.hyperstruct.net/mozrepl/0.2/mozrepl.xpi"]]])
; Parameter(s): .: $sProfil     - Optional: (Default = "default") :
;                  $bInstall    - Optional: (Default = True) :
;                  $sXPI        - Optional: (Default = "http://repo.hyperstruct.net/mozrepl/0.2/mozrepl.xpi") :
; Return Value ..: Success      - 1
;                  Failure      - 0
; Author(s) .....: Thunder-man (Frank Michalski), Thorsten Willert
; Date ..........: Fri Jul 17 13:05:21 CEST 2009
; Version .......: 2.0
; Example .......: No
; V 1.0 ==> 15.09.2007
; V 1.1 ==> 02.08.2008, updated by Stilgar (Thorsten Willert)
; changed the path-macro to @AppDataDir
; changed the ""-profil to "default"
; V1.2 ==> 03.03.2009, updated by Stilgar (Thorsten Willert)
; changed MozLab to MozRepl
; V2.0 ==> 17.03.2009, added intall-option for MozRepl by Stilgar (Thorsten Willert)
; ==============================================================================
Func _FF_MozRepl_Detect($sProfile = "default", $bInstall = True, $sXPI = "http://repo.hyperstruct.net/mozrepl/1.0/mozrepl.xpi")
    If $sProfile = "" Then $sProfile = "default"
    Local $sIni_Path = @AppDataDir & "\Mozilla\Firefox\"
    Local $var = IniReadSectionNames($sIni_Path & "\profiles.ini")
    If @error Then
        MsgBox(4096, "", "Error occurred, probably no Firefox INI file.")
    Else
        For $i = 1 To $var[0]
            Local $Ini_ = IniRead($sIni_Path & "\profiles.ini", $var[$i], "Name", "Error")
            If $Ini_ = $sProfile Then
                Local $sPath_folder = IniRead($sIni_Path & "\profiles.ini", $var[$i], "Path", "Error") ;Profile dir
                ExitLoop
            EndIf
        Next
    EndIf
    If $bInstall Then
        Local $sHKLM = "HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Mozilla Firefox"
        Local $sFFExe = RegRead($sHKLM & "\" & RegRead($sHKLM, "CurrentVersion") & "\Main", "PathToExe")
        Local $sCommand = StringFormat('"%s" "%s"', $sFFExe, $sXPI)
    EndIf
    If StringLeft($sPath_folder, 8) = "Profiles" Then
        If FileExists($sIni_Path & $sPath_folder & "\extensions\mozrepl@hyperstruct.net") Then
            Return 1
        Else
            If $bInstall Then Return Run($sCommand)
            Return 0
        EndIf
    Else
        If FileExists($sPath_folder & "\extensions\mozrepl@hyperstruct.net") Then
            Return 1
        Else
            If $bInstall Then Return Run($sCommand)
            Return 0
        EndIf
    EndIf
EndFunc   ;==>_FF_MozRepl_Detect
;===============================================================================
Func _FF_ResetTitle()
    Return _FFCmd(".title=FFau3.WCD.getElementsByTagName('title')[0].textContent")
EndFunc   ;==>_FF_ResetTitle
;===============================================================================
; Returns with an array the titles of all open tabs
Func _FF_TabGetAllTitles()
    Return StringSplit(_FFCmd("FFau3.tmp='';for(i=0;i<gBrowser.tabContainer.childNodes.length-1;i++){FFau3.tmp+=gBrowser.getBrowserAtIndex(i).contentDocument.title+'|'}FFau3.tmp+gBrowser.getBrowserAtIndex(i++).contentDocument.title;"), "|")
EndFunc   ;==>_FF_TabGetAllTitles
;===============================================================================
; Returns with an array the URLs of all open tabs
Func _FF_TabGetAllURLs()
    Return StringSplit(_FFCmd("FFau3.tmp='';for(i=0;i<gBrowser.tabContainer.childNodes.length-1;i++){FFau3.tmp+=gBrowser.getBrowserAtIndex(i).contentDocument.location.href+'|'}FFau3.tmp+gBrowser.getBrowserAtIndex(i++).contentDocument.location.href;"), "|")
EndFunc   ;==>_FF_TabGetAllURLs
;===============================================================================
; Reloads all open tabs
Func _FF_TabReloadAll()
    Return _FFCmd("for(i=0;i<gBrowser.tabContainer.childNodes.length;i++){gBrowser.getBrowserAtIndex(i).reload()}")
EndFunc   ;==>_FF_TabGetAllURLs
; #FUNCTION# ===================================================================
; Name ..........: _FFDispatchKeyEvent
; Description ...: Simulates a key-event on an element.
; Beschreibung ..: Simuliert ein Tastatur-Ereignis an einem Element.
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFDisPatchKeyEvent($sObject, $iKeyCode[, $sEventType = "keydown"])
; Parameter(s): .: $sElement    - Element where the keyevent is fired
;                  $iKeyCode    - ASCII-KeyCode (decimal)
;                  $sEventType  - Optional: (Default = "keydown") :
;                               | keydown
;                               | keypress
;                               | keyup
; Return Value ..: Success      - 1
;                  Failure      - 0
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Fri Sep 25 11:30:47 CEST 2009 @438 /Internet Time/
; Link ..........: http://www.w3.org/TR/DOM-Level-2-Events/events.html
; Related .......: _FFDispatchEvent
; Example .......: Yes
; ==============================================================================
Func _FFDispatchKeyEvent($sElement, $iKeyCode, $sEventType = "keypress")
    Return _FFDispatchEvent($sElement, $sEventType, $iKeyCode = 13)
EndFunc   ;==>_FFDispatchKeyEvent
; #FUNCTION# ===================================================================
; Name ..........: _FFFormGetLength
; Description ...: Length of the forms
; Beschreibung ..: Gibt die Anzahl der Formulare zurück.
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFFormGetLength()
; Parameter(s): .:
; Return Value ..: Success      - >0
;                  Failure      - 0
; Author(s) .....: Thorsten Willert
; Date ..........: Mon Mar 23 23:15:23 CET 2009 @969 /Internet Time/
; Link ..........:
; Related .......: _FFGetLength
; Example .......: Yes
; ==============================================================================
Func _FFFormGetLength()
    Return _FFGetLength("forms")
EndFunc   ;==>_FFFormGetLength
; #FUNCTION# ===================================================================
; Name ..........: _FFGetValueById
; Description ...: Gets an value of an element by ID
; Beschreibung ..: Liefert ein Value anhand der Element-Id
; AutoIt Version : V3.3.0.0
; Syntax ........:  _FFGetValueById($sID[, $iFilter = 0])
; Parameter(s): .: $sID         - ID of the element
;                  $iFilter     - Optional: (Default = 0) : you can add them:
;                               | 0 = No filter
;                               | 1 = Remove all non ASCII
;                               | 2 = Remove all double withespaces
;                               | 4 = Remove all double linefeeds
;                               | 8 = Remove all HTML-tags
;                               | 16 = simple html-tag / entities convertor
; Return Value ..: Success      - Value
;                  Failure      - ""
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Thu Apr 09 15:16:22 CEST 2009 @594 /Internet Time/
; Link ..........:
; Related .......: _FFGetValue, _FFGetValueByName, _FFSetValueById, _FFSetValueByName, _FFXPath
; Example .......: Yes
; ==============================================================================
Func _FFGetValueById($sID, $iFilter = 0)
    _FFGetValue($sID, "id", 0, $iFilter)
EndFunc   ;==>_FFGetValueById
; #FUNCTION# ===================================================================
; Name ..........: _FFGetValueByName
; Description ...: Gets a value of an element by name.
; Beschreibung ..: Liefert ein Value anhand des Element-Namens
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFGetValueByName($sName[, $iIndex = 0[, $iFilter = 0]])
; Parameter(s): .: $sName       - Name of the element
;                  $iIndex      - Optional: (Default = 0) : Index of the element (0-n)
;                  $iFilter     - Optional: (Default = 0) : you can add them:
;                               | 0 = No filter
;                               | 1 = Remove all non ASCII
;                               | 2 = Remove all double withespaces
;                               | 4 = Remove all double linefeeds
;                               | 8 = Remove all HTML-tags
;                               | 16 = simple html-tag / entities convertor
; Return Value ..: Success      - Value
;                  Failure      - ""
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Thu Apr 09 15:14:25 CEST 2009 @593 /Internet Time/
; Link ..........:
; Related .......: _FFGetValue, _FFGetValueById, _FFSetValueById, _FFSetValueByName, _FFXPath
; Example .......: Yes
; ==============================================================================
Func _FFGetValueByName($sName, $iIndex = 0, $iFilter = 0)
    _FFGetValue($sName, "name", $iIndex, $iFilter)
EndFunc   ;==>_FFGetValueByName
; #FUNCTION# ===================================================================
; Name ..........: _FFSetValueById
; Description ...: Sets a value of an element by ID
; Beschreibung ..: Setzt einen Wert (value) anhand der Element-Id
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFSetValueById($sID[, $sValue = ""])
; Parameter(s): .: $sID         - ID of the element
;                  $sValue      - Optional: (Default = "") : Value to set
; Return Value ..: Success      - 1
;                  Failure      - 0
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Thu Apr 09 22:48:10 CEST 2009 @908 /Internet Time/
; Link ..........:
; Related .......: _FFSetValueByName, _FFGetValueById, _FFGetValueByName, _FFXPath
; Example .......: Yes
; ==============================================================================
Func _FFSetValueById($sID, $sValue = "")
    _FFSetValue($sValue, $sID, "id")
EndFunc   ;==>_FFSetValueById
; #FUNCTION# ===================================================================
; Name ..........: _FFSetValueByName
; Description ...: Sets a value of an element by Name
; Beschreibung ..: Setzt einen Wert (value) anhand des Element-Namens.
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFSetValueByName($sName[, $sValue = ""[, $iIndex = 0]])
; Parameter(s): .: $sName       - Name of the element
;                  $sValue      - Optional: (Default = "") : Value to set
;                  $iIndex      - Optional: (Default = 0) : Index of the element (0-n)
; Return Value ..: Success      - 1
;                  Failure      - 0
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Thu Apr 09 22:58:50 CEST 2009 @915 /Internet Time/
; Link ..........:
; Related .......: _FFSetValueById, _FFGetValueById, _FFGetValueByName, _FFXPath
; Example .......: Yes
; ==============================================================================
Func _FFSetValueByName($sName, $sValue = "", $iIndex = 0)
    _FFSetValue($sValue, $sName, "name", $iIndex)
EndFunc   ;==>_FFSetValueByName
; #FUNCTION# ===================================================================
; Name ..........: _FFTabCloseAll
; Description ...: Closes all Tabs except the selected
; Beschreibung ..: Schließt alle Tabs, außer dem Aktiven.
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFTabCloseAll()
; Parameter(s): .:
; Return Value ..: Success      - 1
;                  Failure      - 0
; Author(s) .....: Thorsten Willert
; Date ..........: Mon Mar 23 22:43:12 CET 2009 @946 /Internet Time/
; Link ..........: https://developer.mozilla.org/en/XUL/tabs
; Related .......:_FFTabAdd, _FFTabDuplicate, _FFTabClose, _FFTabExists, _FFTabGetLength, _FFTabSetSelected, _FFTabGetSelected
; Example .......: Yes
; ==============================================================================
Func _FFTabCloseAll()
    Return _FFTabClose("all", "key")
EndFunc   ;==>_FFTabCloseAll
; #FUNCTION# ===================================================================
; Name ..........: _FFTabGetLength
; Description ...: Length of the tabs
; Beschreibung ..: Liefert die Anzahl aller vorhandener Tabs.
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFTabGetLength()
; Parameter(s): .:
; Return Value ..: Success      - Tab index 0-n
;                  Failure      - -1
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Mon Mar 23 22:39:15 CET 2009 @943 /Internet Time/
; Link ..........: https://developer.mozilla.org/en/XUL/tabs
; Related .......: _FFTabAdd, _FFTabDuplicate, _FFTabClose, _FFTabCloseAll, _FFTabExists, _FFTabSetSelected, _FFTabGetSelected
; Example .......: Yes
; ==============================================================================
Func _FFTabGetLength()
    Return _FFGetLength("tabs")
EndFunc   ;==>_FFTabGetLength
; #FUNCTION# ===================================================================
; Name ..........: _FFTableGetCell
; Description ...: Returns the content of a table cell.
; Beschreibung ..: Liefert den Inhalt einer Tabellenzelle.
; AutoIt Version : V3.3.0.0
; Syntax ........: _FFTableGetCell($vTable, $iColumn, $iRow[, $sMode = "index"[, $sReturnMode = "text"[, $iFilter = 1]]])
; Parameter(s): .: $vTable      - index (0-n), name or id
;                  $iColumn     - Column (0-n)
;                  $iRow        - Row (0-n)
;                  $sMode       - Optional: (Default = "index") :
;                               | index (0-n)
;                               | name
;                               | id
;                  $sReturnMode - Optional: (Default = "text") :
;                               | text
;                               | html
;                  $iFilter     - Optional: (Default = 1) : you can add them:
;                               | 0 = No filter
;                               | 1 = Remove all non ASCII
;                               | 2 = Remove all double withespaces
;                               | 4 = Remove all double linefeeds
;                               | 8 = Remove all HTML-tags
;                               | 16 = simple html-tag / entities convertor
; Return Value ..: Success      - Text or HTML
;                  Failure      - ""
;                  @ERROR       -
; Author(s) .....: Thorsten Willert
; Date ..........: Sat Apr 11 22:56:21 CEST 2009
; Link ..........:
; Related .......: _FFTableWriteToArray
; Example .......: Yes
; ==============================================================================
Func _FFTableGetCell($vTable, $iColumn, $iRow, $sMode = "index", $sReturnMode = "text", $iFilter = 1)
    Local Const $sFuncName = "_FFTableGetCell"
    If $sMode = Default Then $sMode = "index"
    If $sReturnMode = Default Then $sReturnMode = "text"
    If Not IsInt($vTable) And $sMode = "index" Then
        SetError(__FFError($sFuncName, $_FF_ERROR_InvalidDataType, "(int) $vTable: " & $vTable))
        Return ""
    EndIf
    If Not IsInt($iColumn) Then
        SetError(__FFError($sFuncName, $_FF_ERROR_InvalidDataType, "(int) $iColumn: " & $iColumn))
        Return ""
    EndIf
    If Not IsInt($iRow) Then
        SetError(__FFError($sFuncName, $_FF_ERROR_InvalidDataType, "(int) $iRow: " & $iRow))
        Return ""
    EndIf
    Switch StringLower($sReturnMode)
        Case "text"
            $sReturnMode = "textContent"
        Case "html"
            $sReturnMode = "innerHTML"
        Case Else
            SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "(text|html) $sReturnMode: " & $sReturnMode))
            Return ""
    EndSwitch
    Local $sObject = "content.document"
    Switch StringLower($sMode)
        Case "index"
            $sObject &= ".getElementsByTagName('tbody')[" & $vTable & "]"
        Case "name"
            ContinueCase
        Case "id"
            $sObject &= ".getElementsByTagName('tbody')['" & $vTable & "']"
        Case Else
            SetError(__FFError($sFuncName, $_FF_ERROR_InvalidValue, "(index|name|id) $sMode: " & $sMode))
            Return ""
    EndSwitch
    $sObject &= StringFormat(".getElementsByTagName('tr')[%i].getElementsByTagName('td')[%i]", $iRow, $iColumn)
    Local $sRetVal = _FFCmd($sObject & "." & $sReturnMode & ";")
    If Not @error And $sRetVal <> "_FFCmd_Err" Then
        If $iFilter > 0 Then __FFFilterString($sRetVal, $iFilter)
        Return $sRetVal
    Else
        SetError(__FFError($sFuncName, $_FF_ERROR_NoMatch, "Table/Column/Row: " & $vTable & "/" & $iColumn & "/" & $iRow))
        Return ""
    EndIf
EndFunc   ;==>_FFTableGetCell

Share this post


Link to post
Share on other sites

Look under the Tools -> MozRepl menu and make sure that it is actually started. Also make sure that Activate on Startup is checked.

Share this post


Link to post
Share on other sites

Also make sure that Activate on Startup is checked.

That could be the problem I dont  see the MozRepl in the msconfig--> sevice and when windows startup firefox doesnt automaticly starts up now I am trying to add the mozrepl  to the systemconfig but its so hard in windows 8.1 does anybody has experince with this?

Share this post


Link to post
Share on other sites

Not familiar with w8.1, but Mozrepl is just a FF add-on. Go here and install it.

Share this post


Link to post
Share on other sites

I just solved it by going too the menu-bar --> extra -->mozrepl--> activate on start up

this problably has to do with the latest firefox version , because i never had to do this before

But thanks Danp2 for helping me :)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers