/*
 * Copyright 2004-2010 Jacek Caban for CodeWeavers
 * Copyright 2008      Konstantin Kondratyuk (Etersoft)
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library 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
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

#include <mshtmdid.h>
#include <mshtmcid.h>
#include <olectl.h>

import "ocidl.idl";
import "dimm.idl";
import "shtypes.idl";

cpp_quote("#include <olectl.h>")

cpp_quote("DEFINE_GUID(SID_SEditCommandTarget,  0x3050f4b5,0x98b5,0x11cf,0xbb,0x82,0x00,0xaa,0x00,0xbd,0xce,0x0b);")
cpp_quote("DEFINE_GUID(SID_SHTMLEditHost,       0x3050f6a0,0x98b5,0x11cf,0xbb,0x82,0x00,0xaa,0x00,0xbd,0xce,0x0b);")
cpp_quote("DEFINE_GUID(SID_SHTMLEditServices,   0x3050f7f9,0x98b5,0x11cf,0xbb,0x82,0x00,0xaa,0x00,0xbd,0xce,0x0b);")
cpp_quote("#define SID_SHTMLWindow IID_IHTMLWindow2")
cpp_quote("#define SID_SElementBehaviorFactory IID_IElementBehaviorFactory")

cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
cpp_quote("#undef FindText")
cpp_quote("#endif")

typedef enum {
    POINTER_GRAVITY_Left,
    POINTER_GRAVITY_Right,
    POINTER_GRAVITY_Max = 2147483647
} POINTER_GRAVITY;

typedef enum {
    CONTEXT_TYPE_None,
    CONTEXT_TYPE_Text,
    CONTEXT_TYPE_EnterScope,
    CONTEXT_TYPE_ExitScope,
    CONTEXT_TYPE_NoScope,
    MARKUP_CONTEXT_TYPE_Max = 2147483647
} MARKUP_CONTEXT_TYPE;

typedef enum {
    ELEM_ADJ_BeforeBegin,
    ELEM_ADJ_AfterBegin,
    ELEM_ADJ_BeforeEnd,
    ELEM_ADJ_AfterEnd,
    ELEMENT_ADJACENCY_Max = 2147483647
} ELEMENT_ADJACENCY;

typedef enum {
    MOVEUNIT_PREVCHAR,
    MOVEUNIT_NEXTCHAR,
    MOVEUNIT_PREVCLUSTERBEG,
    MOVEUNIT_NEXTCLUSTERBEG,
    MOVEUNIT_PREVCLUSTEREND,
    MOVEUNIT_NEXTCLUSTEREND,
    MOVEUNIT_PREVWORDBEG,
    MOVEUNIT_NEXTWORDBEG,
    MOVEUNIT_PREVWORDEND,
    MOVEUNIT_NEXTWORDEND,
    MOVEUNIT_PREVPROOFWORD,
    MOVEUNIT_NEXTPROOFWORD,
    MOVEUNIT_NEXTURLBEG,
    MOVEUNIT_PREVURLBEG,
    MOVEUNIT_NEXTURLEND,
    MOVEUNIT_PREVURLEND,
    MOVEUNIT_PREVSENTENCE,
    MOVEUNIT_NEXTSENTENCE,
    MOVEUNIT_PREVBLOCK,
    MOVEUNIT_NEXTBLOCK,
    MOVEUNIT_ACTION_Max = 2147483647
} MOVEUNIT_ACTION;

typedef enum _SELECTION_TYPE {
    SELECTION_TYPE_None,
    SELECTION_TYPE_Caret,
    SELECTION_TYPE_Text,
    SELECTION_TYPE_Control,
    SELECTION_TYPE_Max = 2147483647
} SELECTION_TYPE;

[
    version(4.0),
    uuid(3050F1C5-98B5-11CF-BB82-00AA00BDCE0B)
]
library MSHTML
{

importlib("stdole2.tlb");

[
    odl,
    oleautomation,
    dual,
    uuid(3051049b-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLDOMConstructor : IDispatch
{
    [propget, id(DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR), hidden]
    HRESULT constructor([retval, out] IDispatch* * p);

    HRESULT LookupGetter([in] BSTR propname, [retval, out] VARIANT* ppDispHandler);

    HRESULT LookupSetter([in] BSTR propname, [retval, out] VARIANT* ppDispHandler);

    HRESULT DefineGetter([in] BSTR propname, [in] VARIANT* pdispHandler);

    HRESULT DefineSetter([in] BSTR propname, [in] VARIANT* pdispHandler);
}

#define WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL                     \
    [propget, id(DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR), hidden]       \
    IDispatch *constructor()

interface IHTMLDocument2;
interface IHTMLElement2;
interface IHTMLStyleSheetsCollection;
interface IHTMLFrameBase;

/*****************************************************************************
 *    IHTMLFiltersCollection interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050F3EE-98B5-11Cf-BB82-00AA00BDCE0B)
]
interface IHTMLFiltersCollection : IDispatch
{
    [propget, id(DISPID_IHTMLFILTERSCOLLECTION_LENGTH)]
    HRESULT length([retval, out] LONG *p);

    [propget, id(DISPID_IHTMLFILTERSCOLLECTION__NEWENUM)]
    HRESULT _newEnum([retval, out] IUnknown **p);

    [id(DISPID_IHTMLFILTERSCOLLECTION_ITEM)]
    HRESULT item(
        [in] VARIANT *pvarIndex,
        [retval, out] VARIANT *pvarResult);
}

/*****************************************************************************
 *    IHTMLStyle interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050F25E-98B5-11CF-BB82-00AA00BDCE0B)
]
interface IHTMLStyle : IDispatch
{
    [propput, id(DISPID_IHTMLSTYLE_FONTFAMILY), bindable, displaybind]
    HRESULT fontFamily([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_FONTFAMILY), bindable, displaybind]
    HRESULT fontFamily([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_FONTSTYLE), bindable, displaybind]
    HRESULT fontStyle([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_FONTSTYLE), bindable, displaybind]
    HRESULT fontStyle([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_FONTVARIANT), bindable, displaybind]
    HRESULT fontVariant([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_FONTVARIANT), bindable, displaybind]
    HRESULT fontVariant([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_FONTWEIGHT), bindable, displaybind]
    HRESULT fontWeight([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_FONTWEIGHT), bindable, displaybind]
    HRESULT fontWeight([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_FONTSIZE), bindable, displaybind]
    HRESULT fontSize([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_FONTSIZE), bindable, displaybind]
    HRESULT fontSize([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_FONT), bindable, displaybind]
    HRESULT font([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_FONT), bindable, displaybind]
    HRESULT font([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_COLOR), bindable, displaybind]
    HRESULT color([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_COLOR), bindable, displaybind]
    HRESULT color([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_BACKGROUND), bindable, displaybind]
    HRESULT background([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BACKGROUND), bindable, displaybind]
    HRESULT background([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDCOLOR), bindable, displaybind]
    HRESULT backgroundColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDCOLOR), bindable, displaybind]
    HRESULT backgroundColor([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDIMAGE), bindable, displaybind]
    HRESULT backgroundImage([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDIMAGE), bindable, displaybind]
    HRESULT backgroundImage([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDREPEAT), bindable, displaybind]
    HRESULT backgroundRepeat([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDREPEAT), bindable, displaybind]
    HRESULT backgroundRepeat([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDATTACHMENT), bindable, displaybind]
    HRESULT backgroundAttachment([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDATTACHMENT), bindable, displaybind]
    HRESULT backgroundAttachment([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITION), bindable, displaybind]
    HRESULT backgroundPosition([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITION), bindable, displaybind]
    HRESULT backgroundPosition([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONX), bindable, displaybind]
    HRESULT backgroundPositionX([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONX), bindable, displaybind]
    HRESULT backgroundPositionX([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONY), bindable, displaybind]
    HRESULT backgroundPositionY([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONY), bindable, displaybind]
    HRESULT backgroundPositionY([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_WORDSPACING), bindable, displaybind]
    HRESULT wordSpacing([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_WORDSPACING), bindable, displaybind]
    HRESULT wordSpacing([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_LETTERSPACING), bindable, displaybind]
    HRESULT letterSpacing([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_LETTERSPACING), bindable, displaybind]
    HRESULT letterSpacing([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATION), bindable, displaybind]
    HRESULT textDecoration([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATION), bindable, displaybind]
    HRESULT textDecoration([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONNONE), bindable, displaybind]
    HRESULT textDecorationNone([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONNONE), bindable, displaybind]
    HRESULT textDecorationNone([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONUNDERLINE), bindable, displaybind]
    HRESULT textDecorationUnderline([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONUNDERLINE), bindable, displaybind]
    HRESULT textDecorationUnderline([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONOVERLINE), bindable, displaybind]
    HRESULT textDecorationOverline([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONOVERLINE), bindable, displaybind]
    HRESULT textDecorationOverline([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONLINETHROUGH), bindable, displaybind]
    HRESULT textDecorationLineThrough([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONLINETHROUGH), bindable, displaybind]
    HRESULT textDecorationLineThrough([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONBLINK), bindable, displaybind]
    HRESULT textDecorationBlink([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONBLINK), bindable, displaybind]
    HRESULT textDecorationBlink([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLSTYLE_VERTICALALIGN), bindable, displaybind]
    HRESULT verticalAlign([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_VERTICALALIGN), bindable, displaybind]
    HRESULT verticalAlign([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_TEXTTRANSFORM), bindable, displaybind]
    HRESULT textTransform([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_TEXTTRANSFORM), bindable, displaybind]
    HRESULT textTransform([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_TEXTALIGN), bindable, displaybind]
    HRESULT textAlign([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_TEXTALIGN), bindable, displaybind]
    HRESULT textAlign([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_TEXTINDENT), bindable, displaybind]
    HRESULT textIndent([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_TEXTINDENT), bindable, displaybind]
    HRESULT textIndent([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_LINEHEIGHT), bindable, displaybind]
    HRESULT lineHeight([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_LINEHEIGHT), bindable, displaybind]
    HRESULT lineHeight([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_MARGINTOP), bindable, displaybind]
    HRESULT marginTop([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_MARGINTOP), bindable, displaybind]
    HRESULT marginTop([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_MARGINRIGHT), bindable, displaybind]
    HRESULT marginRight([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_MARGINRIGHT), bindable, displaybind]
    HRESULT marginRight([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_MARGINBOTTOM), bindable, displaybind]
    HRESULT marginBottom([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_MARGINBOTTOM), bindable, displaybind]
    HRESULT marginBottom([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_MARGINLEFT), bindable, displaybind]
    HRESULT marginLeft([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_MARGINLEFT), bindable, displaybind]
    HRESULT marginLeft([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_MARGIN), bindable, displaybind]
    HRESULT margin([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_MARGIN), bindable, displaybind]
    HRESULT margin([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_PADDINGTOP), bindable, displaybind]
    HRESULT paddingTop([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_PADDINGTOP), bindable, displaybind]
    HRESULT paddingTop([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_PADDINGRIGHT), bindable, displaybind]
    HRESULT paddingRight([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_PADDINGRIGHT), bindable, displaybind]
    HRESULT paddingRight([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_PADDINGBOTTOM), bindable, displaybind]
    HRESULT paddingBottom([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_PADDINGBOTTOM), bindable, displaybind]
    HRESULT paddingBottom([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_PADDINGLEFT), bindable, displaybind]
    HRESULT paddingLeft([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_PADDINGLEFT), bindable, displaybind]
    HRESULT paddingLeft([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_PADDING), bindable, displaybind]
    HRESULT padding([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_PADDING), bindable, displaybind]
    HRESULT padding([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_BORDER), bindable, displaybind]
    HRESULT border([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDER), bindable, displaybind]
    HRESULT border([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_BORDERTOP), bindable, displaybind]
    HRESULT borderTop([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERTOP), bindable, displaybind]
    HRESULT borderTop([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHT), bindable, displaybind]
    HRESULT borderRight([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHT), bindable, displaybind]
    HRESULT borderRight([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOM), bindable, displaybind]
    HRESULT borderBottom([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOM), bindable, displaybind]
    HRESULT borderBottom([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_BORDERLEFT), bindable, displaybind]
    HRESULT borderLeft([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERLEFT), bindable, displaybind]
    HRESULT borderLeft([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_BORDERCOLOR), bindable, displaybind]
    HRESULT borderColor([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERCOLOR), bindable, displaybind]
    HRESULT borderColor([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_BORDERTOPCOLOR), bindable, displaybind]
    HRESULT borderTopColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERTOPCOLOR), bindable, displaybind]
    HRESULT borderTopColor([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHTCOLOR), bindable, displaybind]
    HRESULT borderRightColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHTCOLOR), bindable, displaybind]
    HRESULT borderRightColor([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOMCOLOR), bindable, displaybind]
    HRESULT borderBottomColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOMCOLOR), bindable, displaybind]
    HRESULT borderBottomColor([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_BORDERLEFTCOLOR), bindable, displaybind]
    HRESULT borderLeftColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERLEFTCOLOR), bindable, displaybind]
    HRESULT borderLeftColor([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_BORDERWIDTH), bindable, displaybind]
    HRESULT borderWidth([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERWIDTH), bindable, displaybind]
    HRESULT borderWidth([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_BORDERTOPWIDTH), bindable, displaybind]
    HRESULT borderTopWidth([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERTOPWIDTH), bindable, displaybind]
    HRESULT borderTopWidth([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHTWIDTH), bindable, displaybind]
    HRESULT borderRightWidth([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHTWIDTH), bindable, displaybind]
    HRESULT borderRightWidth([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOMWIDTH), bindable, displaybind]
    HRESULT borderBottomWidth([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOMWIDTH), bindable, displaybind]
    HRESULT borderBottomWidth([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_BORDERLEFTWIDTH), bindable, displaybind]
    HRESULT borderLeftWidth([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERLEFTWIDTH), bindable, displaybind]
    HRESULT borderLeftWidth([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_BORDERSTYLE), bindable, displaybind]
    HRESULT borderStyle([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERSTYLE), bindable, displaybind]
    HRESULT borderStyle([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_BORDERTOPSTYLE), bindable, displaybind]
    HRESULT borderTopStyle([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERTOPSTYLE), bindable, displaybind]
    HRESULT borderTopStyle([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHTSTYLE), bindable, displaybind]
    HRESULT borderRightStyle([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHTSTYLE), bindable, displaybind]
    HRESULT borderRightStyle([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOMSTYLE), bindable, displaybind]
    HRESULT borderBottomStyle([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOMSTYLE), bindable, displaybind]
    HRESULT borderBottomStyle([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_BORDERLEFTSTYLE), bindable, displaybind]
    HRESULT borderLeftStyle([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERLEFTSTYLE), bindable, displaybind]
    HRESULT borderLeftStyle([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_WIDTH), bindable, displaybind]
    HRESULT width([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_WIDTH), bindable, displaybind]
    HRESULT width([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_HEIGHT), bindable, displaybind]
    HRESULT height([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_HEIGHT), bindable, displaybind]
    HRESULT height([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_STYLEFLOAT), bindable, displaybind]
    HRESULT styleFloat([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_STYLEFLOAT), bindable, displaybind]
    HRESULT styleFloat([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_CLEAR), bindable, displaybind]
    HRESULT clear([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_CLEAR), bindable, displaybind]
    HRESULT clear([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_DISPLAY), bindable, displaybind]
    HRESULT display([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_DISPLAY), bindable, displaybind]
    HRESULT display([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_VISIBILITY), bindable, displaybind]
    HRESULT visibility([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_VISIBILITY), bindable, displaybind]
    HRESULT visibility([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_LISTSTYLETYPE), bindable, displaybind]
    HRESULT listStyleType([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_LISTSTYLETYPE), bindable, displaybind]
    HRESULT listStyleType([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_LISTSTYLEPOSITION), bindable, displaybind]
    HRESULT listStylePosition([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_LISTSTYLEPOSITION), bindable, displaybind]
    HRESULT listStylePosition([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_LISTSTYLEIMAGE), bindable, displaybind]
    HRESULT listStyleImage([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_LISTSTYLEIMAGE), bindable, displaybind]
    HRESULT listStyleImage([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_LISTSTYLE), bindable, displaybind]
    HRESULT listStyle([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_LISTSTYLE), bindable, displaybind]
    HRESULT listStyle([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_WHITESPACE), bindable, displaybind]
    HRESULT whiteSpace([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_WHITESPACE), bindable, displaybind]
    HRESULT whiteSpace([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_TOP), bindable, displaybind]
    HRESULT top([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_TOP), bindable, displaybind]
    HRESULT top([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_LEFT), bindable, displaybind]
    HRESULT left([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_LEFT), bindable, displaybind]
    HRESULT left([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLSTYLE_POSITION), bindable, displaybind]
    HRESULT position([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_ZINDEX), bindable, displaybind]
    HRESULT zIndex([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_ZINDEX), bindable, displaybind]
    HRESULT zIndex([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE_OVERFLOW), bindable, displaybind]
    HRESULT overflow([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_OVERFLOW), bindable, displaybind]
    HRESULT overflow([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_PAGEBREAKBEFORE), bindable, displaybind]
    HRESULT pageBreakBefore([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_PAGEBREAKBEFORE), bindable, displaybind]
    HRESULT pageBreakBefore([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_PAGEBREAKAFTER), bindable, displaybind]
    HRESULT pageBreakAfter([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_PAGEBREAKAFTER), bindable, displaybind]
    HRESULT pageBreakAfter([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_CSSTEXT), bindable, displaybind]
    HRESULT cssText([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_CSSTEXT), bindable, displaybind]
    HRESULT cssText([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_PIXELTOP), bindable, displaybind, hidden]
    HRESULT pixelTop([in] LONG v);

    [propget, id(DISPID_IHTMLSTYLE_PIXELTOP), bindable, displaybind, hidden]
    HRESULT pixelTop([retval, out] LONG *p);

    [propput, id(DISPID_IHTMLSTYLE_PIXELLEFT), bindable, displaybind, hidden]
    HRESULT pixelLeft([in] LONG v);

    [propget, id(DISPID_IHTMLSTYLE_PIXELLEFT), bindable, displaybind, hidden]
    HRESULT pixelLeft([retval, out] LONG *p);

    [propput, id(DISPID_IHTMLSTYLE_PIXELWIDTH), bindable, displaybind, hidden]
    HRESULT pixelWidth([in] LONG v);

    [propget, id(DISPID_IHTMLSTYLE_PIXELWIDTH), bindable, displaybind, hidden]
    HRESULT pixelWidth([retval, out] LONG *p);

    [propput, id(DISPID_IHTMLSTYLE_PIXELHEIGHT), bindable, displaybind, hidden]
    HRESULT pixelHeight([in] LONG v);

    [propget, id(DISPID_IHTMLSTYLE_PIXELHEIGHT), bindable, displaybind, hidden]
    HRESULT pixelHeight([retval, out] LONG *p);

    [propput, id(DISPID_IHTMLSTYLE_POSTOP), bindable, displaybind]
    HRESULT posTop([in] float v);

    [propget, id(DISPID_IHTMLSTYLE_POSTOP), bindable, displaybind]
    HRESULT posTop([retval, out] float *p);

    [propput, id(DISPID_IHTMLSTYLE_POSLEFT), bindable, displaybind]
    HRESULT posLeft([in] float v);

    [propget, id(DISPID_IHTMLSTYLE_POSLEFT), bindable, displaybind]
    HRESULT posLeft([retval, out] float *p);

    [propput, id(DISPID_IHTMLSTYLE_POSWIDTH), bindable, displaybind]
    HRESULT posWidth([in] float v);

    [propget, id(DISPID_IHTMLSTYLE_POSWIDTH), bindable, displaybind]
    HRESULT posWidth([retval, out] float *p);

    [propput, id(DISPID_IHTMLSTYLE_POSHEIGHT), bindable, displaybind]
    HRESULT posHeight([in] float v);

    [propget, id(DISPID_IHTMLSTYLE_POSHEIGHT), bindable, displaybind]
    HRESULT posHeight([retval, out] float *p);

    [propput, id(DISPID_IHTMLSTYLE_CURSOR), bindable, displaybind]
    HRESULT cursor([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_CURSOR), bindable, displaybind]
    HRESULT cursor([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_CLIP), bindable, displaybind]
    HRESULT clip([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_CLIP), bindable, displaybind]
    HRESULT clip([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE_FILTER), bindable, displaybind]
    HRESULT filter([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_FILTER), bindable, displaybind]
    HRESULT filter([retval, out] BSTR *p);

    [id(DISPID_IHTMLSTYLE_SETATTRIBUTE)]
    HRESULT setAttribute(
        [in] BSTR strAttributeName,
        [in] VARIANT AttributeValue,
        [defaultvalue(1), in] LONG lFlags);

    [id(DISPID_IHTMLSTYLE_GETATTRIBUTE)]
    HRESULT getAttribute(
        [in] BSTR strAttributeName,
        [defaultvalue(0), in] LONG lFlags,
        [retval, out] VARIANT *AttributeValue);

    [id(DISPID_IHTMLSTYLE_REMOVEATTRIBUTE)]
    HRESULT removeAttribute(
        [in] BSTR strAttributeName,
        [defaultvalue(1), in]
        LONG lFlags,
        [retval, out] VARIANT_BOOL *pfSuccess);

    [id(DISPID_IHTMLSTYLE_TOSTRING)]
    HRESULT toString([retval, out] BSTR *String);
}

/*****************************************************************************
 *    IHTMLStyle2 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f4a2-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLStyle2 : IDispatch
{
    [propput, id(DISPID_IHTMLSTYLE2_TABLELAYOUT), displaybind, bindable]
    HRESULT tableLayout([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_TABLELAYOUT), displaybind, bindable]
    HRESULT tableLayout([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE2_BORDERCOLLAPSE), displaybind, bindable]
    HRESULT borderCollapse([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_BORDERCOLLAPSE), displaybind, bindable]
    HRESULT borderCollapse([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE2_DIRECTION), displaybind, bindable]
    HRESULT direction([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_DIRECTION), displaybind, bindable]
    HRESULT direction([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE2_BEHAVIOR), displaybind, bindable]
    HRESULT behavior([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_BEHAVIOR), displaybind, bindable]
    HRESULT behavior([out, retval] BSTR *p);

    [id(DISPID_IHTMLSTYLE2_SETEXPRESSION)]
    HRESULT setExpression(
            [in] BSTR propname,
            [in] BSTR expression,
            [in, defaultvalue("")] BSTR language);

    [id(DISPID_IHTMLSTYLE2_GETEXPRESSION)]
    HRESULT getExpression(
            [in] BSTR propname,
            [out, retval] VARIANT *expression);

    [id(DISPID_IHTMLSTYLE2_REMOVEEXPRESSION)]
    HRESULT removeExpression(
            [in] BSTR propname,
            [out, retval] VARIANT_BOOL *pfSuccess);

    [propput, id(DISPID_IHTMLSTYLE2_POSITION), displaybind, bindable]
    HRESULT position([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_POSITION), displaybind, bindable]
    HRESULT position([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE2_UNICODEBIDI), displaybind, bindable]
    HRESULT unicodeBidi([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_UNICODEBIDI), displaybind, bindable]
    HRESULT unicodeBidi([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE2_BOTTOM), displaybind, bindable]
    HRESULT bottom([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE2_BOTTOM), displaybind, bindable]
    HRESULT bottom([out, retval] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE2_RIGHT), displaybind, bindable]
    HRESULT right([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE2_RIGHT), displaybind, bindable]
    HRESULT right([out, retval] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE2_PIXELBOTTOM), displaybind, bindable, hidden]
    HRESULT pixelBottom([in] LONG v);

    [propget, id(DISPID_IHTMLSTYLE2_PIXELBOTTOM), displaybind, bindable, hidden]
    HRESULT pixelBottom([out, retval] LONG *p);

    [propput, id(DISPID_IHTMLSTYLE2_PIXELRIGHT), displaybind, bindable, hidden]
    HRESULT pixelRight([in] LONG v);

    [propget, id(DISPID_IHTMLSTYLE2_PIXELRIGHT), displaybind, bindable, hidden]
    HRESULT pixelRight([out, retval] LONG *p);

    [propput, id(DISPID_IHTMLSTYLE2_POSBOTTOM), displaybind, bindable]
    HRESULT posBottom([in] float v);

    [propget, id(DISPID_IHTMLSTYLE2_POSBOTTOM), displaybind, bindable]
    HRESULT posBottom([out, retval] float *p);

    [propput, id(DISPID_IHTMLSTYLE2_POSRIGHT), displaybind, bindable]
    HRESULT posRight([in] float v);

    [propget, id(DISPID_IHTMLSTYLE2_POSRIGHT), displaybind, bindable]
    HRESULT posRight([out, retval] float *p);

    [propput, id(DISPID_IHTMLSTYLE2_IMEMODE), displaybind, bindable]
    HRESULT imeMode([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_IMEMODE), displaybind, bindable]
    HRESULT imeMode([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE2_RUBYALIGN), displaybind, bindable]
    HRESULT rubyAlign([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_RUBYALIGN), displaybind, bindable]
    HRESULT rubyAlign([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE2_RUBYPOSITION), displaybind, bindable]
    HRESULT rubyPosition([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_RUBYPOSITION), displaybind, bindable]
    HRESULT rubyPosition([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE2_RUBYOVERHANG), displaybind, bindable]
    HRESULT rubyOverhang([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_RUBYOVERHANG), displaybind, bindable]
    HRESULT rubyOverhang([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDCHAR), displaybind, bindable]
    HRESULT layoutGridChar([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDCHAR), displaybind, bindable]
    HRESULT layoutGridChar([out, retval] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDLINE), displaybind, bindable]
    HRESULT layoutGridLine([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDLINE), displaybind, bindable]
    HRESULT layoutGridLine([out, retval] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDMODE), displaybind, bindable]
    HRESULT layoutGridMode([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDMODE), displaybind, bindable]
    HRESULT layoutGridMode([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDTYPE), displaybind, bindable]
    HRESULT layoutGridType([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDTYPE), displaybind, bindable]
    HRESULT layoutGridType([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRID), displaybind, bindable, nonbrowsable]
    HRESULT layoutGrid([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRID), displaybind, bindable, nonbrowsable]
    HRESULT layoutGrid([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE2_WORDBREAK), displaybind, bindable]
    HRESULT wordBreak([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_WORDBREAK), displaybind, bindable]
    HRESULT wordBreak([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE2_LINEBREAK), displaybind, bindable]
    HRESULT lineBreak([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_LINEBREAK), displaybind, bindable]
    HRESULT lineBreak([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFY), displaybind, bindable]
    HRESULT textJustify([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFY), displaybind, bindable]
    HRESULT textJustify([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFYTRIM), displaybind, bindable]
    HRESULT textJustifyTrim([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFYTRIM), displaybind, bindable]
    HRESULT textJustifyTrim([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE2_TEXTKASHIDA), displaybind, bindable]
    HRESULT textKashida([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE2_TEXTKASHIDA), displaybind, bindable]
    HRESULT textKashida([out, retval] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE2_TEXTAUTOSPACE), displaybind, bindable]
    HRESULT textAutospace([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_TEXTAUTOSPACE), displaybind, bindable]
    HRESULT textAutospace([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE2_OVERFLOWX), displaybind, bindable]
    HRESULT overflowX([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_OVERFLOWX), displaybind, bindable]
    HRESULT overflowX([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE2_OVERFLOWY), displaybind, bindable]
    HRESULT overflowY([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_OVERFLOWY), displaybind, bindable]
    HRESULT overflowY([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE2_ACCELERATOR), displaybind, bindable]
    HRESULT accelerator([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_ACCELERATOR), displaybind, bindable]
    HRESULT accelerator([out, retval] BSTR *p);
}

/*****************************************************************************
 *    IHTMLRuleStyle interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050F3CF-98B5-11CF-BB82-00AA00BDCE0B)
]
interface IHTMLRuleStyle : IDispatch
{
    [propput, id(DISPID_IHTMLRULESTYLE_FONTFAMILY), bindable, displaybind]
    HRESULT fontFamily([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_FONTFAMILY), bindable, displaybind]
    HRESULT fontFamily([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_FONTSTYLE), bindable, displaybind]
    HRESULT fontStyle([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_FONTSTYLE), bindable, displaybind]
    HRESULT fontStyle([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_FONTVARIANT), bindable, displaybind]
    HRESULT fontVariant([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_FONTVARIANT), bindable, displaybind]
    HRESULT fontVariant([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_FONTWEIGHT), bindable, displaybind]
    HRESULT fontWeight([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_FONTWEIGHT), bindable, displaybind]
    HRESULT fontWeight([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_FONTSIZE), bindable, displaybind]
    HRESULT fontSize([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_FONTSIZE), bindable, displaybind]
    HRESULT fontSize([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_FONT), bindable, displaybind]
    HRESULT font([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_FONT), bindable, displaybind]
    HRESULT font([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_COLOR), bindable, displaybind]
    HRESULT color([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_COLOR), bindable, displaybind]
    HRESULT color([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUND), bindable, displaybind]
    HRESULT background([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUND), bindable, displaybind]
    HRESULT background([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUNDCOLOR), bindable, displaybind]
    HRESULT backgroundColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUNDCOLOR), bindable, displaybind]
    HRESULT backgroundColor([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUNDIMAGE), bindable, displaybind]
    HRESULT backgroundImage([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUNDIMAGE), bindable, displaybind]
    HRESULT backgroundImage([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUNDREPEAT), bindable, displaybind]
    HRESULT backgroundRepeat([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUNDREPEAT), bindable, displaybind]
    HRESULT backgroundRepeat([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUNDATTACHMENT), bindable, displaybind]
    HRESULT backgroundAttachment([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUNDATTACHMENT), bindable, displaybind]
    HRESULT backgroundAttachment([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITION), bindable, displaybind]
    HRESULT backgroundPosition([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITION), bindable, displaybind]
    HRESULT backgroundPosition([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITIONX), bindable, displaybind]
    HRESULT backgroundPositionX([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITIONX), bindable, displaybind]
    HRESULT backgroundPositionX([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITIONY), bindable, displaybind]
    HRESULT backgroundPositionY([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITIONY), bindable, displaybind]
    HRESULT backgroundPositionY([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_WORDSPACING), bindable, displaybind]
    HRESULT wordSpacing([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_WORDSPACING), bindable, displaybind]
    HRESULT wordSpacing([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_LETTERSPACING), bindable, displaybind]
    HRESULT letterSpacing([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_LETTERSPACING), bindable, displaybind]
    HRESULT letterSpacing([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_TEXTDECORATION), bindable, displaybind]
    HRESULT textDecoration([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_TEXTDECORATION), bindable, displaybind]
    HRESULT textDecoration([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONNONE), bindable, displaybind]
    HRESULT textDecorationNone([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONNONE), bindable, displaybind]
    HRESULT textDecorationNone([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONUNDERLINE), bindable, displaybind]
    HRESULT textDecorationUnderline([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONUNDERLINE), bindable, displaybind]
    HRESULT textDecorationUnderline([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONOVERLINE), bindable, displaybind]
    HRESULT textDecorationOverline([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONOVERLINE), bindable, displaybind]
    HRESULT textDecorationOverline([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONLINETHROUGH), bindable, displaybind]
    HRESULT textDecorationLineThrough([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONLINETHROUGH), bindable, displaybind]
    HRESULT textDecorationLineThrough([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONBLINK), bindable, displaybind]
    HRESULT textDecorationBlink([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONBLINK), bindable, displaybind]
    HRESULT textDecorationBlink([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLRULESTYLE_VERTICALALIGN), bindable, displaybind]
    HRESULT verticalAlign([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_VERTICALALIGN), bindable, displaybind]
    HRESULT verticalAlign([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_TEXTTRANSFORM), bindable, displaybind]
    HRESULT textTransform([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_TEXTTRANSFORM), bindable, displaybind]
    HRESULT textTransform([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_TEXTALIGN), bindable, displaybind]
    HRESULT textAlign([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_TEXTALIGN), bindable, displaybind]
    HRESULT textAlign([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_TEXTINDENT), bindable, displaybind]
    HRESULT textIndent([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_TEXTINDENT), bindable, displaybind]
    HRESULT textIndent([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_LINEHEIGHT), bindable, displaybind]
    HRESULT lineHeight([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_LINEHEIGHT), bindable, displaybind]
    HRESULT lineHeight([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_MARGINTOP), bindable, displaybind]
    HRESULT marginTop([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_MARGINTOP), bindable, displaybind]
    HRESULT marginTop([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_MARGINRIGHT), bindable, displaybind]
    HRESULT marginRight([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_MARGINRIGHT), bindable, displaybind]
    HRESULT marginRight([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_MARGINBOTTOM), bindable, displaybind]
    HRESULT marginBottom([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_MARGINBOTTOM), bindable, displaybind]
    HRESULT marginBottom([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_MARGINLEFT), bindable, displaybind]
    HRESULT marginLeft([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_MARGINLEFT), bindable, displaybind]
    HRESULT marginLeft([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_MARGIN), bindable, displaybind]
    HRESULT margin([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_MARGIN), bindable, displaybind]
    HRESULT margin([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_PADDINGTOP), bindable, displaybind]
    HRESULT paddingTop([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_PADDINGTOP), bindable, displaybind]
    HRESULT paddingTop([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_PADDINGRIGHT), bindable, displaybind]
    HRESULT paddingRight([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_PADDINGRIGHT), bindable, displaybind]
    HRESULT paddingRight([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_PADDINGBOTTOM), bindable, displaybind]
    HRESULT paddingBottom([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_PADDINGBOTTOM), bindable, displaybind]
    HRESULT paddingBottom([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_PADDINGLEFT), bindable, displaybind]
    HRESULT paddingLeft([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_PADDINGLEFT), bindable, displaybind]
    HRESULT paddingLeft([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_PADDING), bindable, displaybind]
    HRESULT padding([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_PADDING), bindable, displaybind]
    HRESULT padding([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BORDER), bindable, displaybind]
    HRESULT border([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_BORDER), bindable, displaybind]
    HRESULT border([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BORDERTOP), bindable, displaybind]
    HRESULT borderTop([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_BORDERTOP), bindable, displaybind]
    HRESULT borderTop([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BORDERRIGHT), bindable, displaybind]
    HRESULT borderRight([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_BORDERRIGHT), bindable, displaybind]
    HRESULT borderRight([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOM), bindable, displaybind]
    HRESULT borderBottom([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOM), bindable, displaybind]
    HRESULT borderBottom([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BORDERLEFT), bindable, displaybind]
    HRESULT borderLeft([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_BORDERLEFT), bindable, displaybind]
    HRESULT borderLeft([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BORDERCOLOR), bindable, displaybind]
    HRESULT borderColor([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_BORDERCOLOR), bindable, displaybind]
    HRESULT borderColor([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BORDERTOPCOLOR), bindable, displaybind]
    HRESULT borderTopColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_BORDERTOPCOLOR), bindable, displaybind]
    HRESULT borderTopColor([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BORDERRIGHTCOLOR), bindable, displaybind]
    HRESULT borderRightColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_BORDERRIGHTCOLOR), bindable, displaybind]
    HRESULT borderRightColor([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOMCOLOR), bindable, displaybind]
    HRESULT borderBottomColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOMCOLOR), bindable, displaybind]
    HRESULT borderBottomColor([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BORDERLEFTCOLOR), bindable, displaybind]
    HRESULT borderLeftColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_BORDERLEFTCOLOR), bindable, displaybind]
    HRESULT borderLeftColor([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BORDERWIDTH), bindable, displaybind]
    HRESULT borderWidth([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_BORDERWIDTH), bindable, displaybind]
    HRESULT borderWidth([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BORDERTOPWIDTH), bindable, displaybind]
    HRESULT borderTopWidth([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_BORDERTOPWIDTH), bindable, displaybind]
    HRESULT borderTopWidth([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BORDERRIGHTWIDTH), bindable, displaybind]
    HRESULT borderRightWidth([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_BORDERRIGHTWIDTH), bindable, displaybind]
    HRESULT borderRightWidth([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOMWIDTH), bindable, displaybind]
    HRESULT borderBottomWidth([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOMWIDTH), bindable, displaybind]
    HRESULT borderBottomWidth([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BORDERLEFTWIDTH), bindable, displaybind]
    HRESULT borderLeftWidth([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_BORDERLEFTWIDTH), bindable, displaybind]
    HRESULT borderLeftWidth([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BORDERSTYLE), bindable, displaybind]
    HRESULT borderStyle([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_BORDERSTYLE), bindable, displaybind]
    HRESULT borderStyle([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BORDERTOPSTYLE), bindable, displaybind]
    HRESULT borderTopStyle([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_BORDERTOPSTYLE), bindable, displaybind]
    HRESULT borderTopStyle([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BORDERRIGHTSTYLE), bindable, displaybind]
    HRESULT borderRightStyle([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_BORDERRIGHTSTYLE), bindable, displaybind]
    HRESULT borderRightStyle([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOMSTYLE), bindable, displaybind]
    HRESULT borderBottomStyle([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOMSTYLE), bindable, displaybind]
    HRESULT borderBottomStyle([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_BORDERLEFTSTYLE), bindable, displaybind]
    HRESULT borderLeftStyle([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_BORDERLEFTSTYLE), bindable, displaybind]
    HRESULT borderLeftStyle([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_WIDTH), bindable, displaybind]
    HRESULT width([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_WIDTH), bindable, displaybind]
    HRESULT width([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_HEIGHT), bindable, displaybind]
    HRESULT height([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_HEIGHT), bindable, displaybind]
    HRESULT height([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_STYLEFLOAT), bindable, displaybind]
    HRESULT styleFloat([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_STYLEFLOAT), bindable, displaybind]
    HRESULT styleFloat([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_CLEAR), bindable, displaybind]
    HRESULT clear([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_CLEAR), bindable, displaybind]
    HRESULT clear([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_DISPLAY), bindable, displaybind]
    HRESULT display([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_DISPLAY), bindable, displaybind]
    HRESULT display([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_VISIBILITY), bindable, displaybind]
    HRESULT visibility([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_VISIBILITY), bindable, displaybind]
    HRESULT visibility([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_LISTSTYLETYPE), bindable, displaybind]
    HRESULT listStyleType([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_LISTSTYLETYPE), bindable, displaybind]
    HRESULT listStyleType([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_LISTSTYLEPOSITION), bindable, displaybind]
    HRESULT listStylePosition([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_LISTSTYLEPOSITION), bindable, displaybind]
    HRESULT listStylePosition([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_LISTSTYLEIMAGE), bindable, displaybind]
    HRESULT listStyleImage([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_LISTSTYLEIMAGE), bindable, displaybind]
    HRESULT listStyleImage([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_LISTSTYLE), bindable, displaybind]
    HRESULT listStyle([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_LISTSTYLE), bindable, displaybind]
    HRESULT listStyle([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_WHITESPACE), bindable, displaybind]
    HRESULT whiteSpace([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_WHITESPACE), bindable, displaybind]
    HRESULT whiteSpace([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_TOP), bindable, displaybind]
    HRESULT top([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_TOP), bindable, displaybind]
    HRESULT top([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_LEFT), bindable, displaybind]
    HRESULT left([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_LEFT), bindable, displaybind]
    HRESULT left([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLRULESTYLE_POSITION), bindable, displaybind]
    HRESULT position([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_ZINDEX), bindable, displaybind]
    HRESULT zIndex([in] VARIANT v);

    [propget, id(DISPID_IHTMLRULESTYLE_ZINDEX), bindable, displaybind]
    HRESULT zIndex([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRULESTYLE_OVERFLOW), bindable, displaybind]
    HRESULT overflow([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_OVERFLOW), bindable, displaybind]
    HRESULT overflow([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_PAGEBREAKBEFORE), bindable, displaybind]
    HRESULT pageBreakBefore([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_PAGEBREAKBEFORE), bindable, displaybind]
    HRESULT pageBreakBefore([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_PAGEBREAKAFTER), bindable, displaybind]
    HRESULT pageBreakAfter([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_PAGEBREAKAFTER), bindable, displaybind]
    HRESULT pageBreakAfter([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_CSSTEXT), bindable, displaybind]
    HRESULT cssText([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_CSSTEXT), bindable, displaybind]
    HRESULT cssText([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_CURSOR), bindable, displaybind]
    HRESULT cursor([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_CURSOR), bindable, displaybind]
    HRESULT cursor([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_CLIP), bindable, displaybind]
    HRESULT clip([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_CLIP), bindable, displaybind]
    HRESULT clip([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRULESTYLE_FILTER), bindable, displaybind]
    HRESULT filter([in] BSTR v);

    [propget, id(DISPID_IHTMLRULESTYLE_FILTER), bindable, displaybind]
    HRESULT filter([retval, out] BSTR *p);

    [id(DISPID_IHTMLRULESTYLE_SETATTRIBUTE)]
    HRESULT setAttribute(
        [in] BSTR strAttributeName,
        [in] VARIANT AttributeValue,
        [defaultvalue(1), in] LONG lFlags);

    [id(DISPID_IHTMLRULESTYLE_GETATTRIBUTE)]
    HRESULT getAttribute(
        [in] BSTR strAttributeName,
        [defaultvalue(0), in] LONG lFlags,
        [retval, out] VARIANT *AttributeValue);

    [id(DISPID_IHTMLRULESTYLE_REMOVEATTRIBUTE)]
    HRESULT removeAttribute(
        [in] BSTR strAttributeName,
        [defaultvalue(1), in] LONG lFlags,
        [retval, out] VARIANT_BOOL *pfSuccess);
}

/*****************************************************************************
 *    DispHTMLStyle dispinterface
 */
[
    hidden,
    uuid(3050f55a-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLStyle
{
properties:
methods:
    [propput, id(DISPID_IHTMLSTYLE_FONTFAMILY), displaybind, bindable]
    void fontFamily(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_FONTFAMILY), displaybind, bindable]
    BSTR fontFamily();

    [propput, id(DISPID_IHTMLSTYLE_FONTSTYLE), displaybind, bindable]
    void fontStyle(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_FONTSTYLE), displaybind, bindable]
    BSTR fontStyle();

    [propput, id(DISPID_IHTMLSTYLE_FONTVARIANT), displaybind, bindable]
    void fontVariant(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_FONTVARIANT), displaybind, bindable]
    BSTR fontVariant();

    [propput, id(DISPID_IHTMLSTYLE_FONTWEIGHT), displaybind, bindable]
    void fontWeight(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_FONTWEIGHT), displaybind, bindable]
    BSTR fontWeight();

    [propput, id(DISPID_IHTMLSTYLE_FONTSIZE), displaybind, bindable]
    void fontSize(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_FONTSIZE), displaybind, bindable]
    VARIANT fontSize();

    [propput, id(DISPID_IHTMLSTYLE_FONT), displaybind, bindable, nonbrowsable]
    void font(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_FONT), displaybind, bindable, nonbrowsable]
    BSTR font();

    [propput, id(DISPID_IHTMLSTYLE_COLOR), displaybind, bindable]
    void color(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_COLOR), displaybind, bindable]
    VARIANT color();

    [propput, id(DISPID_IHTMLSTYLE_BACKGROUND), displaybind, bindable, nonbrowsable]
    void background(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BACKGROUND), displaybind, bindable, nonbrowsable]
    BSTR background();

    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDCOLOR), displaybind, bindable]
    void backgroundColor(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDCOLOR), displaybind, bindable]
    VARIANT backgroundColor();

    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDIMAGE), displaybind, bindable]
    void backgroundImage(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDIMAGE), displaybind, bindable]
    BSTR backgroundImage();

    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDREPEAT), displaybind, bindable]
    void backgroundRepeat(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDREPEAT), displaybind, bindable]
    BSTR backgroundRepeat();

    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDATTACHMENT), displaybind, bindable]
    void backgroundAttachment(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDATTACHMENT), displaybind, bindable]
    BSTR backgroundAttachment();

    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITION), displaybind, bindable, nonbrowsable]
    void backgroundPosition(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITION), displaybind, bindable, nonbrowsable]
    BSTR backgroundPosition();

    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONX), displaybind, bindable]
    void backgroundPositionX(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONX), displaybind, bindable]
    VARIANT backgroundPositionX();

    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONY), displaybind, bindable]
    void backgroundPositionY(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONY), displaybind, bindable]
    VARIANT backgroundPositionY();

    [propput, id(DISPID_IHTMLSTYLE_WORDSPACING), displaybind, bindable]
    void wordSpacing(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_WORDSPACING), displaybind, bindable]
    VARIANT wordSpacing();

    [propput, id(DISPID_IHTMLSTYLE_LETTERSPACING), displaybind, bindable]
    void letterSpacing(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_LETTERSPACING), displaybind, bindable]
    VARIANT letterSpacing();

    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATION), displaybind, bindable]
    void textDecoration(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATION), displaybind, bindable]
    BSTR textDecoration();

    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONNONE), displaybind, bindable]
    void textDecorationNone(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONNONE), displaybind, bindable]
    VARIANT_BOOL textDecorationNone();

    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONUNDERLINE), displaybind, bindable]
    void textDecorationUnderline(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONUNDERLINE), displaybind, bindable]
    VARIANT_BOOL textDecorationUnderline();

    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONOVERLINE), displaybind, bindable]
    void textDecorationOverline(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONOVERLINE), displaybind, bindable]
    VARIANT_BOOL textDecorationOverline();

    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONLINETHROUGH), displaybind, bindable]
    void textDecorationLineThrough(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONLINETHROUGH), displaybind, bindable]
    VARIANT_BOOL textDecorationLineThrough();

    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONBLINK), displaybind, bindable]
    void textDecorationBlink(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONBLINK), displaybind, bindable]
    VARIANT_BOOL textDecorationBlink();

    [propput, id(DISPID_IHTMLSTYLE_VERTICALALIGN), displaybind, bindable]
    void verticalAlign(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_VERTICALALIGN), displaybind, bindable]
    VARIANT verticalAlign();

    [propput, id(DISPID_IHTMLSTYLE_TEXTTRANSFORM), displaybind, bindable]
    void textTransform(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_TEXTTRANSFORM), displaybind, bindable]
    BSTR textTransform();

    [propput, id(DISPID_IHTMLSTYLE_TEXTALIGN), displaybind, bindable]
    void textAlign(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_TEXTALIGN), displaybind, bindable]
    BSTR textAlign();

    [propput, id(DISPID_IHTMLSTYLE_TEXTINDENT), displaybind, bindable]
    void textIndent(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_TEXTINDENT), displaybind, bindable]
    VARIANT textIndent();

    [propput, id(DISPID_IHTMLSTYLE_LINEHEIGHT), displaybind, bindable]
    void lineHeight(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_LINEHEIGHT), displaybind, bindable]
    VARIANT lineHeight();

    [propput, id(DISPID_IHTMLSTYLE_MARGINTOP), displaybind, bindable]
    void marginTop(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_MARGINTOP), displaybind, bindable]
    VARIANT marginTop();

    [propput, id(DISPID_IHTMLSTYLE_MARGINRIGHT), displaybind, bindable]
    void marginRight(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_MARGINRIGHT), displaybind, bindable]
    VARIANT marginRight();

    [propput, id(DISPID_IHTMLSTYLE_MARGINBOTTOM), displaybind, bindable]
    void marginBottom(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_MARGINBOTTOM), displaybind, bindable]
    VARIANT marginBottom();

    [propput, id(DISPID_IHTMLSTYLE_MARGINLEFT), displaybind, bindable]
    void marginLeft(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_MARGINLEFT), displaybind, bindable]
    VARIANT marginLeft();

    [propput, id(DISPID_IHTMLSTYLE_MARGIN), displaybind, bindable, nonbrowsable]
    void margin(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_MARGIN), displaybind, bindable, nonbrowsable]
    BSTR margin();

    [propput, id(DISPID_IHTMLSTYLE_PADDINGTOP), displaybind, bindable]
    void paddingTop(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_PADDINGTOP), displaybind, bindable]
    VARIANT paddingTop();

    [propput, id(DISPID_IHTMLSTYLE_PADDINGRIGHT), displaybind, bindable]
    void paddingRight(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_PADDINGRIGHT), displaybind, bindable]
    VARIANT paddingRight();

    [propput, id(DISPID_IHTMLSTYLE_PADDINGBOTTOM), displaybind, bindable]
    void paddingBottom(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_PADDINGBOTTOM), displaybind, bindable]
    VARIANT paddingBottom();

    [propput, id(DISPID_IHTMLSTYLE_PADDINGLEFT), displaybind, bindable]
    void paddingLeft(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_PADDINGLEFT), displaybind, bindable]
    VARIANT paddingLeft();

    [propput, id(DISPID_IHTMLSTYLE_PADDING), displaybind, bindable, nonbrowsable]
    void padding(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_PADDING), displaybind, bindable, nonbrowsable]
    BSTR padding();

    [propput, id(DISPID_IHTMLSTYLE_BORDER), displaybind, bindable, nonbrowsable]
    void border(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDER), displaybind, bindable, nonbrowsable]
    BSTR border();

    [propput, id(DISPID_IHTMLSTYLE_BORDERTOP), displaybind, bindable]
    void borderTop(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERTOP), displaybind, bindable]
    BSTR borderTop();

    [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHT), displaybind, bindable]
    void borderRight(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHT), displaybind, bindable]
    BSTR borderRight();

    [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOM), displaybind, bindable]
    void borderBottom(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOM), displaybind, bindable]
    BSTR borderBottom();

    [propput, id(DISPID_IHTMLSTYLE_BORDERLEFT), displaybind, bindable]
    void borderLeft(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERLEFT), displaybind, bindable]
    BSTR borderLeft();

    [propput, id(DISPID_IHTMLSTYLE_BORDERCOLOR), displaybind, bindable]
    void borderColor(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERCOLOR), displaybind, bindable]
    BSTR borderColor();

    [propput, id(DISPID_IHTMLSTYLE_BORDERTOPCOLOR), displaybind, bindable]
    void borderTopColor(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERTOPCOLOR), displaybind, bindable]
    VARIANT borderTopColor();

    [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHTCOLOR), displaybind, bindable]
    void borderRightColor(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHTCOLOR), displaybind, bindable]
    VARIANT borderRightColor();

    [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOMCOLOR), displaybind, bindable]
    void borderBottomColor(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOMCOLOR), displaybind, bindable]
    VARIANT borderBottomColor();

    [propput, id(DISPID_IHTMLSTYLE_BORDERLEFTCOLOR), displaybind, bindable]
    void borderLeftColor(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERLEFTCOLOR), displaybind, bindable]
    VARIANT borderLeftColor();

    [propput, id(DISPID_IHTMLSTYLE_BORDERWIDTH), displaybind, bindable]
    void borderWidth(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERWIDTH), displaybind, bindable]
    BSTR borderWidth();

    [propput, id(DISPID_IHTMLSTYLE_BORDERTOPWIDTH), displaybind, bindable]
    void borderTopWidth(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERTOPWIDTH), displaybind, bindable]
    VARIANT borderTopWidth();

    [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHTWIDTH), displaybind, bindable]
    void borderRightWidth(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHTWIDTH), displaybind, bindable]
    VARIANT borderRightWidth();

    [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOMWIDTH), displaybind, bindable]
    void borderBottomWidth(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOMWIDTH), displaybind, bindable]
    VARIANT borderBottomWidth();

    [propput, id(DISPID_IHTMLSTYLE_BORDERLEFTWIDTH), displaybind, bindable]
    void borderLeftWidth(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERLEFTWIDTH), displaybind, bindable]
    VARIANT borderLeftWidth();

    [propput, id(DISPID_IHTMLSTYLE_BORDERSTYLE), displaybind, bindable]
    void borderStyle(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERSTYLE), displaybind, bindable]
    BSTR borderStyle();

    [propput, id(DISPID_IHTMLSTYLE_BORDERTOPSTYLE), displaybind, bindable]
    void borderTopStyle(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERTOPSTYLE), displaybind, bindable]
    BSTR borderTopStyle();

    [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHTSTYLE), displaybind, bindable]
    void borderRightStyle(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHTSTYLE), displaybind, bindable]
    BSTR borderRightStyle();

    [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOMSTYLE), displaybind, bindable]
    void borderBottomStyle(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOMSTYLE), displaybind, bindable]
    BSTR borderBottomStyle();

    [propput, id(DISPID_IHTMLSTYLE_BORDERLEFTSTYLE), displaybind, bindable]
    void borderLeftStyle(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_BORDERLEFTSTYLE), displaybind, bindable]
    BSTR borderLeftStyle();

    [propput, id(DISPID_IHTMLSTYLE_WIDTH), displaybind, bindable]
    void width(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_WIDTH), displaybind, bindable]
    VARIANT width();

    [propput, id(DISPID_IHTMLSTYLE_HEIGHT), displaybind, bindable]
    void height(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_HEIGHT), displaybind, bindable]
    VARIANT height();

    [propput, id(DISPID_IHTMLSTYLE_STYLEFLOAT), displaybind, bindable]
    void styleFloat(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_STYLEFLOAT), displaybind, bindable]
    BSTR styleFloat();

    [propput, id(DISPID_IHTMLSTYLE_CLEAR), displaybind, bindable]
    void clear(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_CLEAR), displaybind, bindable]
    BSTR clear();

    [propput, id(DISPID_IHTMLSTYLE_DISPLAY), displaybind, bindable]
    void display(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_DISPLAY), displaybind, bindable]
    BSTR display();

    [propput, id(DISPID_IHTMLSTYLE_VISIBILITY), displaybind, bindable]
    void visibility(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_VISIBILITY), displaybind, bindable]
    BSTR visibility();

    [propput, id(DISPID_IHTMLSTYLE_LISTSTYLETYPE), displaybind, bindable]
    void listStyleType(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_LISTSTYLETYPE), displaybind, bindable]
    BSTR listStyleType();

    [propput, id(DISPID_IHTMLSTYLE_LISTSTYLEPOSITION), displaybind, bindable]
    void listStylePosition(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_LISTSTYLEPOSITION), displaybind, bindable]
    BSTR listStylePosition();

    [propput, id(DISPID_IHTMLSTYLE_LISTSTYLEIMAGE), displaybind, bindable]
    void listStyleImage(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_LISTSTYLEIMAGE), displaybind, bindable]
    BSTR listStyleImage();

    [propput, id(DISPID_IHTMLSTYLE_LISTSTYLE), displaybind, bindable, nonbrowsable]
    void listStyle(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_LISTSTYLE), displaybind, bindable, nonbrowsable]
    BSTR listStyle();

    [propput, id(DISPID_IHTMLSTYLE_WHITESPACE), displaybind, bindable]
    void whiteSpace(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_WHITESPACE), displaybind, bindable]
    BSTR whiteSpace();

    [propput, id(DISPID_IHTMLSTYLE_TOP), displaybind, bindable]
    void top(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_TOP), displaybind, bindable]
    VARIANT top();

    [propput, id(DISPID_IHTMLSTYLE_LEFT), displaybind, bindable]
    void left(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_LEFT), displaybind, bindable]
    VARIANT left();

    [propput, id(DISPID_IHTMLSTYLE_ZINDEX), displaybind, bindable]
    void zIndex(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE_ZINDEX), displaybind, bindable]
    VARIANT zIndex();

    [propput, id(DISPID_IHTMLSTYLE_OVERFLOW), displaybind, bindable]
    void overflow(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_OVERFLOW), displaybind, bindable]
    BSTR overflow();

    [propput, id(DISPID_IHTMLSTYLE_PAGEBREAKBEFORE), displaybind, bindable]
    void pageBreakBefore(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_PAGEBREAKBEFORE), displaybind, bindable]
    BSTR pageBreakBefore();

    [propput, id(DISPID_IHTMLSTYLE_PAGEBREAKAFTER), displaybind, bindable]
    void pageBreakAfter(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_PAGEBREAKAFTER), displaybind, bindable]
    BSTR pageBreakAfter();

    [propput, id(DISPID_IHTMLSTYLE_CSSTEXT), displaybind, bindable, nonbrowsable]
    void cssText(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_CSSTEXT), displaybind, bindable, nonbrowsable]
    BSTR cssText();

    [propput, id(DISPID_IHTMLSTYLE_PIXELTOP), displaybind, bindable, hidden]
    void pixelTop(LONG v);

    [propget, id(DISPID_IHTMLSTYLE_PIXELTOP), displaybind, bindable, hidden]
    LONG pixelTop();

    [propput, id(DISPID_IHTMLSTYLE_PIXELLEFT), displaybind, bindable, hidden]
    void pixelLeft(LONG v);

    [propget, id(DISPID_IHTMLSTYLE_PIXELLEFT), displaybind, bindable, hidden]
    LONG pixelLeft();

    [propput, id(DISPID_IHTMLSTYLE_PIXELWIDTH), displaybind, bindable, hidden]
    void pixelWidth(LONG v);

    [propget, id(DISPID_IHTMLSTYLE_PIXELWIDTH), displaybind, bindable, hidden]
    LONG pixelWidth();

    [propput, id(DISPID_IHTMLSTYLE_PIXELHEIGHT), displaybind, bindable, hidden]
    void pixelHeight(LONG v);

    [propget, id(DISPID_IHTMLSTYLE_PIXELHEIGHT), displaybind, bindable, hidden]
    LONG pixelHeight();

    [propput, id(DISPID_IHTMLSTYLE_POSTOP), displaybind, bindable]
    void posTop(float v);

    [propget, id(DISPID_IHTMLSTYLE_POSTOP), displaybind, bindable]
    float posTop();

    [propput, id(DISPID_IHTMLSTYLE_POSLEFT), displaybind, bindable]
    void posLeft(float v);

    [propget, id(DISPID_IHTMLSTYLE_POSLEFT), displaybind, bindable]
    float posLeft();

    [propput, id(DISPID_IHTMLSTYLE_POSWIDTH), displaybind, bindable]
    void posWidth(float v);

    [propget, id(DISPID_IHTMLSTYLE_POSWIDTH), displaybind, bindable]
    float posWidth();

    [propput, id(DISPID_IHTMLSTYLE_POSHEIGHT), displaybind, bindable]
    void posHeight(float v);

    [propget, id(DISPID_IHTMLSTYLE_POSHEIGHT), displaybind, bindable]
    float posHeight();

    [propput, id(DISPID_IHTMLSTYLE_CURSOR), displaybind, bindable]
    void cursor(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_CURSOR), displaybind, bindable]
    BSTR cursor();

    [propput, id(DISPID_IHTMLSTYLE_CLIP), displaybind, bindable]
    void clip(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_CLIP), displaybind, bindable]
    BSTR clip();

    [propput, id(DISPID_IHTMLSTYLE_FILTER), displaybind, bindable]
    void filter(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE_FILTER), displaybind, bindable]
    BSTR filter();

    [id(DISPID_IHTMLSTYLE_SETATTRIBUTE)]
    void setAttribute(
            [in] BSTR strAttributeName,
            [in] VARIANT AttributeValue,
            [in, defaultvalue(1)] LONG lFlags);

    [id(DISPID_IHTMLSTYLE_GETATTRIBUTE)]
    VARIANT getAttribute(
            [in] BSTR strAttributeName,
            [in, defaultvalue(0)] LONG lFlags);

    [id(DISPID_IHTMLSTYLE_REMOVEATTRIBUTE)]
    VARIANT_BOOL removeAttribute(
            [in] BSTR strAttributeName,
            [in, defaultvalue(1)] LONG lFlags);

    [id(DISPID_IHTMLSTYLE_TOSTRING)]
    BSTR toString();

    [propput, id(DISPID_IHTMLSTYLE2_TABLELAYOUT), displaybind, bindable]
    void tableLayout(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_TABLELAYOUT), displaybind, bindable]
    BSTR tableLayout();

    [propput, id(DISPID_IHTMLSTYLE2_BORDERCOLLAPSE), displaybind, bindable]
    void borderCollapse(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_BORDERCOLLAPSE), displaybind, bindable]
    BSTR borderCollapse();

    [propput, id(DISPID_IHTMLSTYLE2_DIRECTION), displaybind, bindable]
    void direction(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_DIRECTION), displaybind, bindable]
    BSTR direction();

    [propput, id(DISPID_IHTMLSTYLE2_BEHAVIOR), displaybind, bindable]
    void behavior(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_BEHAVIOR), displaybind, bindable]
    BSTR behavior();

    [id(DISPID_IHTMLSTYLE2_SETEXPRESSION)]
    void setExpression(
            [in] BSTR propname,
            [in] BSTR expression,
            [in, defaultvalue("")] BSTR language);

    [id(DISPID_IHTMLSTYLE2_GETEXPRESSION)]
    VARIANT getExpression([in] BSTR propname);

    [id(DISPID_IHTMLSTYLE2_REMOVEEXPRESSION)]
    VARIANT_BOOL removeExpression([in] BSTR propname);

    [propput, id(DISPID_IHTMLSTYLE2_POSITION), displaybind, bindable]
    void position(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_POSITION), displaybind, bindable]
    BSTR position();

    [propput, id(DISPID_IHTMLSTYLE2_UNICODEBIDI), displaybind, bindable]
    void unicodeBidi(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_UNICODEBIDI), displaybind, bindable]
    BSTR unicodeBidi();

    [propput, id(DISPID_IHTMLSTYLE2_BOTTOM), displaybind, bindable]
    void bottom(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE2_BOTTOM), displaybind, bindable]
    VARIANT bottom();

    [propput, id(DISPID_IHTMLSTYLE2_RIGHT), displaybind, bindable]
    void right(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE2_RIGHT), displaybind, bindable]
    VARIANT right();

    [propput, id(DISPID_IHTMLSTYLE2_PIXELBOTTOM), displaybind, bindable, hidden]
    void pixelBottom(LONG v);

    [propget, id(DISPID_IHTMLSTYLE2_PIXELBOTTOM), displaybind, bindable, hidden]
    LONG pixelBottom();

    [propput, id(DISPID_IHTMLSTYLE2_PIXELRIGHT), displaybind, bindable, hidden]
    void pixelRight(LONG v);

    [propget, id(DISPID_IHTMLSTYLE2_PIXELRIGHT), displaybind, bindable, hidden]
    LONG pixelRight();

    [propput, id(DISPID_IHTMLSTYLE2_POSBOTTOM), displaybind, bindable]
    void posBottom(float v);

    [propget, id(DISPID_IHTMLSTYLE2_POSBOTTOM), displaybind, bindable]
    float posBottom();

    [propput, id(DISPID_IHTMLSTYLE2_POSRIGHT), displaybind, bindable]
    void posRight(float v);

    [propget, id(DISPID_IHTMLSTYLE2_POSRIGHT), displaybind, bindable]
    float posRight();

    [propput, id(DISPID_IHTMLSTYLE2_IMEMODE), displaybind, bindable]
    void imeMode(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_IMEMODE), displaybind, bindable]
    BSTR imeMode();

    [propput, id(DISPID_IHTMLSTYLE2_RUBYALIGN), displaybind, bindable]
    void rubyAlign(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_RUBYALIGN), displaybind, bindable]
    BSTR rubyAlign();

    [propput, id(DISPID_IHTMLSTYLE2_RUBYPOSITION), displaybind, bindable]
    void rubyPosition(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_RUBYPOSITION), displaybind, bindable]
    BSTR rubyPosition();

    [propput, id(DISPID_IHTMLSTYLE2_RUBYOVERHANG), displaybind, bindable]
    void rubyOverhang(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_RUBYOVERHANG), displaybind, bindable]
    BSTR rubyOverhang();

    [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDCHAR), displaybind, bindable]
    void layoutGridChar(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDCHAR), displaybind, bindable]
    VARIANT layoutGridChar();

    [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDLINE), displaybind, bindable]
    void layoutGridLine(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDLINE), displaybind, bindable]
    VARIANT layoutGridLine();

    [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDMODE), displaybind, bindable]
    void layoutGridMode(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDMODE), displaybind, bindable]
    BSTR layoutGridMode();

    [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDTYPE), displaybind, bindable]
    void layoutGridType(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDTYPE), displaybind, bindable]
    BSTR layoutGridType();

    [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRID), displaybind, bindable, nonbrowsable]
    void layoutGrid(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRID), displaybind, bindable, nonbrowsable]
    BSTR layoutGrid();

    [propput, id(DISPID_IHTMLSTYLE2_WORDBREAK), displaybind, bindable]
    void wordBreak(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_WORDBREAK), displaybind, bindable]
    BSTR wordBreak();

    [propput, id(DISPID_IHTMLSTYLE2_LINEBREAK), displaybind, bindable]
    void lineBreak(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_LINEBREAK), displaybind, bindable]
    BSTR lineBreak();

    [propput, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFY), displaybind, bindable]
    void textJustify(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFY), displaybind, bindable]
    BSTR textJustify();

    [propput, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFYTRIM), displaybind, bindable]
    void textJustifyTrim(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFYTRIM), displaybind, bindable]
    BSTR textJustifyTrim();

    [propput, id(DISPID_IHTMLSTYLE2_TEXTKASHIDA), displaybind, bindable]
    void textKashida(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE2_TEXTKASHIDA), displaybind, bindable]
    VARIANT textKashida();

    [propput, id(DISPID_IHTMLSTYLE2_TEXTAUTOSPACE), displaybind, bindable]
    void textAutospace(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_TEXTAUTOSPACE), displaybind, bindable]
    BSTR textAutospace();

    [propput, id(DISPID_IHTMLSTYLE2_OVERFLOWX), displaybind, bindable]
    void overflowX(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_OVERFLOWX), displaybind, bindable]
    BSTR overflowX();

    [propput, id(DISPID_IHTMLSTYLE2_OVERFLOWY), displaybind, bindable]
    void overflowY(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_OVERFLOWY), displaybind, bindable]
    BSTR overflowY();

    [propput, id(DISPID_IHTMLSTYLE2_ACCELERATOR), displaybind, bindable]
    void accelerator(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE2_ACCELERATOR), displaybind, bindable]
    BSTR accelerator();

    [propput, id(DISPID_IHTMLSTYLE3_LAYOUTFLOW), displaybind, bindable]
    void layoutFlow(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE3_LAYOUTFLOW), displaybind, bindable]
    BSTR layoutFlow();

    [propput, id(DISPID_IHTMLSTYLE3_ZOOM), displaybind, bindable]
    void zoom(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE3_ZOOM), displaybind, bindable]
    VARIANT zoom();

    [propput, id(DISPID_IHTMLSTYLE3_WORDWRAP), displaybind, bindable]
    void wordWrap(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE3_WORDWRAP), displaybind, bindable]
    BSTR wordWrap();

    [propput, id(DISPID_IHTMLSTYLE3_TEXTUNDERLINEPOSITION), displaybind, bindable]
    void textUnderlinePosition(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE3_TEXTUNDERLINEPOSITION), displaybind, bindable]
    BSTR textUnderlinePosition();

    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARBASECOLOR), displaybind, bindable]
    void scrollbarBaseColor(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARBASECOLOR), displaybind, bindable]
    VARIANT scrollbarBaseColor();

    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARFACECOLOR), displaybind, bindable]
    void scrollbarFaceColor(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARFACECOLOR), displaybind, bindable]
    VARIANT scrollbarFaceColor();

    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBAR3DLIGHTCOLOR), displaybind, bindable]
    void scrollbar3dLightColor(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBAR3DLIGHTCOLOR), displaybind, bindable]
    VARIANT scrollbar3dLightColor();

    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARSHADOWCOLOR), displaybind, bindable]
    void scrollbarShadowColor(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARSHADOWCOLOR), displaybind, bindable]
    VARIANT scrollbarShadowColor();

    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARHIGHLIGHTCOLOR), displaybind, bindable]
    void scrollbarHighlightColor(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARHIGHLIGHTCOLOR), displaybind, bindable]
    VARIANT scrollbarHighlightColor();

    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARDARKSHADOWCOLOR), displaybind, bindable]
    void scrollbarDarkShadowColor(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARDARKSHADOWCOLOR), displaybind, bindable]
    VARIANT scrollbarDarkShadowColor();

    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARARROWCOLOR), displaybind, bindable]
    void scrollbarArrowColor(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARARROWCOLOR), displaybind, bindable]
    VARIANT scrollbarArrowColor();

    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARTRACKCOLOR), displaybind, bindable]
    void scrollbarTrackColor(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARTRACKCOLOR), displaybind, bindable]
    VARIANT scrollbarTrackColor();

    [propput, id(DISPID_IHTMLSTYLE3_WRITINGMODE), displaybind, bindable]
    void writingMode(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE3_WRITINGMODE), displaybind, bindable]
    BSTR writingMode();

    [propput, id(DISPID_IHTMLSTYLE3_TEXTALIGNLAST), displaybind, bindable]
    void textAlignLast(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE3_TEXTALIGNLAST), displaybind, bindable]
    BSTR textAlignLast();

    [propput, id(DISPID_IHTMLSTYLE3_TEXTKASHIDASPACE), displaybind, bindable]
    void textKashidaSpace(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE3_TEXTKASHIDASPACE), displaybind, bindable]
    VARIANT textKashidaSpace();

    [propput, id(DISPID_IHTMLSTYLE4_TEXTOVERFLOW), displaybind, bindable]
    void textOverflow(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE4_TEXTOVERFLOW), displaybind, bindable]
    BSTR textOverflow();

    [propput, id(DISPID_IHTMLSTYLE4_MINHEIGHT), displaybind, bindable]
    void minHeight(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE4_MINHEIGHT), displaybind, bindable]
    VARIANT minHeight();

    [propput, id(DISPID_IHTMLSTYLE5_MSINTERPOLATIONMODE), displaybind, bindable]
    void msInterpolationMode(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE5_MSINTERPOLATIONMODE), displaybind, bindable]
    BSTR msInterpolationMode();

    [propput, id(DISPID_IHTMLSTYLE5_MAXHEIGHT), displaybind, bindable]
    void maxHeight(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE5_MAXHEIGHT), displaybind, bindable]
    VARIANT maxHeight();

    [propput, id(DISPID_IHTMLSTYLE5_MINWIDTH), displaybind, bindable]
    void minWidth(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE5_MINWIDTH), displaybind, bindable]
    VARIANT minWidth();

    [propput, id(DISPID_IHTMLSTYLE5_MAXWIDTH), displaybind, bindable]
    void maxWidth(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE5_MAXWIDTH), displaybind, bindable]
    VARIANT maxWidth();

    [propput, id(DISPID_IHTMLSTYLE6_CONTENT), displaybind, bindable]
    void content(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE6_CONTENT), displaybind, bindable]
    BSTR content();

    [propput, id(DISPID_IHTMLSTYLE6_CAPTIONSIDE), displaybind, bindable]
    void captionSide(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE6_CAPTIONSIDE), displaybind, bindable]
    BSTR captionSide();

    [propput, id(DISPID_IHTMLSTYLE6_COUNTERINCREMENT), displaybind, bindable]
    void counterIncrement(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE6_COUNTERINCREMENT), displaybind, bindable]
    BSTR counterIncrement();

    [propput, id(DISPID_IHTMLSTYLE6_COUNTERRESET), displaybind, bindable]
    void counterReset(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE6_COUNTERRESET), displaybind, bindable]
    BSTR counterReset();

    [propput, id(DISPID_IHTMLSTYLE6_OUTLINE), displaybind, bindable]
    void outline(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE6_OUTLINE), displaybind, bindable]
    BSTR outline();

    [propput, id(DISPID_IHTMLSTYLE6_OUTLINEWIDTH), displaybind, bindable]
    void outlineWidth(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE6_OUTLINEWIDTH), displaybind, bindable]
    VARIANT outlineWidth();

    [propput, id(DISPID_IHTMLSTYLE6_OUTLINESTYLE), displaybind, bindable]
    void outlineStyle(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE6_OUTLINESTYLE), displaybind, bindable]
    BSTR outlineStyle();

    [propput, id(DISPID_IHTMLSTYLE6_OUTLINECOLOR), displaybind, bindable]
    void outlineColor(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE6_OUTLINECOLOR), displaybind, bindable]
    VARIANT outlineColor();

    [propput, id(DISPID_IHTMLSTYLE6_BOXSIZING), displaybind, bindable]
    void boxSizing(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE6_BOXSIZING), displaybind, bindable]
    BSTR boxSizing();

    [propput, id(DISPID_IHTMLSTYLE6_BORDERSPACING), displaybind, bindable]
    void borderSpacing(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE6_BORDERSPACING), displaybind, bindable]
    BSTR borderSpacing();

    [propput, id(DISPID_IHTMLSTYLE6_ORPHANS), displaybind, bindable]
    void orphans(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE6_ORPHANS), displaybind, bindable]
    VARIANT orphans();

    [propput, id(DISPID_IHTMLSTYLE6_WIDOWS), displaybind, bindable]
    void widows(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE6_WIDOWS), displaybind, bindable]
    VARIANT widows();

    [propput, id(DISPID_IHTMLSTYLE6_PAGEBREAKINSIDE), displaybind, bindable]
    void pageBreakInside(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE6_PAGEBREAKINSIDE), displaybind, bindable]
    BSTR pageBreakInside();

    [propput, id(DISPID_IHTMLSTYLE6_EMPTYCELLS), displaybind, bindable]
    void emptyCells(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE6_EMPTYCELLS), displaybind, bindable]
    BSTR emptyCells();

    [propput, id(DISPID_IHTMLSTYLE6_MSBLOCKPROGRESSION), displaybind, bindable]
    void msBlockProgression(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE6_MSBLOCKPROGRESSION), displaybind, bindable]
    BSTR msBlockProgression();

    [propput, id(DISPID_IHTMLSTYLE6_QUOTES), displaybind, bindable]
    void quotes(BSTR v);

    [propget, id(DISPID_IHTMLSTYLE6_QUOTES), displaybind, bindable]
    BSTR quotes();

    [propget, id(DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR), hidden]
    IDispatch *constructor();
}

[
    odl,
    oleautomation,
    dual,
    uuid(3050f656-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLStyle3 : IDispatch
{
    [propput, id(DISPID_IHTMLSTYLE3_LAYOUTFLOW), displaybind, bindable]
    HRESULT layoutFlow([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE3_LAYOUTFLOW), displaybind, bindable]
    HRESULT layoutFlow([retval, out] BSTR * p);

    [propput, id(DISPID_IHTMLSTYLE3_ZOOM), displaybind, bindable]
    HRESULT zoom([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE3_ZOOM), displaybind, bindable]
    HRESULT zoom([retval, out] VARIANT * p);

    [propput, id(DISPID_IHTMLSTYLE3_WORDWRAP), displaybind, bindable]
    HRESULT wordWrap([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE3_WORDWRAP), displaybind, bindable]
    HRESULT wordWrap([retval, out] BSTR * p);

    [propput, id(DISPID_IHTMLSTYLE3_TEXTUNDERLINEPOSITION), displaybind, bindable]
    HRESULT textUnderlinePosition([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE3_TEXTUNDERLINEPOSITION), displaybind, bindable]
    HRESULT textUnderlinePosition([retval, out] BSTR * p);

    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARBASECOLOR), displaybind, bindable]
    HRESULT scrollbarBaseColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARBASECOLOR), displaybind, bindable]
    HRESULT scrollbarBaseColor([retval, out] VARIANT * p);

    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARFACECOLOR), displaybind, bindable]
    HRESULT scrollbarFaceColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARFACECOLOR), displaybind, bindable]
    HRESULT scrollbarFaceColor([retval, out] VARIANT * p);

    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBAR3DLIGHTCOLOR), displaybind, bindable]
    HRESULT scrollbar3dLightColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBAR3DLIGHTCOLOR), displaybind, bindable]
    HRESULT scrollbar3dLightColor([retval, out] VARIANT * p);

    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARSHADOWCOLOR), displaybind, bindable]
    HRESULT scrollbarShadowColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARSHADOWCOLOR), displaybind, bindable]
    HRESULT scrollbarShadowColor([retval, out] VARIANT * p);

    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARHIGHLIGHTCOLOR), displaybind, bindable]
    HRESULT scrollbarHighlightColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARHIGHLIGHTCOLOR), displaybind, bindable]
    HRESULT scrollbarHighlightColor([retval, out] VARIANT * p);

    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARDARKSHADOWCOLOR), displaybind, bindable]
    HRESULT scrollbarDarkShadowColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARDARKSHADOWCOLOR), displaybind, bindable]
    HRESULT scrollbarDarkShadowColor([retval, out] VARIANT * p);

    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARARROWCOLOR), displaybind, bindable]
    HRESULT scrollbarArrowColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARARROWCOLOR), displaybind, bindable]
    HRESULT scrollbarArrowColor([retval, out] VARIANT * p);

    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARTRACKCOLOR), displaybind, bindable]
    HRESULT scrollbarTrackColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARTRACKCOLOR), displaybind, bindable]
    HRESULT scrollbarTrackColor([retval, out] VARIANT * p);

    [propput, id(DISPID_IHTMLSTYLE3_WRITINGMODE), displaybind, bindable]
    HRESULT writingMode([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE3_WRITINGMODE), displaybind, bindable]
    HRESULT writingMode([retval, out] BSTR * p);

    [propput, id(DISPID_IHTMLSTYLE3_TEXTALIGNLAST), displaybind, bindable]
    HRESULT textAlignLast([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE3_TEXTALIGNLAST), displaybind, bindable]
    HRESULT textAlignLast([retval, out] BSTR * p);

    [propput, id(DISPID_IHTMLSTYLE3_TEXTKASHIDASPACE), displaybind, bindable]
    HRESULT textKashidaSpace([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE3_TEXTKASHIDASPACE), displaybind, bindable]
    HRESULT textKashidaSpace([retval, out] VARIANT * p);
}

/*****************************************************************************
 *    IHTMLSytyle4 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f816-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLStyle4 : IDispatch
{
    [propput, id(DISPID_IHTMLSTYLE4_TEXTOVERFLOW), displaybind, bindable]
    HRESULT textOverflow([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE4_TEXTOVERFLOW), displaybind, bindable]
    HRESULT textOverflow([retval, out] BSTR * p);

    [propput, id(DISPID_IHTMLSTYLE4_MINHEIGHT), displaybind, bindable]
    HRESULT minHeight([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE4_MINHEIGHT), displaybind, bindable]
    HRESULT minHeight([retval, out] VARIANT * p);
}

/*****************************************************************************
 *    IHTMLSytyle5 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f33a-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLStyle5 : IDispatch
{
    [propput, id(DISPID_IHTMLSTYLE5_MSINTERPOLATIONMODE), displaybind, bindable]
    HRESULT msInterpolationMode([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE5_MSINTERPOLATIONMODE), displaybind, bindable]
    HRESULT msInterpolationMode([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE5_MAXHEIGHT), displaybind, bindable]
    HRESULT maxHeight([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE5_MAXHEIGHT), displaybind, bindable]
    HRESULT maxHeight([out, retval] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE5_MINWIDTH), displaybind, bindable]
    HRESULT minWidth([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE5_MINWIDTH), displaybind, bindable]
    HRESULT minWidth([out, retval] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE5_MAXWIDTH), displaybind, bindable]
    HRESULT maxWidth([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE5_MAXWIDTH), displaybind, bindable]
    HRESULT maxWidth([out, retval] VARIANT *p);
}

/*****************************************************************************
 *    IHTMLSytyle6 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(30510480-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLStyle6 : IDispatch
{
    [propput, id(DISPID_IHTMLSTYLE6_CONTENT), displaybind, bindable]
    HRESULT content([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE6_CONTENT), displaybind, bindable]
    HRESULT content([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE6_CAPTIONSIDE), displaybind, bindable]
    HRESULT captionSide([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE6_CAPTIONSIDE), displaybind, bindable]
    HRESULT captionSide([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE6_COUNTERINCREMENT), displaybind, bindable]
    HRESULT counterIncrement([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE6_COUNTERINCREMENT), displaybind, bindable]
    HRESULT counterIncrement([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE6_COUNTERRESET), displaybind, bindable]
    HRESULT counterReset([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE6_COUNTERRESET), displaybind, bindable]
    HRESULT counterReset([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE6_OUTLINE), displaybind, bindable]
    HRESULT outline([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE6_OUTLINE), displaybind, bindable]
    HRESULT outline([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE6_OUTLINEWIDTH), displaybind, bindable]
    HRESULT outlineWidth([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE6_OUTLINEWIDTH), displaybind, bindable]
    HRESULT outlineWidth([out, retval] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE6_OUTLINESTYLE), displaybind, bindable]
    HRESULT outlineStyle([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE6_OUTLINESTYLE), displaybind, bindable]
    HRESULT outlineStyle([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE6_OUTLINECOLOR), displaybind, bindable]
    HRESULT outlineColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE6_OUTLINECOLOR), displaybind, bindable]
    HRESULT outlineColor([out, retval] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE6_BOXSIZING), displaybind, bindable]
    HRESULT boxSizing([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE6_BOXSIZING), displaybind, bindable]
    HRESULT boxSizing([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE6_BORDERSPACING), displaybind, bindable]
    HRESULT borderSpacing([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE6_BORDERSPACING), displaybind, bindable]
    HRESULT borderSpacing([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE6_ORPHANS), displaybind, bindable]
    HRESULT orphans([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE6_ORPHANS), displaybind, bindable]
    HRESULT orphans([out, retval] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE6_WIDOWS), displaybind, bindable]
    HRESULT widows([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLE6_WIDOWS), displaybind, bindable]
    HRESULT widows([out, retval] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLE6_PAGEBREAKINSIDE), displaybind, bindable]
    HRESULT pageBreakInside([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE6_PAGEBREAKINSIDE), displaybind, bindable]
    HRESULT pageBreakInside([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE6_EMPTYCELLS), displaybind, bindable]
    HRESULT emptyCells([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE6_EMPTYCELLS), displaybind, bindable]
    HRESULT emptyCells([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE6_MSBLOCKPROGRESSION), displaybind, bindable]
    HRESULT msBlockProgression([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE6_MSBLOCKPROGRESSION), displaybind, bindable]
    HRESULT msBlockProgression([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLE6_QUOTES), displaybind, bindable]
    HRESULT quotes([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLE6_QUOTES), displaybind, bindable]
    HRESULT quotes([out, retval] BSTR *p);
}

[
    noncreatable,
    uuid(3050f285-98b5-11cf-bb82-00aa00bdce0b)
]
coclass HTMLStyle
{
    [default] dispinterface DispHTMLStyle;
    interface IHTMLStyle;
    interface IHTMLStyle2;
    interface IHTMLStyle3;
    interface IHTMLStyle4;
    interface IHTMLStyle5;
    interface IHTMLStyle6;
}

/*****************************************************************************
 *    IHTMLRenderStyle interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f6ae-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLRenderStyle : IDispatch
{
    [propput, id(DISPID_IHTMLRENDERSTYLE_TEXTLINETHROUGHSTYLE), displaybind, bindable]
    HRESULT textLineThroughStyle([in] BSTR v);

    [propget, id(DISPID_IHTMLRENDERSTYLE_TEXTLINETHROUGHSTYLE), displaybind, bindable]
    HRESULT textLineThroughStyle([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRENDERSTYLE_TEXTUNDERLINESTYLE), displaybind, bindable]
    HRESULT textUnderlineStyle([in] BSTR v);

    [propget, id(DISPID_IHTMLRENDERSTYLE_TEXTUNDERLINESTYLE), displaybind, bindable]
    HRESULT textUnderlineStyle([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRENDERSTYLE_TEXTEFFECT), displaybind, bindable]
    HRESULT textEffect([in] BSTR v);

    [propget, id(DISPID_IHTMLRENDERSTYLE_TEXTEFFECT), displaybind, bindable]
    HRESULT textEffect([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRENDERSTYLE_TEXTCOLOR), displaybind, bindable]
    HRESULT textColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLRENDERSTYLE_TEXTCOLOR), displaybind, bindable]
    HRESULT textColor([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRENDERSTYLE_TEXTBACKGROUNDCOLOR), displaybind, bindable]
    HRESULT textBackgroundColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLRENDERSTYLE_TEXTBACKGROUNDCOLOR), displaybind, bindable]
    HRESULT textBackgroundColor([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRENDERSTYLE_TEXTDECORATIONCOLOR), displaybind, bindable]
    HRESULT textDecorationColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLRENDERSTYLE_TEXTDECORATIONCOLOR), displaybind, bindable]
    HRESULT textDecorationColor([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLRENDERSTYLE_RENDERINGPRIORITY), displaybind, bindable]
    HRESULT renderingPriority([in] LONG v);

    [propget, id(DISPID_IHTMLRENDERSTYLE_RENDERINGPRIORITY), displaybind, bindable]
    HRESULT renderingPriority([retval, out] LONG *p);

    [propput, id(DISPID_IHTMLRENDERSTYLE_DEFAULTTEXTSELECTION), displaybind, bindable]
    HRESULT defaultTextSelection([in] BSTR v);

    [propget, id(DISPID_IHTMLRENDERSTYLE_DEFAULTTEXTSELECTION), displaybind, bindable]
    HRESULT defaultTextSelection([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLRENDERSTYLE_TEXTDECORATION), displaybind, bindable]
    HRESULT textDecoration([in] BSTR v);

    [propget, id(DISPID_IHTMLRENDERSTYLE_TEXTDECORATION), displaybind, bindable]
    HRESULT textDecoration([retval, out] BSTR *p);
}

/*****************************************************************************
 *    IHTMLCurrentStyle interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f3db-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLCurrentStyle : IDispatch
{
    [propget, id(DISPID_IHTMLCURRENTSTYLE_POSITION), displaybind, bindable]
    HRESULT position([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_STYLEFLOAT), displaybind, bindable]
    HRESULT styleFloat([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_COLOR), displaybind, bindable]
    HRESULT color([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDCOLOR), displaybind, bindable]
    HRESULT backgroundColor([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTFAMILY), displaybind, bindable]
    HRESULT fontFamily([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTSTYLE), displaybind, bindable]
    HRESULT fontStyle([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTVARIANT), displaybind, bindable, hidden]
    HRESULT fontVariant([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTWEIGHT), displaybind, bindable]
    HRESULT fontWeight([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTSIZE), displaybind, bindable]
    HRESULT fontSize([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDIMAGE), displaybind, bindable]
    HRESULT backgroundImage([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDPOSITIONX), displaybind, bindable]
    HRESULT backgroundPositionX([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDPOSITIONY), displaybind, bindable]
    HRESULT backgroundPositionY([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDREPEAT), displaybind, bindable]
    HRESULT backgroundRepeat([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERLEFTCOLOR), displaybind, bindable]
    HRESULT borderLeftColor([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERTOPCOLOR), displaybind, bindable]
    HRESULT borderTopColor([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTCOLOR), displaybind, bindable]
    HRESULT borderRightColor([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMCOLOR), displaybind, bindable]
    HRESULT borderBottomColor([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERTOPSTYLE), displaybind, bindable]
    HRESULT borderTopStyle([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTSTYLE), displaybind, bindable]
    HRESULT borderRightStyle([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMSTYLE), displaybind, bindable]
    HRESULT borderBottomStyle([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERLEFTSTYLE), displaybind, bindable]
    HRESULT borderLeftStyle([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERTOPWIDTH), displaybind, bindable]
    HRESULT borderTopWidth([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTWIDTH), displaybind, bindable]
    HRESULT borderRightWidth([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMWIDTH), displaybind, bindable]
    HRESULT borderBottomWidth([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERLEFTWIDTH), displaybind, bindable]
    HRESULT borderLeftWidth([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_LEFT), displaybind, bindable]
    HRESULT left([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_TOP), displaybind, bindable]
    HRESULT top([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_WIDTH), displaybind, bindable]
    HRESULT width([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_HEIGHT), displaybind, bindable]
    HRESULT height([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGLEFT), displaybind, bindable]
    HRESULT paddingLeft([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGTOP), displaybind, bindable]
    HRESULT paddingTop([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGRIGHT), displaybind, bindable]
    HRESULT paddingRight([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGBOTTOM), displaybind, bindable]
    HRESULT paddingBottom([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTALIGN), displaybind, bindable]
    HRESULT textAlign([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTDECORATION), displaybind, bindable]
    HRESULT textDecoration([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_DISPLAY), displaybind, bindable]
    HRESULT display([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_VISIBILITY), displaybind, bindable]
    HRESULT visibility([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_ZINDEX), displaybind, bindable]
    HRESULT zIndex([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_LETTERSPACING), displaybind, bindable]
    HRESULT letterSpacing([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_LINEHEIGHT), displaybind, bindable]
    HRESULT lineHeight([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTINDENT), displaybind, bindable]
    HRESULT textIndent([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_VERTICALALIGN), displaybind, bindable]
    HRESULT verticalAlign([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDATTACHMENT), displaybind, bindable]
    HRESULT backgroundAttachment([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINTOP), displaybind, bindable]
    HRESULT marginTop([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINRIGHT), displaybind, bindable]
    HRESULT marginRight([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINBOTTOM), displaybind, bindable]
    HRESULT marginBottom([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINLEFT), displaybind, bindable]
    HRESULT marginLeft([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_CLEAR), displaybind, bindable]
    HRESULT clear([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_LISTSTYLETYPE), displaybind, bindable]
    HRESULT listStyleType([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_LISTSTYLEPOSITION), displaybind, bindable]
    HRESULT listStylePosition([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_LISTSTYLEIMAGE), displaybind, bindable]
    HRESULT listStyleImage([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPTOP), displaybind, bindable]
    HRESULT clipTop([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPRIGHT), displaybind, bindable]
    HRESULT clipRight([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPBOTTOM), displaybind, bindable]
    HRESULT clipBottom([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPLEFT), displaybind, bindable]
    HRESULT clipLeft([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_OVERFLOW), displaybind, bindable]
    HRESULT overflow([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_PAGEBREAKBEFORE), displaybind, bindable]
    HRESULT pageBreakBefore([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_PAGEBREAKAFTER), displaybind, bindable]
    HRESULT pageBreakAfter([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_CURSOR), displaybind, bindable]
    HRESULT cursor([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_TABLELAYOUT), displaybind, bindable]
    HRESULT tableLayout([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERCOLLAPSE), displaybind, bindable]
    HRESULT borderCollapse([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_DIRECTION), displaybind, bindable]
    HRESULT direction([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BEHAVIOR), displaybind, bindable]
    HRESULT behavior([retval, out] BSTR *p);

    [id(DISPID_IHTMLCURRENTSTYLE_GETATTRIBUTE)]
    HRESULT getAttribute(
        [in] BSTR strAttributeName,
        [defaultvalue(0), in] LONG lFlags,
        [retval, out] VARIANT *AttributeValue);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_UNICODEBIDI), displaybind, bindable]
    HRESULT unicodeBidi([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_RIGHT), displaybind, bindable]
    HRESULT right([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BOTTOM), displaybind, bindable]
    HRESULT bottom([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_IMEMODE), displaybind, bindable]
    HRESULT imeMode([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_RUBYALIGN), displaybind, bindable]
    HRESULT rubyAlign([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_RUBYPOSITION), displaybind, bindable]
    HRESULT rubyPosition([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_RUBYOVERHANG), displaybind, bindable]
    HRESULT rubyOverhang([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTAUTOSPACE), displaybind, bindable]
    HRESULT textAutospace([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_LINEBREAK), displaybind, bindable]
    HRESULT lineBreak([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_WORDBREAK), displaybind, bindable]
    HRESULT wordBreak([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTJUSTIFY), displaybind, bindable]
    HRESULT textJustify([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTJUSTIFYTRIM), displaybind, bindable]
    HRESULT textJustifyTrim([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTKASHIDA), displaybind, bindable]
    HRESULT textKashida([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BLOCKDIRECTION), displaybind, bindable]
    HRESULT blockDirection([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDCHAR), displaybind, bindable]
    HRESULT layoutGridChar([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDLINE), displaybind, bindable]
    HRESULT layoutGridLine([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDMODE), displaybind, bindable]
    HRESULT layoutGridMode([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDTYPE), displaybind, bindable]
    HRESULT layoutGridType([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERSTYLE), displaybind, bindable]
    HRESULT borderStyle([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERCOLOR), displaybind, bindable]
    HRESULT borderColor([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERWIDTH), displaybind, bindable]
    HRESULT borderWidth([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDING), displaybind, bindable]
    HRESULT padding([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGIN), displaybind, bindable]
    HRESULT margin([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_ACCELERATOR), displaybind, bindable]
    HRESULT accelerator([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_OVERFLOWX), displaybind, bindable]
    HRESULT overflowX([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_OVERFLOWY), displaybind, bindable]
    HRESULT overflowY([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTTRANSFORM), displaybind, bindable]
    HRESULT textTransform([retval, out] BSTR *p);
}

/*****************************************************************************
 *    IHTMLCurrentStyle2 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f658-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLCurrentStyle2 : IDispatch
{
    [propget, id(DISPID_IHTMLCURRENTSTYLE2_LAYOUTFLOW), displaybind, bindable]
    HRESULT layoutFlow([retval, out] BSTR * p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_WORDWRAP), displaybind, bindable]
    HRESULT wordWrap([retval, out] BSTR * p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_TEXTUNDERLINEPOSITION), displaybind, bindable]
    HRESULT textUnderlinePosition([retval, out] BSTR * p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_HASLAYOUT), displaybind, bindable]
    HRESULT hasLayout([retval, out] VARIANT_BOOL * p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARBASECOLOR), displaybind, bindable]
    HRESULT scrollbarBaseColor([retval, out] VARIANT * p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARFACECOLOR), displaybind, bindable]
    HRESULT scrollbarFaceColor([retval, out] VARIANT * p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBAR3DLIGHTCOLOR), displaybind, bindable]
    HRESULT scrollbar3dLightColor([retval, out] VARIANT * p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARSHADOWCOLOR), displaybind, bindable]
    HRESULT scrollbarShadowColor([retval, out] VARIANT * p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARHIGHLIGHTCOLOR), displaybind, bindable]
    HRESULT scrollbarHighlightColor([retval, out] VARIANT * p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARDARKSHADOWCOLOR), displaybind, bindable]
    HRESULT scrollbarDarkShadowColor([retval, out] VARIANT * p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARARROWCOLOR), displaybind, bindable]
    HRESULT scrollbarArrowColor([retval, out] VARIANT * p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARTRACKCOLOR), displaybind, bindable]
    HRESULT scrollbarTrackColor([retval, out] VARIANT * p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_WRITINGMODE), displaybind, bindable]
    HRESULT writingMode([retval, out] BSTR * p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_ZOOM), displaybind, bindable]
    HRESULT zoom([retval, out] VARIANT * p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_FILTER), displaybind, bindable]
    HRESULT filter([retval, out] BSTR * p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_TEXTALIGNLAST), displaybind, bindable]
    HRESULT textAlignLast([retval, out] BSTR * p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_TEXTKASHIDASPACE), displaybind, bindable]
    HRESULT textKashidaSpace([retval, out] VARIANT * p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_ISBLOCK), displaybind, bindable, hidden, restricted, nonbrowsable]
    HRESULT isBlock([retval, out] VARIANT_BOOL * p);
}

/*****************************************************************************
 *    IHTMLCurrentStyle3 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f818-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLCurrentStyle3 : IDispatch
{
    [propget, id(DISPID_IHTMLCURRENTSTYLE3_TEXTOVERFLOW), displaybind, bindable]
    HRESULT textOverflow([retval, out] BSTR * p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE3_MINHEIGHT), displaybind, bindable]
    HRESULT minHeight([retval, out] VARIANT * p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE3_WORDSPACING), displaybind, bindable]
    HRESULT wordSpacing([retval, out] VARIANT * p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE3_WHITESPACE), displaybind, bindable]
    HRESULT whiteSpace([retval, out] BSTR * p);
}

/*****************************************************************************
 *    IHTMLCurrentStyle4 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f33b-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLCurrentStyle4 : IDispatch
{
    [propget, id(DISPID_IHTMLCURRENTSTYLE4_MSINTERPOLATIONMODE), displaybind, bindable]
    HRESULT msInterpolationMode([retval, out] BSTR * p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE4_MAXHEIGHT), displaybind, bindable]
    HRESULT maxHeight([retval, out] VARIANT * p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE4_MINWIDTH), displaybind, bindable]
    HRESULT minWidth([retval, out] VARIANT * p);

    [propget, id(DISPID_IHTMLCURRENTSTYLE4_MAXWIDTH), displaybind, bindable]
    HRESULT maxWidth([retval, out] VARIANT * p);
}

/*****************************************************************************
 *    DispHTMLCurrentStyle dispinterface
 */
[
    hidden,
    uuid(3050f557-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLCurrentStyle
{
properties:
methods:
    [propget, id(DISPID_IHTMLCURRENTSTYLE_POSITION), displaybind, bindable]
    BSTR position();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_STYLEFLOAT), displaybind, bindable]
    BSTR styleFloat();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_COLOR), displaybind, bindable]
    VARIANT color();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDCOLOR), displaybind, bindable]
    VARIANT backgroundColor();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTFAMILY), displaybind, bindable]
    BSTR fontFamily();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTSTYLE), displaybind, bindable]
    BSTR fontStyle();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTVARIANT), displaybind, bindable, hidden]
    BSTR fontVariant();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTWEIGHT), displaybind, bindable]
    VARIANT fontWeight();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTSIZE), displaybind, bindable]
    VARIANT fontSize();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDIMAGE), displaybind, bindable]
    BSTR backgroundImage();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDPOSITIONX), displaybind, bindable]
    VARIANT backgroundPositionX();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDPOSITIONY), displaybind, bindable]
    VARIANT backgroundPositionY();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDREPEAT), displaybind, bindable]
    BSTR backgroundRepeat();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERLEFTCOLOR), displaybind, bindable]
    VARIANT borderLeftColor();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERTOPCOLOR), displaybind, bindable]
    VARIANT borderTopColor();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTCOLOR), displaybind, bindable]
    VARIANT borderRightColor();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMCOLOR), displaybind, bindable]
    VARIANT borderBottomColor();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERTOPSTYLE), displaybind, bindable]
    BSTR borderTopStyle();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTSTYLE), displaybind, bindable]
    BSTR borderRightStyle();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMSTYLE), displaybind, bindable]
    BSTR borderBottomStyle();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERLEFTSTYLE), displaybind, bindable]
    BSTR borderLeftStyle();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERTOPWIDTH), displaybind, bindable]
    VARIANT borderTopWidth();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTWIDTH), displaybind, bindable]
    VARIANT borderRightWidth();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMWIDTH), displaybind, bindable]
    VARIANT borderBottomWidth();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERLEFTWIDTH), displaybind, bindable]
    VARIANT borderLeftWidth();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_LEFT), displaybind, bindable]
    VARIANT left();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_TOP), displaybind, bindable]
    VARIANT top();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_WIDTH), displaybind, bindable]
    VARIANT width();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_HEIGHT), displaybind, bindable]
    VARIANT height();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGLEFT), displaybind, bindable]
    VARIANT paddingLeft();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGTOP), displaybind, bindable]
    VARIANT paddingTop();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGRIGHT), displaybind, bindable]
    VARIANT paddingRight();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGBOTTOM), displaybind, bindable]
    VARIANT paddingBottom();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTALIGN), displaybind, bindable]
    BSTR textAlign();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTDECORATION), displaybind, bindable]
    BSTR textDecoration();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_DISPLAY), displaybind, bindable]
    BSTR display();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_VISIBILITY), displaybind, bindable]
    BSTR visibility();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_ZINDEX), displaybind, bindable]
    VARIANT zIndex();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_LETTERSPACING), displaybind, bindable]
    VARIANT letterSpacing();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_LINEHEIGHT), displaybind, bindable]
    VARIANT lineHeight();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTINDENT), displaybind, bindable]
    VARIANT textIndent();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_VERTICALALIGN), displaybind, bindable]
    VARIANT verticalAlign();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDATTACHMENT), displaybind, bindable]
    BSTR backgroundAttachment();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINTOP), displaybind, bindable]
    VARIANT marginTop();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINRIGHT), displaybind, bindable]
    VARIANT marginRight();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINBOTTOM), displaybind, bindable]
    VARIANT marginBottom();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINLEFT), displaybind, bindable]
    VARIANT marginLeft();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_CLEAR), displaybind, bindable]
    BSTR clear();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_LISTSTYLETYPE), displaybind, bindable]
    BSTR listStyleType();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_LISTSTYLEPOSITION), displaybind, bindable]
    BSTR listStylePosition();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_LISTSTYLEIMAGE), displaybind, bindable]
    BSTR listStyleImage();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPTOP), displaybind, bindable]
    VARIANT clipTop();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPRIGHT), displaybind, bindable]
    VARIANT clipRight();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPBOTTOM), displaybind, bindable]
    VARIANT clipBottom();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPLEFT), displaybind, bindable]
    VARIANT clipLeft();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_OVERFLOW), displaybind, bindable]
    BSTR overflow();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_PAGEBREAKBEFORE), displaybind, bindable]
    BSTR pageBreakBefore();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_PAGEBREAKAFTER), displaybind, bindable]
    BSTR pageBreakAfter();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_CURSOR), displaybind, bindable]
    BSTR cursor();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_TABLELAYOUT), displaybind, bindable]
    BSTR tableLayout();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERCOLLAPSE), displaybind, bindable]
    BSTR borderCollapse();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_DIRECTION), displaybind, bindable]
    BSTR direction();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BEHAVIOR), displaybind, bindable]
    BSTR behavior();

    [id(DISPID_IHTMLCURRENTSTYLE_GETATTRIBUTE)]
    VARIANT getAttribute(
            [in] BSTR strAttributeName,
            [in, defaultvalue(0)] LONG lFlags);

    [propget, id(DISPID_IHTMLCURRENTSTYLE_UNICODEBIDI), displaybind, bindable]
    BSTR unicodeBidi();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_RIGHT), displaybind, bindable]
    VARIANT right();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BOTTOM), displaybind, bindable]
    VARIANT bottom();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_IMEMODE), displaybind, bindable]
    BSTR imeMode();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_RUBYALIGN), displaybind, bindable]
    BSTR rubyAlign();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_RUBYPOSITION), displaybind, bindable]
    BSTR rubyPosition();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_RUBYOVERHANG), displaybind, bindable]
    BSTR rubyOverhang();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTAUTOSPACE), displaybind, bindable]
    BSTR textAutospace();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_LINEBREAK), displaybind, bindable]
    BSTR lineBreak();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_WORDBREAK), displaybind, bindable]
    BSTR wordBreak();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTJUSTIFY), displaybind, bindable]
    BSTR textJustify();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTJUSTIFYTRIM), displaybind, bindable]
    BSTR textJustifyTrim();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTKASHIDA), displaybind, bindable]
    VARIANT textKashida();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BLOCKDIRECTION), displaybind, bindable]
    BSTR blockDirection();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDCHAR), displaybind, bindable]
    VARIANT layoutGridChar();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDLINE), displaybind, bindable]
    VARIANT layoutGridLine();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDMODE), displaybind, bindable]
    BSTR layoutGridMode();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDTYPE), displaybind, bindable]
    BSTR layoutGridType();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERSTYLE), displaybind, bindable]
    BSTR borderStyle();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERCOLOR), displaybind, bindable]
    BSTR borderColor();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERWIDTH), displaybind, bindable]
    BSTR borderWidth();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDING), displaybind, bindable]
    BSTR padding();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGIN), displaybind, bindable]
    BSTR margin();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_ACCELERATOR), displaybind, bindable]
    BSTR accelerator();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_OVERFLOWX), displaybind, bindable]
    BSTR overflowX();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_OVERFLOWY), displaybind, bindable]
    BSTR overflowY();

    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTTRANSFORM), displaybind, bindable]
    BSTR textTransform();

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_LAYOUTFLOW), displaybind, bindable]
    BSTR layoutFlow();

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_WORDWRAP), displaybind, bindable]
    BSTR wordWrap();

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_TEXTUNDERLINEPOSITION), displaybind, bindable]
    BSTR textUnderlinePosition();

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_HASLAYOUT), displaybind, bindable]
    VARIANT_BOOL hasLayout();

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARBASECOLOR), displaybind, bindable]
    VARIANT scrollbarBaseColor();

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARFACECOLOR), displaybind, bindable]
    VARIANT scrollbarFaceColor();

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBAR3DLIGHTCOLOR), displaybind, bindable]
    VARIANT scrollbar3dLightColor();

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARSHADOWCOLOR), displaybind, bindable]
    VARIANT scrollbarShadowColor();

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARHIGHLIGHTCOLOR), displaybind, bindable]
    VARIANT scrollbarHighlightColor();

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARDARKSHADOWCOLOR), displaybind, bindable]
    VARIANT scrollbarDarkShadowColor();

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARARROWCOLOR), displaybind, bindable]
    VARIANT scrollbarArrowColor();

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARTRACKCOLOR), displaybind, bindable]
    VARIANT scrollbarTrackColor();

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_WRITINGMODE), displaybind, bindable]
    BSTR writingMode();

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_ZOOM), displaybind, bindable]
    VARIANT zoom();

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_FILTER), displaybind, bindable]
    BSTR filter();

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_TEXTALIGNLAST), displaybind, bindable]
    BSTR textAlignLast();

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_TEXTKASHIDASPACE), displaybind, bindable]
    VARIANT textKashidaSpace();

    [propget, id(DISPID_IHTMLCURRENTSTYLE2_ISBLOCK), displaybind, bindable, hidden, restricted, nonbrowsable]
    VARIANT_BOOL isBlock();

    [propget, id(DISPID_IHTMLCURRENTSTYLE3_TEXTOVERFLOW), displaybind, bindable]
    BSTR textOverflow();

    [propget, id(DISPID_IHTMLCURRENTSTYLE3_MINHEIGHT), displaybind, bindable]
    VARIANT minHeight();

    [propget, id(DISPID_IHTMLCURRENTSTYLE3_WORDSPACING), displaybind, bindable]
    VARIANT wordSpacing();

    [propget, id(DISPID_IHTMLCURRENTSTYLE3_WHITESPACE), displaybind, bindable]
    BSTR whiteSpace();

    [propget, id(DISPID_IHTMLCURRENTSTYLE4_MSINTERPOLATIONMODE), displaybind, bindable]
    BSTR msInterpolationMode();

    [propget, id(DISPID_IHTMLCURRENTSTYLE4_MAXHEIGHT), displaybind, bindable]
    VARIANT maxHeight();

    [propget, id(DISPID_IHTMLCURRENTSTYLE4_MINWIDTH), displaybind, bindable]
    VARIANT minWidth();

    [propget, id(DISPID_IHTMLCURRENTSTYLE4_MAXWIDTH), displaybind, bindable]
    VARIANT maxWidth();
}

[
    noncreatable,
    uuid(3050f3dc-98b5-11cf-bb82-00aa00bdce0b)
]
coclass HTMLCurrentStyle
{
    [default] dispinterface DispHTMLCurrentStyle;
    interface IHTMLCurrentStyle;
    interface IHTMLCurrentStyle2;
    interface IHTMLCurrentStyle3;
    interface IHTMLCurrentStyle4;
}

/*****************************************************************************
 *    IHTMLRect interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f4a3-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLRect : IDispatch
{
    [propput, id(DISPID_IHTMLRECT_LEFT)]
    HRESULT left([in] LONG v);

    [propget, id(DISPID_IHTMLRECT_LEFT)]
    HRESULT left([retval, out] LONG *p);

    [propput, id(DISPID_IHTMLRECT_TOP)]
    HRESULT top([in] LONG v);

    [propget, id(DISPID_IHTMLRECT_TOP)]
    HRESULT top([retval, out] LONG *p);

    [propput, id(DISPID_IHTMLRECT_RIGHT)]
    HRESULT right([in] LONG v);

    [propget, id(DISPID_IHTMLRECT_RIGHT)]
    HRESULT right([retval, out] LONG *p);

    [propput, id(DISPID_IHTMLRECT_BOTTOM)]
    HRESULT bottom([in] LONG v);

    [propget, id(DISPID_IHTMLRECT_BOTTOM)]
    HRESULT bottom([retval, out] LONG *p);
}

/*****************************************************************************
 *    IHTMLRectCollection interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f4a4-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLRectCollection : IDispatch
{
    [propget, id(DISPID_IHTMLRECTCOLLECTION_LENGTH)]
    HRESULT length([retval, out] LONG *p);

    [propget, id(DISPID_IHTMLRECTCOLLECTION__NEWENUM), hidden, restricted]
    HRESULT _newEnum([retval, out] IUnknown **p);

    [id(DISPID_IHTMLRECTCOLLECTION_ITEM)]
    HRESULT item(
        [in] VARIANT *pvarIndex,
        [retval, out] VARIANT *pvarResult);
}

/*****************************************************************************
 *    IHTMLDOMNode interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f5da-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLDOMNode : IDispatch
{
    [propget, id(DISPID_IHTMLDOMNODE_NODETYPE)]
    HRESULT nodeType([retval, out] LONG *p);

    [propget, id(DISPID_IHTMLDOMNODE_PARENTNODE)]
    HRESULT parentNode([retval, out] IHTMLDOMNode **p);

    [id(DISPID_IHTMLDOMNODE_HASCHILDNODES)]
    HRESULT hasChildNodes([retval, out] VARIANT_BOOL *fChildren);

    [propget, id(DISPID_IHTMLDOMNODE_CHILDNODES)]
    HRESULT childNodes([retval, out] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMNODE_ATTRIBUTES)]
    HRESULT attributes([retval, out] IDispatch **p);

    [id(DISPID_IHTMLDOMNODE_INSERTBEFORE)]
    HRESULT insertBefore(
        [in] IHTMLDOMNode *newChild,
        [optional, in] VARIANT refChild,
        [retval, out] IHTMLDOMNode **node);

    [id(DISPID_IHTMLDOMNODE_REMOVECHILD)]
    HRESULT removeChild(
        [in] IHTMLDOMNode *oldChild,
        [retval, out] IHTMLDOMNode **node);

    [id(DISPID_IHTMLDOMNODE_REPLACECHILD)]
    HRESULT replaceChild(
        [in] IHTMLDOMNode *newChild,
        [in] IHTMLDOMNode *oldChild,
        [retval, out] IHTMLDOMNode **node);

    [id(DISPID_IHTMLDOMNODE_CLONENODE)]
    HRESULT cloneNode(
        [in] VARIANT_BOOL fDeep,
        [retval, out] IHTMLDOMNode **clonedNode);

    [id(DISPID_IHTMLDOMNODE_REMOVENODE)]
    HRESULT removeNode(
        [defaultvalue(0), in] VARIANT_BOOL fDeep,
        [retval, out] IHTMLDOMNode **removed);

    [id(DISPID_IHTMLDOMNODE_SWAPNODE)]
    HRESULT swapNode(
        [in] IHTMLDOMNode *otherNode,
        [retval, out] IHTMLDOMNode **swappedNode);

    [id(DISPID_IHTMLDOMNODE_REPLACENODE)]
    HRESULT replaceNode(
        [in] IHTMLDOMNode *replacement,
        [retval, out] IHTMLDOMNode **replaced);

    [id(DISPID_IHTMLDOMNODE_APPENDCHILD)]
    HRESULT appendChild(
        [in] IHTMLDOMNode *newChild,
        [retval, out] IHTMLDOMNode **node);

    [propget, id(DISPID_IHTMLDOMNODE_NODENAME)]
    HRESULT nodeName([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLDOMNODE_NODEVALUE)]
    HRESULT nodeValue([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOMNODE_NODEVALUE)]
    HRESULT nodeValue([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLDOMNODE_FIRSTCHILD)]
    HRESULT firstChild([retval, out] IHTMLDOMNode **p);

    [propget, id(DISPID_IHTMLDOMNODE_LASTCHILD)]
    HRESULT lastChild([retval, out] IHTMLDOMNode **p);

    [propget, id(DISPID_IHTMLDOMNODE_PREVIOUSSIBLING)]
    HRESULT previousSibling([retval, out] IHTMLDOMNode **p);

    [propget, id(DISPID_IHTMLDOMNODE_NEXTSIBLING)]
    HRESULT nextSibling([retval, out] IHTMLDOMNode **p);
}

#define WINE_IHTMLDOMNODE_DISPINTERFACE_DECL                            \
    [propget, id(DISPID_IHTMLDOMNODE_NODETYPE)]                         \
    LONG nodeType();                                                    \
                                                                        \
    [propget, id(DISPID_IHTMLDOMNODE_PARENTNODE)]                       \
    IHTMLDOMNode* parentNode();                                         \
                                                                        \
    [id(DISPID_IHTMLDOMNODE_HASCHILDNODES)]                             \
    VARIANT_BOOL hasChildNodes();                                       \
                                                                        \
    [propget, id(DISPID_IHTMLDOMNODE_CHILDNODES)]                       \
    IDispatch* childNodes();                                            \
                                                                        \
    [propget, id(DISPID_IHTMLDOMNODE_ATTRIBUTES)]                       \
    IDispatch* attributes();                                            \
                                                                        \
    [id(DISPID_IHTMLDOMNODE_INSERTBEFORE)]                              \
    IHTMLDOMNode* insertBefore(                                         \
            [in] IHTMLDOMNode* newChild,                                \
            [optional, in] VARIANT refChild);                           \
                                                                        \
    [id(DISPID_IHTMLDOMNODE_REMOVECHILD)]                               \
    IHTMLDOMNode* removeChild([in] IHTMLDOMNode* oldChild);             \
                                                                        \
    [id(DISPID_IHTMLDOMNODE_REPLACECHILD)]                              \
    IHTMLDOMNode* replaceChild(                                         \
        [in] IHTMLDOMNode* newChild,                                    \
        [in] IHTMLDOMNode* oldChild);                                   \
                                                                        \
    [id(DISPID_IHTMLDOMNODE_CLONENODE)]                                 \
    IHTMLDOMNode* cloneNode([in] VARIANT_BOOL fDeep);                   \
                                                                        \
    [id(DISPID_IHTMLDOMNODE_REMOVENODE)]                                \
    IHTMLDOMNode* removeNode([defaultvalue(0), in] VARIANT_BOOL fDeep); \
                                                                        \
    [id(DISPID_IHTMLDOMNODE_SWAPNODE)]                                  \
    IHTMLDOMNode* swapNode([in] IHTMLDOMNode* otherNode);               \
                                                                        \
    [id(DISPID_IHTMLDOMNODE_REPLACENODE)]                               \
    IHTMLDOMNode* replaceNode([in] IHTMLDOMNode* replacement);          \
                                                                        \
    [id(DISPID_IHTMLDOMNODE_APPENDCHILD)]                               \
    IHTMLDOMNode* appendChild([in] IHTMLDOMNode* newChild);             \
                                                                        \
    [propget, id(DISPID_IHTMLDOMNODE_NODENAME)]                         \
    BSTR nodeName();                                                    \
                                                                        \
    [propput, id(DISPID_IHTMLDOMNODE_NODEVALUE)]                        \
    void nodeValue(VARIANT v);                                          \
                                                                        \
    [propget, id(DISPID_IHTMLDOMNODE_NODEVALUE)]                        \
    VARIANT nodeValue();                                                \
                                                                        \
    [propget, id(DISPID_IHTMLDOMNODE_FIRSTCHILD)]                       \
    IHTMLDOMNode* firstChild();                                         \
                                                                        \
    [propget, id(DISPID_IHTMLDOMNODE_LASTCHILD)]                        \
    IHTMLDOMNode* lastChild();                                          \
                                                                        \
    [propget, id(DISPID_IHTMLDOMNODE_PREVIOUSSIBLING)]                  \
    IHTMLDOMNode* previousSibling();                                    \
                                                                        \
    [propget, id(DISPID_IHTMLDOMNODE_NEXTSIBLING)]                      \
    IHTMLDOMNode* nextSibling()

/*****************************************************************************
 *    IHTMLDOMNode2 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f80b-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLDOMNode2 : IDispatch
{
    [propget, id(DISPID_IHTMLDOMNODE2_OWNERDOCUMENT)]
    HRESULT ownerDocument([retval, out] IDispatch **p);
}

#define WINE_IHTMLDOMNODE2_DISPINTERFACE_DECL           \
    [propget, id(DISPID_IHTMLDOMNODE2_OWNERDOCUMENT)]   \
    IDispatch *ownerDocument()

#define WINE_HTMLDOMNODE_DISPINTERFACE_DECL     \
    WINE_IHTMLDOMNODE_DISPINTERFACE_DECL;       \
    WINE_IHTMLDOMNODE2_DISPINTERFACE_DECL

/*****************************************************************************
 *    IHTMLDOMAttribute interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f4b0-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLDOMAttribute : IDispatch
{
    [propget, id(DISPID_IHTMLDOMATTRIBUTE_NODENAME)]
    HRESULT nodeName([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLDOMATTRIBUTE_NODEVALUE)]
    HRESULT nodeValue([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOMATTRIBUTE_NODEVALUE)]
    HRESULT nodeValue([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLDOMATTRIBUTE_SPECIFIED)]
    HRESULT specified([retval, out] VARIANT_BOOL *p);
}

/*****************************************************************************
 *    IHTMLDOMAttribute2 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f810-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLDOMAttribute2 : IDispatch
{
    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_NAME)]
    HRESULT name([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLDOMATTRIBUTE2_VALUE)]
    HRESULT value([in] BSTR v);

    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_VALUE)]
    HRESULT value([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_EXPANDO)]
    HRESULT expando([retval, out] VARIANT_BOOL *p);

    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_NODETYPE)]
    HRESULT nodeType([retval, out] long *p);

    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_PARENTNODE)]
    HRESULT parentNode([retval, out] IHTMLDOMNode **p);

    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_CHILDNODES)]
    HRESULT childNodes([retval, out] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_FIRSTCHILD)]
    HRESULT firstChild([retval, out] IHTMLDOMNode **p);

    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_LASTCHILD)]
    HRESULT lastChild([retval, out] IHTMLDOMNode **p);

    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_PREVIOUSSIBLING)]
    HRESULT previousSibling([retval, out] IHTMLDOMNode **p);

    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_NEXTSIBLING)]
    HRESULT nextSibling([retval, out] IHTMLDOMNode **p);

    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_ATTRIBUTES)]
    HRESULT attributes([retval, out] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_OWNERDOCUMENT)]
    HRESULT ownerDocument([retval, out] IDispatch **p);

    [id(DISPID_IHTMLDOMATTRIBUTE2_INSERTBEFORE)]
    HRESULT insertBefore(
            [in] IHTMLDOMNode *newChild,
            [optional, in] VARIANT refChild,
            [retval, out] IHTMLDOMNode **node);

    [id(DISPID_IHTMLDOMATTRIBUTE2_REPLACECHILD)]
    HRESULT replaceChild(
            [in] IHTMLDOMNode *newChild,
            [in] IHTMLDOMNode *oldChild,
            [retval, out] IHTMLDOMNode **node);

    [id(DISPID_IHTMLDOMATTRIBUTE2_REMOVECHILD)]
    HRESULT removeChild(
            [in] IHTMLDOMNode *oldChild,
            [retval, out] IHTMLDOMNode **node);

    [id(DISPID_IHTMLDOMATTRIBUTE2_APPENDCHILD)]
    HRESULT appendChild(
            [in] IHTMLDOMNode *newChild,
            [retval, out] IHTMLDOMNode **node);

    [id(DISPID_IHTMLDOMATTRIBUTE2_HASCHILDNODES)]
    HRESULT hasChildNodes([retval, out] VARIANT_BOOL *fChildren);

    [id(DISPID_IHTMLDOMATTRIBUTE2_CLONENODE)]
    HRESULT cloneNode(
            [in] VARIANT_BOOL fDeep,
            [retval, out] IHTMLDOMAttribute **clonedNode);
}

/*****************************************************************************
 *    IHTMLDOMTextNode interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f4b1-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLDOMTextNode : IDispatch
{
    [propput, id(DISPID_IHTMLDOMTEXTNODE_DATA)]
    HRESULT data([in] BSTR v);

    [propget, id(DISPID_IHTMLDOMTEXTNODE_DATA)]
    HRESULT data([out, retval] BSTR *p);

    [id(DISPID_IHTMLDOMTEXTNODE_TOSTRING)]
    HRESULT toString([out, retval] BSTR *String);

    [propget, id(DISPID_IHTMLDOMTEXTNODE_LENGTH)]
    HRESULT length([out, retval] LONG *p);

    [id(DISPID_IHTMLDOMTEXTNODE_SPLITTEXT)]
    HRESULT splitText(
            [in] LONG offset,
            [out, retval] IHTMLDOMNode **pRetNode);
}

/*****************************************************************************
 *    IHTMLDOMTextNode2 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f809-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLDOMTextNode2 : IDispatch
{
    [id(DISPID_IHTMLDOMTEXTNODE2_SUBSTRINGDATA)]
    HRESULT substringData([in] LONG offset,[in] LONG Count,[retval, out] BSTR* pbstrsubString);

    [id(DISPID_IHTMLDOMTEXTNODE2_APPENDDATA)]
    HRESULT appendData([in] BSTR bstrstring);

    [id(DISPID_IHTMLDOMTEXTNODE2_INSERTDATA)]
    HRESULT insertData([in] LONG offset,[in] BSTR bstrstring);

    [id(DISPID_IHTMLDOMTEXTNODE2_DELETEDATA)]
    HRESULT deleteData([in] LONG offset,[in] LONG Count);

    [id(DISPID_IHTMLDOMTEXTNODE2_REPLACEDATA)]
    HRESULT replaceData([in] LONG offset,[in] LONG Count,[in] BSTR bstrstring);
}

[
    noncreatable,
    uuid(3050f4ba-98b5-11cf-bb82-00aa00bdce0b)
]
coclass HTMLDOMTextNode
{
    [default]           dispinterface DispHTMLDOMTextNode;
                        interface IHTMLDOMTextNode;
                        interface IHTMLDOMTextNode2;
                        interface IHTMLDOMNode;
                        interface IHTMLDOMNode2;
}

/*****************************************************************************
 *    IHTMLDOMImplementation interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f80d-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLDOMImplementation : IDispatch
{
    [id(DISPID_IHTMLDOMIMPLEMENTATION_HASFEATURE)]
    HRESULT hasFeature(
        [in] BSTR bstrfeature,
        [optional, in] VARIANT version,
        [retval, out] VARIANT_BOOL *pfHasFeature);
}

/*****************************************************************************
 *    DispHTMLDOMAttribute dispinterface
 */
[
    hidden,
    uuid(3050f564-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLDOMAttribute
{
 properties:
    methods:
    [propget, id(DISPID_IHTMLDOMATTRIBUTE_NODENAME)]
    BSTR nodeName();

    [propput, id(DISPID_IHTMLDOMATTRIBUTE_NODEVALUE)]
    void nodeValue(VARIANT v);

    [propget, id(DISPID_IHTMLDOMATTRIBUTE_NODEVALUE)]
    VARIANT nodeValue();

    [propget, id(DISPID_IHTMLDOMATTRIBUTE_SPECIFIED)]
    VARIANT_BOOL specified();

    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_NAME)]
    BSTR name();

    [propput, id(DISPID_IHTMLDOMATTRIBUTE2_VALUE)]
    void value(BSTR v);

    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_VALUE)]
    BSTR value();

    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_EXPANDO)]
    VARIANT_BOOL expando();

    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_NODETYPE)]
    long nodeType();

    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_PARENTNODE)]
    IHTMLDOMNode *parentNode();

    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_CHILDNODES)]
    IDispatch *childNodes();

    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_FIRSTCHILD)]
    IHTMLDOMNode *firstChild();

    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_LASTCHILD)]
    IHTMLDOMNode *lastChild();

    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_PREVIOUSSIBLING)]
    IHTMLDOMNode *previousSibling();

    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_NEXTSIBLING)]
    IHTMLDOMNode *nextSibling();

    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_ATTRIBUTES)]
    IDispatch *attributes();

    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_OWNERDOCUMENT)]
    IDispatch *ownerDocument();

    [id(DISPID_IHTMLDOMATTRIBUTE2_INSERTBEFORE)]
    IHTMLDOMNode *insertBefore(
            [in] IHTMLDOMNode *newChild,
            [optional, in] VARIANT refChild);

    [id(DISPID_IHTMLDOMATTRIBUTE2_REPLACECHILD)]
    IHTMLDOMNode *replaceChild(
            [in] IHTMLDOMNode *newChild,
            [in] IHTMLDOMNode *oldChild);

    [id(DISPID_IHTMLDOMATTRIBUTE2_REMOVECHILD)]
    IHTMLDOMNode *removeChild([in] IHTMLDOMNode *oldChild);

    [id(DISPID_IHTMLDOMATTRIBUTE2_APPENDCHILD)]
    IHTMLDOMNode *appendChild([in] IHTMLDOMNode *newChild);

    [id(DISPID_IHTMLDOMATTRIBUTE2_HASCHILDNODES)]
    VARIANT_BOOL hasChildNodes();

    [id(DISPID_IHTMLDOMATTRIBUTE2_CLONENODE)]
    IHTMLDOMAttribute *cloneNode([in] VARIANT_BOOL fDeep);

    [propput, id(DISPID_IHTMLDOMATTRIBUTE3_IE8_NODEVALUE)]
    void ie8_nodeValue(VARIANT v);

    [propget, id(DISPID_IHTMLDOMATTRIBUTE3_IE8_NODEVALUE)]
    VARIANT ie8_nodeValue();

    [propput, id(DISPID_IHTMLDOMATTRIBUTE3_IE8_VALUE)]
    void ie8_value(BSTR v);

    [propget, id(DISPID_IHTMLDOMATTRIBUTE3_IE8_VALUE)]
    BSTR ie8_value();

    [propget, id(DISPID_IHTMLDOMATTRIBUTE3_IE8_SPECIFIED)]
    VARIANT_BOOL ie8_specified();

    [propget, id(DISPID_IHTMLDOMATTRIBUTE3_OWNERELEMENT)]
    IHTMLElement2 *ownerElement();

    WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL;
}

/*****************************************************************************
 *    IHTMLDocumentCompatibleInfo interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3051041a-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLDocumentCompatibleInfo : IDispatch
{
    [propget, id(DISPID_IHTMLDOCUMENTCOMPATIBLEINFO_USERAGENT)]
    HRESULT userAgent([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLDOCUMENTCOMPATIBLEINFO_VERSION)]
    HRESULT version([retval, out] BSTR *p);
}

/*****************************************************************************
 *    IHTMLDocumentCompatibleInfoCollection interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(30510418-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLDocumentCompatibleInfoCollection : IDispatch
{
    [propget, id(DISPID_IHTMLDOCUMENTCOMPATIBLEINFOCOLLECTION_LENGTH)]
    HRESULT length([retval, out] long *p);

    [id(DISPID_IHTMLDOCUMENTCOMPATIBLEINFOCOLLECTION_ITEM)]
    HRESULT item([in] long i, [retval, out]IHTMLDocumentCompatibleInfo **p);
}

/*****************************************************************************
 *    DispHTMLDOMTextNode dispinterface
 */
[
    hidden,
    uuid(3050f565-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLDOMTextNode
{
properties:
methods:
    [propput, id(DISPID_IHTMLDOMTEXTNODE_DATA)]
    void data(BSTR v);

    [propget, id(DISPID_IHTMLDOMTEXTNODE_DATA)]
    BSTR data();

    [id(DISPID_IHTMLDOMTEXTNODE_TOSTRING)]
    BSTR toString();

    [propget, id(DISPID_IHTMLDOMTEXTNODE_LENGTH)]
    LONG length();

    [id(DISPID_IHTMLDOMTEXTNODE_SPLITTEXT)]
    IHTMLDOMNode *splitText([in] LONG offset);

    [id(DISPID_IHTMLDOMTEXTNODE2_SUBSTRINGDATA)]
    BSTR substringData(
            [in] LONG offset,
            [in] LONG Count);

    [id(DISPID_IHTMLDOMTEXTNODE2_APPENDDATA)]
    void appendData([in] BSTR bstrstring);

    [id(DISPID_IHTMLDOMTEXTNODE2_INSERTDATA)]
    void insertData(
            [in] LONG offset,
            [in] BSTR bstrstring);

    [id(DISPID_IHTMLDOMTEXTNODE2_DELETEDATA)]
    void deleteData(
            [in] LONG offset,
            [in] LONG Count);

    [id(DISPID_IHTMLDOMTEXTNODE2_REPLACEDATA)]
    void replaceData(
            [in] LONG offset,
            [in] LONG Count,
            [in] BSTR bstrstring);

    WINE_HTMLDOMNODE_DISPINTERFACE_DECL;
}

/*****************************************************************************
 *    IHTMLAttributeCollection interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f4c3-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLAttributeCollection : IDispatch
{
    [propget, id(DISPID_IHTMLATTRIBUTECOLLECTION_LENGTH)]
    HRESULT length(
            [retval, out] long *p);

    [propget, id(DISPID_IHTMLATTRIBUTECOLLECTION__NEWENUM), hidden, restricted]
    HRESULT _newEnum(
            [retval, out] IUnknown **p);

    [id(DISPID_IHTMLATTRIBUTECOLLECTION_ITEM)]
    HRESULT item(
            [optional, in] VARIANT *name,
            [retval, out] IDispatch **pdisp);
}

/*****************************************************************************
 *    IHTMLAttributeCollection2 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f80a-98b5-11cf-bb82-00aa00bdce0b)
    ]
interface IHTMLAttributeCollection2 : IDispatch
{
    [id(DISPID_IHTMLATTRIBUTECOLLECTION2_GETNAMEDITEM)]
    HRESULT getNamedItem(
            [in] BSTR bstrName,
            [retval, out] IHTMLDOMAttribute **newretNode);

    [id(DISPID_IHTMLATTRIBUTECOLLECTION2_SETNAMEDITEM)]
    HRESULT setNamedItem(
            [in] IHTMLDOMAttribute *ppNode,
            [retval, out] IHTMLDOMAttribute **newretNode);

    [id(DISPID_IHTMLATTRIBUTECOLLECTION2_REMOVENAMEDITEM)]
    HRESULT removeNamedItem(
            [in] BSTR bstrName,
            [retval, out] IHTMLDOMAttribute **newretNode);
}

/*****************************************************************************
 *    IHTMLAttributeCollection3 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(30510469-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLAttributeCollection3 : IDispatch
{
    [id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_GETNAMEDITEM)]
    HRESULT getNamedItem(
            [in] BSTR bstrName,
            [retval, out] IHTMLDOMAttribute **ppNodeOut);

    [id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_SETNAMEDITEM)]
    HRESULT setNamedItem(
            [in] IHTMLDOMAttribute *pNodeIn,
            [retval, out] IHTMLDOMAttribute **ppNodeOut);

    [id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_REMOVENAMEDITEM)]
    HRESULT removeNamedItem(
            [in] BSTR bstrName,
            [retval, out] IHTMLDOMAttribute **ppNodeOut);

    [id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_ITEM)]
    HRESULT item(
            [in] long index,
            [retval, out] IHTMLDOMAttribute **ppNodeOut);

    [propget, id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_LENGTH)]
    HRESULT length([retval, out] long *p);
}

/*****************************************************************************
 *    DispHTMLAttributeCollection dispinterface
 */
[
    hidden,
    uuid(3050f56c-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLAttributeCollection
{
properties:
methods:
    [propget, id(DISPID_IHTMLATTRIBUTECOLLECTION_LENGTH)]
    long length();

    [propget, id(DISPID_IHTMLATTRIBUTECOLLECTION__NEWENUM), hidden, restricted]
    IUnknown *_newEnum();

    [id(DISPID_IHTMLATTRIBUTECOLLECTION_ITEM)]
    IDispatch *item([optional, in] VARIANT *name);

    [id(DISPID_IHTMLATTRIBUTECOLLECTION2_GETNAMEDITEM)]
    IHTMLDOMAttribute *getNamedItem([in] BSTR bstrName);

    [id(DISPID_IHTMLATTRIBUTECOLLECTION2_SETNAMEDITEM)]
    IHTMLDOMAttribute *setNamedItem([in] IHTMLDOMAttribute *ppNode);

    [id(DISPID_IHTMLATTRIBUTECOLLECTION2_REMOVENAMEDITEM)]
    IHTMLDOMAttribute *removeNamedItem([in] BSTR bstrName);

    [id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_GETNAMEDITEM)]
    IHTMLDOMAttribute *ie8_getNamedItem([in] BSTR bstrName);

    [id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_SETNAMEDITEM)]
    IHTMLDOMAttribute *ie8_setNamedItem([in] IHTMLDOMAttribute *pNodeIn);

    [id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_REMOVENAMEDITEM)]
    IHTMLDOMAttribute *ie8_removeNamedItem([in] BSTR bstrName);

    [id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_ITEM)]
    IHTMLDOMAttribute *ie8_item([in] long index);

    [propget, id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_LENGTH)]
    long ie8_length();

    [propget, id(DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR), hidden]
    IDispatch *constructor();
}

/*****************************************************************************
 *    IHTMLDOMChildrenCollection interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f5ab-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLDOMChildrenCollection : IDispatch
{
    [propget, id(DISPID_IHTMLDOMCHILDRENCOLLECTION_LENGTH)]
    HRESULT length([out, retval] LONG *p);

    [propget, id(DISPID_IHTMLDOMCHILDRENCOLLECTION__NEWENUM), hidden, restricted]
    HRESULT _newEnum([out, retval] IUnknown **p);

    [id(DISPID_IHTMLDOMCHILDRENCOLLECTION_ITEM)]
    HRESULT item(
            [in] LONG index,
            [out, retval] IDispatch **ppItem);
}

/*****************************************************************************
 *    DispDOMChildrenCollection dispinterface
 */
[
    hidden,
    uuid(3050f577-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispDOMChildrenCollection
{
properties:
methods:
    [propget, id(DISPID_IHTMLDOMCHILDRENCOLLECTION_LENGTH)]
    LONG length();

    [propget, id(DISPID_IHTMLDOMCHILDRENCOLLECTION__NEWENUM), hidden, restricted]
    IUnknown *_newEnum();

    [id(DISPID_IHTMLDOMCHILDRENCOLLECTION_ITEM)]
    IDispatch *item([in] LONG index);
}

interface IHTMLElementCollection;

/*****************************************************************************
 *    IHTMLElement interface
 */
[
    odl,
    dual,
    oleautomation,
    uuid(3050f1FF-98B5-11CF-BB82-00AA00BDCE0B)
]
interface IHTMLElement : IDispatch
{
    [id(DISPID_IHTMLELEMENT_SETATTRIBUTE)]
    HRESULT setAttribute(
        [in] BSTR strAttributeName,
        [in] VARIANT AttributeValue,
        [defaultvalue(1), in] LONG lFlags);

    [id(DISPID_IHTMLELEMENT_GETATTRIBUTE)]
    HRESULT getAttribute(
        [in] BSTR strAttributeName,
        [defaultvalue(0), in] LONG lFlags,
        [retval, out] VARIANT *AttributeValue);

    [id(DISPID_IHTMLELEMENT_REMOVEATTRIBUTE)]
    HRESULT removeAttribute(
        [in] BSTR strAttributeName,
        [defaultvalue(1), in] LONG lFlags,
        [retval, out] VARIANT_BOOL *pfSuccess);

    [propput, id(DISPID_IHTMLELEMENT_CLASSNAME)]
    HRESULT className([in] BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_CLASSNAME)]
    HRESULT className([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLELEMENT_ID)]
    HRESULT id([in] BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_ID)]
    HRESULT id([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLELEMENT_TAGNAME)]
    HRESULT tagName([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLELEMENT_PARENTELEMENT)]
    HRESULT parentElement([retval, out] IHTMLElement **p);

    [propget, id(DISPID_IHTMLELEMENT_STYLE)]
    HRESULT style([retval, out] IHTMLStyle **p);

    [propput, id(DISPID_IHTMLELEMENT_ONHELP)]
    HRESULT onhelp([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONHELP)]
    HRESULT onhelp([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT_ONCLICK)]
    HRESULT onclick([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONCLICK)]
    HRESULT onclick([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT_ONDBLCLICK)]
    HRESULT ondblclick([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDBLCLICK)]
    HRESULT ondblclick([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT_ONKEYDOWN)]
    HRESULT onkeydown([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONKEYDOWN)]
    HRESULT onkeydown([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT_ONKEYUP)]
    HRESULT onkeyup([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONKEYUP)]
    HRESULT onkeyup([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT_ONKEYPRESS)]
    HRESULT onkeypress([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONKEYPRESS)]
    HRESULT onkeypress([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOUT)]
    HRESULT onmouseout([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOUT)]
    HRESULT onmouseout([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOVER)]
    HRESULT onmouseover([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOVER)]
    HRESULT onmouseover([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE)]
    HRESULT onmousemove([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE)]
    HRESULT onmousemove([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN)]
    HRESULT onmousedown([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN)]
    HRESULT onmousedown([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEUP)]
    HRESULT onmouseup([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEUP)]
    HRESULT onmouseup([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLELEMENT_DOCUMENT)]
    HRESULT document([retval, out] IDispatch **p);

    [propput, id(DISPID_IHTMLELEMENT_TITLE)]
    HRESULT title([in] BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_TITLE)]
    HRESULT title([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLELEMENT_LANGUAGE)]
    HRESULT language([in] BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_LANGUAGE)]
    HRESULT language([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLELEMENT_ONSELECTSTART)]
    HRESULT onselectstart([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONSELECTSTART)]
    HRESULT onselectstart([retval, out] VARIANT *p);

    [id(DISPID_IHTMLELEMENT_SCROLLINTOVIEW)]
    HRESULT scrollIntoView([optional, in] VARIANT varargStart);

    [id(DISPID_IHTMLELEMENT_CONTAINS)]
    HRESULT contains(
        [in] IHTMLElement *pChild,
        [retval, out] VARIANT_BOOL *pfResult);

    [propget, id(DISPID_IHTMLELEMENT_SOURCEINDEX)]
    HRESULT sourceIndex([retval, out] LONG *p);

    [propget, id(DISPID_IHTMLELEMENT_RECORDNUMBER)]
    HRESULT recordNumber([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT_LANG)]
    HRESULT lang([in] BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_LANG)]
    HRESULT lang([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLELEMENT_OFFSETLEFT)]
    HRESULT offsetLeft([retval, out] LONG *p);

    [propget, id(DISPID_IHTMLELEMENT_OFFSETTOP)]
    HRESULT offsetTop([retval, out] LONG *p);

    [propget, id(DISPID_IHTMLELEMENT_OFFSETWIDTH)]
    HRESULT offsetWidth([retval, out] LONG *p);

    [propget, id(DISPID_IHTMLELEMENT_OFFSETHEIGHT)]
    HRESULT offsetHeight([retval, out] LONG *p);

    [propget, id(DISPID_IHTMLELEMENT_OFFSETPARENT)]
    HRESULT offsetParent([retval, out] IHTMLElement **p);

    [propput, id(DISPID_IHTMLELEMENT_INNERHTML)]
    HRESULT innerHTML([in] BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_INNERHTML)]
    HRESULT innerHTML([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLELEMENT_INNERTEXT)]
    HRESULT innerText([in] BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_INNERTEXT)]
    HRESULT innerText([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLELEMENT_OUTERHTML)]
    HRESULT outerHTML([in] BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_OUTERHTML)]
    HRESULT outerHTML([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLELEMENT_OUTERTEXT)]
    HRESULT outerText([in] BSTR v);

    [propget, id(DISPID_IHTMLELEMENT_OUTERTEXT)]
    HRESULT outerText([retval, out] BSTR *p);

    [id(DISPID_IHTMLELEMENT_INSERTADJACENTHTML)]
    HRESULT insertAdjacentHTML([in] BSTR where, [in] BSTR html);

    [id(DISPID_IHTMLELEMENT_INSERTADJACENTTEXT)]
    HRESULT insertAdjacentText([in] BSTR where, [in] BSTR text);

    [propget, id(DISPID_IHTMLELEMENT_PARENTTEXTEDIT)]
    HRESULT parentTextEdit([retval, out] IHTMLElement **p);

    [propget, id(DISPID_IHTMLELEMENT_ISTEXTEDIT)]
    HRESULT isTextEdit([retval, out] VARIANT_BOOL *p);

    [id(DISPID_IHTMLELEMENT_CLICK)]
    HRESULT click();

    [propget, id(DISPID_IHTMLELEMENT_FILTERS)]
    HRESULT filters([retval, out] IHTMLFiltersCollection **p);

    [propput, id(DISPID_IHTMLELEMENT_ONDRAGSTART)]
    HRESULT ondragstart([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDRAGSTART)]
    HRESULT ondragstart([retval, out] VARIANT *p);

    [id(DISPID_IHTMLELEMENT_TOSTRING)]
    HRESULT toString([retval, out] BSTR *String);

    [propput, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE)]
    HRESULT onbeforeupdate([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE)]
    HRESULT onbeforeupdate([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE)]
    HRESULT onafterupdate([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE)]
    HRESULT onafterupdate([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT_ONERRORUPDATE)]
    HRESULT onerrorupdate([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONERRORUPDATE)]
    HRESULT onerrorupdate([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT_ONROWEXIT)]
    HRESULT onrowexit([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONROWEXIT)]
    HRESULT onrowexit([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT_ONROWENTER)]
    HRESULT onrowenter([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONROWENTER)]
    HRESULT onrowenter([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED)]
    HRESULT ondatasetchanged([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED)]
    HRESULT ondatasetchanged([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE)]
    HRESULT ondataavailable([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE)]
    HRESULT ondataavailable([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE)]
    HRESULT ondatasetcomplete([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE)]
    HRESULT ondatasetcomplete([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE)]
    HRESULT onfilterchange([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE)]
    HRESULT onfilterchange([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLELEMENT_CHILDREN)]
    HRESULT children([retval, out] IDispatch **p);

    [propget, id(DISPID_IHTMLELEMENT_ALL)]
    HRESULT all([retval, out] IDispatch **p);
}

#define WINE_IHTMLELEMENT_DISPINTERFACE_DECL                            \
    [id(DISPID_IHTMLELEMENT_SETATTRIBUTE)]                              \
    void setAttribute(                                                  \
        [in] BSTR strAttributeName,                                     \
        [in] VARIANT AttValue,                                          \
        [defaultvalue(1), in] LONG lFlags);                             \
                                                                        \
    [id(DISPID_IHTMLELEMENT_GETATTRIBUTE)]                              \
    VARIANT getAttribute(                                               \
        [in] BSTR strAttributeName,                                     \
        [defaultvalue(0), in] LONG lFlags);                             \
                                                                        \
    [id(DISPID_IHTMLELEMENT_REMOVEATTRIBUTE)]                           \
    VARIANT_BOOL removeAttribute(                                       \
        [in] BSTR strAttributeName,                                     \
        [defaultvalue(1), in] LONG lFlags);                             \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable]              \
    void className(BSTR v);                                             \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable]              \
    BSTR className();                                                   \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT_ID), bindable]                     \
    void id(BSTR v);                                                    \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_ID), bindable]                     \
    BSTR id();                                                          \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_TAGNAME)]                          \
    BSTR tagName();                                                     \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_PARENTELEMENT)]                    \
    IHTMLElement *parentElement();                                      \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_STYLE), nonbrowsable]              \
    IHTMLStyle *style();                                                \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable]    \
    void onhelp(VARIANT v);                                             \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable]    \
    VARIANT onhelp();                                                   \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable]   \
    void onclick(VARIANT v);                                            \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable]   \
    VARIANT onclick();                                                  \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable]\
    void ondblclick(VARIANT v);                                         \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable]\
    VARIANT ondblclick();                                               \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable] \
    void onkeydown(VARIANT v);                                          \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable] \
    VARIANT onkeydown();                                                \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable]   \
    void onkeyup(VARIANT v);                                            \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable]   \
    VARIANT onkeyup();                                                  \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable]\
    void onkeypress(VARIANT v);                                         \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable]\
    VARIANT onkeypress();                                               \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable]\
    void onmouseout(VARIANT v);                                         \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable]\
    VARIANT onmouseout();                                               \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable] \
    void onmouseover(VARIANT v);                                        \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable] \
    VARIANT onmouseover();                                              \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable] \
    void onmousemove(VARIANT v);                                        \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable] \
    VARIANT onmousemove();                                              \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable] \
    void onmousedown(VARIANT v);                                        \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable] \
    VARIANT onmousedown();                                              \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable] \
    void onmouseup(VARIANT v);                                          \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable] \
    VARIANT onmouseup();                                                \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_DOCUMENT)] IDispatch* document();  \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable]     \
    void title(BSTR v);                                                 \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable]     \
    BSTR title();                                                       \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable]  \
    void language(BSTR v);                                              \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable]  \
    BSTR language();                                                    \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable] \
    void onselectstart(VARIANT v);                                      \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable] \
    VARIANT onselectstart();                                            \
                                                                        \
    [id(DISPID_IHTMLELEMENT_SCROLLINTOVIEW)]                            \
    void scrollIntoView([optional, in] VARIANT varargStart);            \
                                                                        \
    [id(DISPID_IHTMLELEMENT_CONTAINS)]                                  \
    VARIANT_BOOL contains([in] IHTMLElement* pChild);                   \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_SOURCEINDEX), bindable]            \
    LONG sourceIndex();                                                 \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_RECORDNUMBER)]                     \
    VARIANT recordNumber();                                             \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT_LANG)]                             \
    void lang(BSTR v);                                                  \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_LANG)]                             \
    BSTR lang();                                                        \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_OFFSETLEFT)]                       \
    LONG offsetLeft();                                                  \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_OFFSETTOP)]                        \
    LONG offsetTop();                                                   \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_OFFSETWIDTH)]                      \
    LONG offsetWidth();                                                 \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_OFFSETHEIGHT)]                     \
    LONG offsetHeight();                                                \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_OFFSETPARENT)]                     \
    IHTMLElement* offsetParent();                                       \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT_INNERHTML)]                        \
    void innerHTML(BSTR v);                                             \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_INNERHTML)]                        \
    BSTR innerHTML();                                                   \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT_INNERTEXT)]                        \
    void innerText(BSTR v);                                             \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_INNERTEXT)]                        \
    BSTR innerText();                                                   \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT_OUTERHTML)]                        \
    void outerHTML(BSTR v);                                             \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_OUTERHTML)]                        \
    BSTR outerHTML();                                                   \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT_OUTERTEXT)]                        \
    void outerText(BSTR v);                                             \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_OUTERTEXT)]                        \
    BSTR outerText();                                                   \
                                                                        \
    [id(DISPID_IHTMLELEMENT_INSERTADJACENTHTML)]                        \
    void insertAdjacentHTML(                                            \
        [in] BSTR where,                                                \
        [in] BSTR html);                                                \
                                                                        \
    [id(DISPID_IHTMLELEMENT_INSERTADJACENTTEXT)]                        \
    void insertAdjacentText(                                            \
        [in] BSTR where,                                                \
        [in] BSTR text);                                                \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_PARENTTEXTEDIT)]                   \
    IHTMLElement* parentTextEdit();                                     \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_ISTEXTEDIT)]                       \
    VARIANT_BOOL isTextEdit();                                          \
                                                                        \
    [id(DISPID_IHTMLELEMENT_CLICK)]                                     \
    void click();                                                       \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_FILTERS)]                          \
    IHTMLFiltersCollection* filters();                                  \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable] \
    void ondragstart(VARIANT v);                                        \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable] \
    VARIANT ondragstart();                                              \
                                                                        \
    [id(DISPID_IHTMLELEMENT_TOSTRING)]                                  \
    BSTR toString();                                                    \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable] \
    void onbeforeupdate(VARIANT v);                                     \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable] \
    VARIANT onbeforeupdate();                                           \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable] \
    void onafterupdate(VARIANT v);                                      \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable] \
    VARIANT onafterupdate();                                            \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable] \
    void onerrorupdate(VARIANT v);                                      \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable] \
    VARIANT onerrorupdate();                                            \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable] \
    void onrowexit(VARIANT v);                                          \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable] \
    VARIANT onrowexit();                                                \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable] \
    void onrowenter(VARIANT v);                                         \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable] \
    VARIANT onrowenter();                                               \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable] \
    void ondatasetchanged(VARIANT v);                                   \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable] \
    VARIANT ondatasetchanged();                                         \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable] \
    void ondataavailable(VARIANT v);                                    \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable] \
    VARIANT ondataavailable();                                          \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable] \
    void ondatasetcomplete(VARIANT v);                                  \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable] \
    VARIANT ondatasetcomplete();                                        \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable] \
    void onfilterchange(VARIANT v);                                     \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable] \
    VARIANT onfilterchange();                                           \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_CHILDREN)]                         \
    IDispatch* children();                                              \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT_ALL)]                              \
    IDispatch* all()

/*****************************************************************************
 *    IHTMLElement2 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f434-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLElement2 : IDispatch
{
    [propget, id(DISPID_IHTMLELEMENT2_SCOPENAME)]
    HRESULT scopeName([retval, out] BSTR *p);

    [id(DISPID_IHTMLELEMENT2_SETCAPTURE)]
    HRESULT setCapture([defaultvalue(-1), in] VARIANT_BOOL containerCapture);

    [id(DISPID_IHTMLELEMENT2_RELEASECAPTURE)]
    HRESULT releaseCapture();

    [propput, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable]
    HRESULT onlosecapture([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable]
    HRESULT onlosecapture([retval, out] VARIANT *p);

    [id(DISPID_IHTMLELEMENT2_COMPONENTFROMPOINT)]
    HRESULT componentFromPoint(
        [in] LONG x,
        [in] LONG y,
        [retval, out] BSTR *component);

    [id(DISPID_IHTMLELEMENT2_DOSCROLL)]
    HRESULT doScroll([optional, in] VARIANT component);

    [propput, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable]
    HRESULT onscroll([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable]
    HRESULT onscroll([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable]
    HRESULT ondrag([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable]
    HRESULT ondrag([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable]
    HRESULT ondragend([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable]
    HRESULT ondragend([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable]
    HRESULT ondragenter([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable]
    HRESULT ondragenter([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable]
    HRESULT ondragover([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable]
    HRESULT ondragover([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable]
    HRESULT ondragleave([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable]
    HRESULT ondragleave([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable]
    HRESULT ondrop([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable]
    HRESULT ondrop([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable]
    HRESULT onbeforecut([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable]
    HRESULT onbeforecut([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable]
    HRESULT oncut([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable]
    HRESULT oncut([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable]
    HRESULT onbeforecopy([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable]
    HRESULT onbeforecopy([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable]
    HRESULT oncopy([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable]
    HRESULT oncopy([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable]
    HRESULT onbeforepaste([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable]
    HRESULT onbeforepaste([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable]
    HRESULT onpaste([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable]
    HRESULT onpaste([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLELEMENT2_CURRENTSTYLE), nonbrowsable]
    HRESULT currentStyle([retval, out] IHTMLCurrentStyle **p);

    [propput, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable]
    HRESULT onpropertychange([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable]
    HRESULT onpropertychange([retval, out] VARIANT *p);

    [id(DISPID_IHTMLELEMENT2_GETCLIENTRECTS)]
    HRESULT getClientRects([retval, out] IHTMLRectCollection **pRectCol);

    [id(DISPID_IHTMLELEMENT2_GETBOUNDINGCLIENTRECT)]
    HRESULT getBoundingClientRect([retval, out] IHTMLRect **pRect);

    [id(DISPID_IHTMLELEMENT2_SETEXPRESSION)]
    HRESULT setExpression(
        [in] BSTR propname,
        [in] BSTR expression,
        [defaultvalue(""), in] BSTR language);

    [id(DISPID_IHTMLELEMENT2_GETEXPRESSION)]
    HRESULT getExpression(
        [in] BSTR propname,
        [retval, out] VARIANT *expression);

    [id(DISPID_IHTMLELEMENT2_REMOVEEXPRESSION)]
    HRESULT removeExpression(
        [in] BSTR propname,
        [retval, out] VARIANT_BOOL *pfSuccess);

    [propput, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable]
    HRESULT tabIndex([in] short v);

    [propget, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable]
    HRESULT tabIndex([retval, out] short *p);

    [id(DISPID_IHTMLELEMENT2_FOCUS)]
    HRESULT focus();

    [propput, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable]
    HRESULT accessKey([in] BSTR v);

    [propget, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable]
    HRESULT accessKey([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable]
    HRESULT onblur([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable]
    HRESULT onblur([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable]
    HRESULT onfocus([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable]
    HRESULT onfocus([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable]
    HRESULT onresize([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable]
    HRESULT onresize([retval, out] VARIANT *p);

    [id(DISPID_IHTMLELEMENT2_BLUR)]
    HRESULT blur();

    [id(DISPID_IHTMLELEMENT2_ADDFILTER)]
    HRESULT addFilter([in] IUnknown *pUnk);

    [id(DISPID_IHTMLELEMENT2_REMOVEFILTER)]
    HRESULT removeFilter([in] IUnknown *pUnk);

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTHEIGHT), displaybind, bindable]
    HRESULT clientHeight([retval, out] LONG *p);

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTWIDTH), displaybind, bindable]
    HRESULT clientWidth([retval, out] LONG *p);

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTTOP), displaybind, bindable]
    HRESULT clientTop([retval, out] LONG *p);

    [propget, id(DISPID_IHTMLELEMENT2_CLIENTLEFT), displaybind, bindable]
    HRESULT clientLeft([retval, out] LONG *p);

    [id(DISPID_IHTMLELEMENT2_ATTACHEVENT)]
    HRESULT attachEvent(
        [in] BSTR event,
        [in] IDispatch *pDisp,
        [retval, out] VARIANT_BOOL *pfResult);

    [id(DISPID_IHTMLELEMENT2_DETACHEVENT)]
    HRESULT detachEvent(
        [in] BSTR event,
        [in] IDispatch *pDisp);

    [propget, id(DISPID_IHTMLELEMENT2_READYSTATE)]
    HRESULT readyState([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable]
    HRESULT onreadystatechange([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable]
    HRESULT onreadystatechange([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable]
    HRESULT onrowsdelete([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable]
    HRESULT onrowsdelete([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable]
    HRESULT onrowsinserted([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable]
    HRESULT onrowsinserted([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable]
    HRESULT oncellchange([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable]
    HRESULT oncellchange([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable]
    HRESULT dir([in] BSTR v);

    [propget, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable]
    HRESULT dir([retval, out] BSTR *p);

    [id(DISPID_IHTMLELEMENT2_CREATECONTROLRANGE)]
    HRESULT createControlRange([retval, out] IDispatch **range);

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLHEIGHT), displaybind, bindable]
    HRESULT scrollHeight([retval, out] LONG *p);

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLWIDTH), displaybind, bindable]
    HRESULT scrollWidth([retval, out] LONG *p);

    [propput, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable]
    HRESULT scrollTop([in] LONG v);

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable]
    HRESULT scrollTop([retval, out] LONG *p);

    [propput, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable]
    HRESULT scrollLeft([in] LONG v);

    [propget, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable]
    HRESULT scrollLeft([retval, out] LONG *p);

    [id(DISPID_IHTMLELEMENT2_CLEARATTRIBUTES)]
    HRESULT clearAttributes();

    [id(DISPID_IHTMLELEMENT2_MERGEATTRIBUTES)]
    HRESULT mergeAttributes([in] IHTMLElement *mergeThis);

    [propput, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable]
    HRESULT oncontextmenu([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable]
    HRESULT oncontextmenu([retval, out] VARIANT *p);

    [id(DISPID_IHTMLELEMENT2_INSERTADJACENTELEMENT)]
    HRESULT insertAdjacentElement(
        [in] BSTR where,
        [in] IHTMLElement *insertedElement,
        [retval, out] IHTMLElement **inserted);

    [id(DISPID_IHTMLELEMENT2_APPLYELEMENT)]
    HRESULT applyElement(
        [in] IHTMLElement *apply,
        [in] BSTR where,
        [retval, out] IHTMLElement **applied);

    [id(DISPID_IHTMLELEMENT2_GETADJACENTTEXT)]
    HRESULT getAdjacentText(
        [in] BSTR where,
        [retval, out] BSTR *text);

    [id(DISPID_IHTMLELEMENT2_REPLACEADJACENTTEXT)]
    HRESULT replaceAdjacentText(
        [in] BSTR where,
        [in] BSTR newText,
        [retval, out] BSTR *oldText);

    [propget, id(DISPID_IHTMLELEMENT2_CANHAVECHILDREN)]
    HRESULT canHaveChildren([retval, out] VARIANT_BOOL *p);

    [id(DISPID_IHTMLELEMENT2_ADDBEHAVIOR)]
    HRESULT addBehavior(
        [in] BSTR bstrUrl,
        [optional, in] VARIANT *pvarFactory,
        [retval, out] LONG *pCookie);

    [id(DISPID_IHTMLELEMENT2_REMOVEBEHAVIOR)]
    HRESULT removeBehavior(
        [in] LONG cookie,
        [retval, out] VARIANT_BOOL *pfResult);

    [propget, id(DISPID_IHTMLELEMENT2_RUNTIMESTYLE), nonbrowsable]
    HRESULT runtimeStyle([retval, out] IHTMLStyle **p);

    [propget, id(DISPID_IHTMLELEMENT2_BEHAVIORURNS)]
    HRESULT behaviorUrns([retval, out] IDispatch **p);

    [propput, id(DISPID_IHTMLELEMENT2_TAGURN)]
    HRESULT tagUrn([in] BSTR v);

    [propget, id(DISPID_IHTMLELEMENT2_TAGURN)]
    HRESULT tagUrn([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable]
    HRESULT onbeforeeditfocus([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable]
    HRESULT onbeforeeditfocus([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLELEMENT2_READYSTATEVALUE), hidden, restricted]
    HRESULT readyStateValue([retval, out] LONG *p);

    [id(DISPID_IHTMLELEMENT2_GETELEMENTSBYTAGNAME)]
    HRESULT getElementsByTagName(
        [in] BSTR v,
        [retval, out] IHTMLElementCollection **pelColl);
}

#define WINE_IHTMLELEMENT2_DISPINTERFACE_DECL                           \
    [propget, id(DISPID_IHTMLELEMENT2_SCOPENAME)]                       \
    BSTR scopeName();                                                   \
                                                                        \
    [id(DISPID_IHTMLELEMENT2_SETCAPTURE)]                               \
    void setCapture([defaultvalue(-1), in] VARIANT_BOOL containerCapture); \
                                                                        \
    [id(DISPID_IHTMLELEMENT2_RELEASECAPTURE)]                           \
    void releaseCapture();                                              \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable] \
    void onlosecapture(VARIANT v);                                      \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable] \
    VARIANT onlosecapture();                                            \
                                                                        \
    [id(DISPID_IHTMLELEMENT2_COMPONENTFROMPOINT)]                       \
    BSTR componentFromPoint([in] LONG x,[in] LONG y);                   \
                                                                        \
    [id(DISPID_IHTMLELEMENT2_DOSCROLL)]                                 \
    void doScroll([optional, in] VARIANT component);                    \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable] \
    void onscroll(VARIANT v);                                           \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable] \
    VARIANT onscroll();                                                 \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable]   \
    void ondrag(VARIANT v);                                             \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable]   \
    VARIANT ondrag();                                                   \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable] \
    void ondragend(VARIANT v);                                          \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable] \
    VARIANT ondragend();                                                \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable] \
    void ondragenter(VARIANT v);                                        \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable] \
    VARIANT ondragenter();                                              \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable] \
    void ondragover(VARIANT v);                                         \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable] \
    VARIANT ondragover();                                               \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable] \
    void ondragleave(VARIANT v);                                        \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable] \
    VARIANT ondragleave();                                              \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable]   \
    void ondrop(VARIANT v);                                             \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable]   \
    VARIANT ondrop();                                                   \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable] \
    void onbeforecut(VARIANT v);                                        \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable] \
    VARIANT onbeforecut();                                              \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable]    \
    void oncut(VARIANT v);                                              \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable]    \
    VARIANT oncut();                                                    \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable] \
    void onbeforecopy(VARIANT v);                                       \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable] \
    VARIANT onbeforecopy();                                             \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable]   \
    void oncopy(VARIANT v);                                             \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable]   \
    VARIANT oncopy();                                                   \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable] \
    void onbeforepaste(VARIANT v);                                      \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable] \
    VARIANT onbeforepaste();                                            \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable]  \
    void onpaste(VARIANT v);                                            \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable]  \
    VARIANT onpaste();                                                  \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT2_CURRENTSTYLE), nonbrowsable]      \
    IHTMLCurrentStyle* currentStyle();                                  \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable] \
    void onpropertychange(VARIANT v);                                   \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable] \
    VARIANT onpropertychange();                                         \
                                                                        \
    [id(DISPID_IHTMLELEMENT2_GETCLIENTRECTS)]                           \
    IHTMLRectCollection* getClientRects();                              \
                                                                        \
    [id(DISPID_IHTMLELEMENT2_GETBOUNDINGCLIENTRECT)]                    \
    IHTMLRect* getBoundingClientRect();                                 \
                                                                        \
    [id(DISPID_IHTMLELEMENT2_SETEXPRESSION)]                            \
    void setExpression(                                                 \
        [in] BSTR propname,                                             \
        [in] BSTR expr,                                                 \
        [defaultvalue(""), in] BSTR lang);                              \
                                                                        \
    [id(DISPID_IHTMLELEMENT2_GETEXPRESSION)]                            \
    VARIANT getExpression([in] BSTR propname);                          \
                                                                        \
    [id(DISPID_IHTMLELEMENT2_REMOVEEXPRESSION)]                         \
    VARIANT_BOOL removeExpression([in] BSTR propname);                  \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable] \
    void tabIndex(short v);                                             \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable] \
    short tabIndex();                                                   \
                                                                        \
    [id(DISPID_IHTMLELEMENT2_FOCUS)]                                    \
    void focus();                                                       \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable]\
    void accessKey(BSTR v);                                             \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable]\
    BSTR accessKey();                                                   \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable]   \
    void onblur(VARIANT v);                                             \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable]   \
    VARIANT onblur();                                                   \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable]  \
    void onfocus(VARIANT v);                                            \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable]  \
    VARIANT onfocus();                                                  \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable] \
    void onresize(VARIANT v);                                           \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable] \
    VARIANT onresize();                                                 \
                                                                        \
    [id(DISPID_IHTMLELEMENT2_BLUR)]                                     \
    void blur();                                                        \
                                                                        \
    [id(DISPID_IHTMLELEMENT2_ADDFILTER)]                                \
    void addFilter([in] IUnknown* pUnk);                                \
                                                                        \
    [id(DISPID_IHTMLELEMENT2_REMOVEFILTER)]                             \
    void removeFilter([in] IUnknown* pUnk);                             \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT2_CLIENTHEIGHT), displaybind, bindable] \
    LONG clientHeight();                                                \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT2_CLIENTWIDTH), displaybind, bindable] \
    LONG clientWidth();                                                 \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT2_CLIENTTOP), displaybind, bindable] \
    LONG clientTop();                                                   \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT2_CLIENTLEFT), displaybind, bindable] \
    LONG clientLeft();                                                  \
                                                                        \
    [id(DISPID_IHTMLELEMENT2_ATTACHEVENT)]                              \
    VARIANT_BOOL attachEvent(                                           \
            [in] BSTR event,                                            \
            [in] IDispatch* pDisp);                                     \
                                                                        \
    [id(DISPID_IHTMLELEMENT2_DETACHEVENT)]                              \
    void detachEvent(                                                   \
            [in] BSTR event,                                            \
            [in] IDispatch* pDisp);                                     \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT2_READYSTATE)] VARIANT readyState(); \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable] \
    void onreadystatechange(VARIANT v);                                 \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable] \
    VARIANT onreadystatechange();                                       \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable] \
    void onrowsdelete(VARIANT v);                                       \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable] \
    VARIANT onrowsdelete();                                             \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable] \
    void onrowsinserted(VARIANT v);                                     \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable] \
    VARIANT onrowsinserted();                                           \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable] \
    void oncellchange(VARIANT v);                                       \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable] \
    VARIANT oncellchange();                                             \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable]      \
    void dir(BSTR v);                                                   \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable]      \
    BSTR dir();                                                         \
                                                                        \
    [id(DISPID_IHTMLELEMENT2_CREATECONTROLRANGE)]                       \
    IDispatch* createControlRange();                                    \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT2_SCROLLHEIGHT), displaybind, bindable] \
    LONG scrollHeight();                                                \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT2_SCROLLWIDTH), displaybind, bindable] \
    LONG scrollWidth();                                                 \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable]\
    void scrollTop(LONG v);                                             \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable]\
    LONG scrollTop();                                                   \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable] \
    void scrollLeft(LONG v);                                            \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable] \
    LONG scrollLeft();                                                  \
                                                                        \
    [id(DISPID_IHTMLELEMENT2_CLEARATTRIBUTES)]                          \
    void clearAttributes();                                             \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable] \
    void oncontextmenu(VARIANT v);                                      \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable] \
    VARIANT oncontextmenu();                                            \
                                                                        \
    [id(DISPID_IHTMLELEMENT2_INSERTADJACENTELEMENT)]                    \
    IHTMLElement* insertAdjacentElement(                                \
        [in] BSTR where,                                                \
        [in] IHTMLElement* insertedElement);                            \
                                                                        \
    [id(DISPID_IHTMLELEMENT2_APPLYELEMENT)]                             \
    IHTMLElement* applyElement([in] IHTMLElement* apply,[in] BSTR where); \
                                                                        \
    [id(DISPID_IHTMLELEMENT2_GETADJACENTTEXT)]                          \
    BSTR getAdjacentText([in] BSTR where);                              \
                                                                        \
    [id(DISPID_IHTMLELEMENT2_REPLACEADJACENTTEXT)]                      \
    BSTR replaceAdjacentText([in] BSTR where,[in] BSTR newText);        \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT2_CANHAVECHILDREN)]                 \
    VARIANT_BOOL canHaveChildren();                                     \
                                                                        \
    [id(DISPID_IHTMLELEMENT2_ADDBEHAVIOR)]                              \
    LONG addBehavior([in] BSTR bstrUrl,[optional, in] VARIANT* pvarFactory); \
                                                                        \
    [id(DISPID_IHTMLELEMENT2_REMOVEBEHAVIOR)]                           \
    VARIANT_BOOL removeBehavior([in] LONG cookie);                      \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT2_RUNTIMESTYLE), nonbrowsable]      \
    IHTMLStyle* runtimeStyle();                                         \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT2_BEHAVIORURNS)]                    \
    IDispatch* behaviorUrns();                                          \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT2_TAGURN)]                          \
    void tagUrn(BSTR v);                                                \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT2_TAGURN)]                          \
    BSTR tagUrn();                                                      \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable] \
    void onbeforeeditfocus(VARIANT v);                                  \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable] \
    VARIANT onbeforeeditfocus();                                        \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT2_READYSTATEVALUE), hidden, restricted] \
    LONG readyStateValue();                                             \
                                                                        \
    [id(DISPID_IHTMLELEMENT2_GETELEMENTSBYTAGNAME)]                     \
    IHTMLElementCollection* getElementsByTagName([in] BSTR v)

/*****************************************************************************
 *    IHTMLElement3 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f673-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLElement3 : IDispatch
{
    [id(DISPID_IHTMLELEMENT3_MERGEATTRIBUTES)] HRESULT mergeAttributes([in]
    IHTMLElement* mergeThis,[optional, in] VARIANT* pvarFlags);

    [propget, id(DISPID_IHTMLELEMENT3_ISMULTILINE)]
    HRESULT isMultiLine([retval, out] VARIANT_BOOL * p);

    [propget, id(DISPID_IHTMLELEMENT3_CANHAVEHTML)]
    HRESULT canHaveHTML([retval, out] VARIANT_BOOL * p);

    [propput, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable]
    HRESULT onlayoutcomplete([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable]
    HRESULT onlayoutcomplete([retval, out] VARIANT * p);

    [propput, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable]
    HRESULT onpage([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable]
    HRESULT onpage([retval, out] VARIANT * p);

    [propput, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable]
    HRESULT inflateBlock([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable]
    HRESULT inflateBlock([retval, out] VARIANT_BOOL * p);

    [propput, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable]
    HRESULT onbeforedeactivate([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable]
    HRESULT onbeforedeactivate([retval, out] VARIANT * p);

    [id(DISPID_IHTMLELEMENT3_SETACTIVE)] HRESULT setActive();

    [propput, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable]
    HRESULT contentEditable([in] BSTR v);

    [propget, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable]
    HRESULT contentEditable([retval, out] BSTR * p);

    [propget, id(DISPID_IHTMLELEMENT3_ISCONTENTEDITABLE)]
    HRESULT isContentEditable([retval, out] VARIANT_BOOL * p);

    [propput, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable]
    HRESULT hideFocus([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable]
    HRESULT hideFocus([retval, out] VARIANT_BOOL * p);

    [propput, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable]
    HRESULT disabled([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable]
    HRESULT disabled([retval, out] VARIANT_BOOL * p);

    [propget, id(DISPID_IHTMLELEMENT3_ISDISABLED)]
    HRESULT isDisabled([retval, out] VARIANT_BOOL * p);

    [propput, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable]
    HRESULT onmove([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable]
    HRESULT onmove([retval, out] VARIANT * p);

    [propput, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable]
    HRESULT oncontrolselect([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable]
    HRESULT oncontrolselect([retval, out] VARIANT * p);

    [id(DISPID_IHTMLELEMENT3_FIREEVENT)]
    HRESULT fireEvent(
        [in] BSTR bstrEventName,
        [optional, in] VARIANT* pvarEventObject,
        [retval, out] VARIANT_BOOL* pfCancelled);

    [propput, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable]
    HRESULT onresizestart([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable]
    HRESULT onresizestart([retval, out] VARIANT * p);

    [propput, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable]
    HRESULT onresizeend([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable]
    HRESULT onresizeend([retval, out] VARIANT * p);

    [propput, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable]
    HRESULT onmovestart([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable]
    HRESULT onmovestart([retval, out] VARIANT * p);

    [propput, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable]
    HRESULT onmoveend([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable]
    HRESULT onmoveend([retval, out] VARIANT * p);

    [propput, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable]
    HRESULT onmouseenter([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable]
    HRESULT onmouseenter([retval, out] VARIANT * p);

    [propput, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable]
    HRESULT onmouseleave([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable]
    HRESULT onmouseleave([retval, out] VARIANT * p);

    [propput, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable]
    HRESULT onactivate([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable]
    HRESULT onactivate([retval, out] VARIANT * p);

    [propput, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable]
    HRESULT ondeactivate([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable]
    HRESULT ondeactivate([retval, out] VARIANT * p);

    [id(DISPID_IHTMLELEMENT3_DRAGDROP)] HRESULT dragDrop([retval, out]
    VARIANT_BOOL* pfRet);

    [propget, id(DISPID_IHTMLELEMENT3_GLYPHMODE), hidden, restricted, nonbrowsable]
    HRESULT glyphMode([retval, out] LONG * p);
}

#define WINE_IHTMLELEMENT3_DISPINTERFACE_DECL                           \
                                                                        \
    [id(DISPID_IHTMLELEMENT3_MERGEATTRIBUTES)]                          \
    void mergeAttributes(                                               \
            [in] IHTMLElement* mergeThis,                               \
            [optional, in] VARIANT* pvarFlags);                         \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT3_ISMULTILINE)]                     \
    VARIANT_BOOL isMultiLine();                                         \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT3_CANHAVEHTML)]                     \
    VARIANT_BOOL canHaveHTML();                                         \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable] \
    void onlayoutcomplete(VARIANT v);                                   \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable] \
    VARIANT onlayoutcomplete();                                         \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable]   \
    void onpage(VARIANT v);                                             \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable]   \
    VARIANT onpage();                                                   \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable] \
    void inflateBlock(VARIANT_BOOL v);                                  \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable] \
    VARIANT_BOOL inflateBlock();                                        \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable] \
    void onbeforedeactivate(VARIANT v);                                 \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable] \
    VARIANT onbeforedeactivate();                                       \
                                                                        \
    [id(DISPID_IHTMLELEMENT3_SETACTIVE)]                                \
    void setActive();                                                   \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable] \
    void contentEditable(BSTR v);                                       \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable] \
    BSTR contentEditable();                                             \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT3_ISCONTENTEDITABLE)]               \
    VARIANT_BOOL isContentEditable();                                   \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable]\
    void hideFocus(VARIANT_BOOL v);                                     \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable]\
    VARIANT_BOOL hideFocus();                                           \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable] \
    void disabled(VARIANT_BOOL v);                                      \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable] \
    VARIANT_BOOL disabled();                                            \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT3_ISDISABLED)]                      \
    VARIANT_BOOL isDisabled();                                          \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable]   \
    void onmove(VARIANT v);                                             \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable]   \
    VARIANT onmove();                                                   \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable] \
    void oncontrolselect(VARIANT v);                                    \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable] \
    VARIANT oncontrolselect();                                          \
                                                                        \
    [id(DISPID_IHTMLELEMENT3_FIREEVENT)]                                \
    VARIANT_BOOL fireEvent(                                             \
        [in] BSTR bstrEventName,                                        \
        [optional, in] VARIANT* pvarEventObject);                       \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable] \
    void onresizestart(VARIANT v);                                      \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable] \
    VARIANT onresizestart();                                            \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable] \
    void onresizeend(VARIANT v);                                        \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable] \
    VARIANT onresizeend();                                              \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable] \
    void onmovestart(VARIANT v);                                        \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable] \
    VARIANT onmovestart();                                              \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable]\
    void onmoveend(VARIANT v);                                          \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable]\
    VARIANT onmoveend();                                                \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable] \
    void onmouseenter(VARIANT v);                                       \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable] \
    VARIANT onmouseenter();                                             \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable] \
    void onmouseleave(VARIANT v);                                       \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable] \
    VARIANT onmouseleave();                                             \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable] \
    void onactivate(VARIANT v);                                         \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable] \
    VARIANT onactivate();                                               \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable] \
    void ondeactivate(VARIANT v);                                       \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable] \
    VARIANT ondeactivate();                                             \
                                                                        \
    [id(DISPID_IHTMLELEMENT3_DRAGDROP)]                                 \
    VARIANT_BOOL dragDrop();                                            \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT3_GLYPHMODE), hidden, restricted, nonbrowsable] \
    LONG glyphMode()

/*****************************************************************************
 *    IHTMLElement4 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f80f-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLElement4 : IDispatch
{
    [propput, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable]
    HRESULT onmousewheel([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable]
    HRESULT onmousewheel([retval, out] VARIANT * p);

    [id(DISPID_IHTMLELEMENT4_NORMALIZE)]
    HRESULT normalize();

    [id(DISPID_IHTMLELEMENT4_GETATTRIBUTENODE)]
    HRESULT getAttributeNode([in] BSTR bstrname,
        [retval, out] IHTMLDOMAttribute** ppAttribute);

    [id(DISPID_IHTMLELEMENT4_SETATTRIBUTENODE)]
    HRESULT setAttributeNode(
        [in] IHTMLDOMAttribute* pattr,
        [retval, out] IHTMLDOMAttribute** ppretAttribute);

    [id(DISPID_IHTMLELEMENT4_REMOVEATTRIBUTENODE)]
    HRESULT removeAttributeNode(
        [in] IHTMLDOMAttribute* pattr,
        [retval, out] IHTMLDOMAttribute** ppretAttribute);

    [propput, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable]
    HRESULT onbeforeactivate([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable]
    HRESULT onbeforeactivate([retval, out] VARIANT * p);

    [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable]
    HRESULT onfocusin([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable]
    HRESULT onfocusin([retval, out] VARIANT * p);

    [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable]
    HRESULT onfocusout([in] VARIANT v);

    [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable]
    HRESULT onfocusout([retval, out] VARIANT * p);
}

#define WINE_IHTMLELEMENT4_DISPINTERFACE_DECL                           \
    [propput, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable] \
    void onmousewheel(VARIANT v);                                       \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable] \
    VARIANT onmousewheel();                                             \
                                                                        \
    [id(DISPID_IHTMLELEMENT4_NORMALIZE)]                                \
    void normalize();                                                   \
                                                                        \
    [id(DISPID_IHTMLELEMENT4_GETATTRIBUTENODE)]                         \
    IHTMLDOMAttribute* getAttributeNode([in] BSTR bstrname);            \
                                                                        \
    [id(DISPID_IHTMLELEMENT4_SETATTRIBUTENODE)]                         \
    IHTMLDOMAttribute* setAttributeNode([in] IHTMLDOMAttribute* pattr); \
                                                                        \
    [id(DISPID_IHTMLELEMENT4_REMOVEATTRIBUTENODE)]                      \
    IHTMLDOMAttribute* removeAttributeNode([in] IHTMLDOMAttribute* pattr); \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable] \
    void onbeforeactivate(VARIANT v);                                   \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable] \
    VARIANT onbeforeactivate();                                         \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable]\
    void onfocusin(VARIANT v);                                          \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable]\
    VARIANT onfocusin();                                                \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable] \
    void onfocusout(VARIANT v);                                         \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable] \
    VARIANT onfocusout()

#define WINE_IELEMENTSELECTOR_DISPINTERFACE_DECL                \
    [id(DISPID_IELEMENTSELECTOR_QUERYSELECTOR)]                 \
    IHTMLElement *querySelector([in] BSTR v);                   \
                                                                \
    [id(DISPID_IELEMENTSELECTOR_QUERYSELECTORALL)]              \
    IHTMLDOMChildrenCollection *querySelectorAll([in] BSTR v)

/*****************************************************************************
 *    IHTMLUniqueName interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f4d0-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLUniqueName : IDispatch
{
    [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUENUMBER), hidden]
    HRESULT uniqueNumber([retval, out] LONG * p);

    [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUEID), hidden]
    HRESULT uniqueID([retval, out] BSTR * p);
}

#define WINE_IHTMLUNIQUENAME_DISPINTERFACE_DECL                 \
    [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUENUMBER), hidden]  \
    LONG uniqueNumber();                                        \
                                                                \
    [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUEID), hidden]      \
    BSTR uniqueID()

#define WINE_IHTMLELEMENT5_DISPINTERFACE_DECL                           \
    [id(DISPID_IHTMLELEMENT5_IE8_GETATTRIBUTENODE)]                     \
    IHTMLDOMAttribute2 *ie8_getAttributeNode([in] BSTR bstrname);       \
                                                                        \
    [id(DISPID_IHTMLELEMENT5_IE8_SETATTRIBUTENODE)]                     \
    IHTMLDOMAttribute2 *ie8_setAttributeNode([in] IHTMLDOMAttribute2 *pattr); \
                                                                        \
    [id(DISPID_IHTMLELEMENT5_IE8_REMOVEATTRIBUTENODE)]                  \
    IHTMLDOMAttribute2 *ie8_removeAttributeNode([in] IHTMLDOMAttribute2 *pattr); \
                                                                        \
    [id(DISPID_IHTMLELEMENT5_HASATTRIBUTE)]                             \
    VARIANT_BOOL hasAttribute([in] BSTR name);                          \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT5_ROLE), displaybind, bindable]     \
    void role(BSTR v);                                                  \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT5_ROLE), displaybind, bindable]     \
    BSTR role();                                                        \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT5_ARIABUSY), displaybind, bindable] \
    void ariaBusy(BSTR v);                                              \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT5_ARIABUSY), displaybind, bindable] \
    BSTR ariaBusy();                                                    \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT5_ARIACHECKED), displaybind, bindable] \
    void ariaChecked(BSTR v);                                           \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT5_ARIACHECKED), displaybind, bindable] \
    BSTR ariaChecked();                                                 \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT5_ARIADISABLED), displaybind, bindable] \
    void ariaDisabled(BSTR v);                                          \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT5_ARIADISABLED), displaybind, bindable] \
    BSTR ariaDisabled();                                                \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT5_ARIAEXPANDED), displaybind, bindable] \
    void ariaExpanded(BSTR v);                                          \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT5_ARIAEXPANDED), displaybind, bindable] \
    BSTR ariaExpanded();                                                \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT5_ARIAHASPOPUP), displaybind, bindable]\
    void ariaHaspopup(BSTR v);                                          \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT5_ARIAHASPOPUP), displaybind, bindable] \
    BSTR ariaHaspopup();                                                \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT5_ARIAHIDDEN), displaybind, bindable] \
    void ariaHidden(BSTR v);                                            \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT5_ARIAHIDDEN), displaybind, bindable] \
    BSTR ariaHidden();                                                  \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT5_ARIAINVALID), displaybind, bindable] \
    void ariaInvalid(BSTR v);                                           \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT5_ARIAINVALID), displaybind, bindable] \
    BSTR ariaInvalid();                                                 \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT5_ARIAMULTISELECTABLE), displaybind, bindable] \
    void ariaMultiselectable(BSTR v);                                   \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT5_ARIAMULTISELECTABLE), displaybind, bindable] \
    BSTR ariaMultiselectable();                                         \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT5_ARIAPRESSED), displaybind, bindable] \
    void ariaPressed(BSTR v);                                           \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT5_ARIAPRESSED), displaybind, bindable] \
    BSTR ariaPressed();                                                 \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT5_ARIAREADONLY), displaybind, bindable] \
    void ariaReadonly(BSTR v);                                          \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT5_ARIAREADONLY), displaybind, bindable] \
    BSTR ariaReadonly();                                                \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT5_ARIAREQUIRED), displaybind, bindable] \
    void ariaRequired(BSTR v);                                          \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT5_ARIAREQUIRED), displaybind, bindable] \
    BSTR ariaRequired();                                                \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT5_ARIASECRET), displaybind, bindable] \
    void ariaSecret(BSTR v);                                            \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT5_ARIASECRET), displaybind, bindable] \
    BSTR ariaSecret();                                                  \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT5_ARIASELECTED), displaybind, bindable] \
    void ariaSelected(BSTR v);                                          \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT5_ARIASELECTED), displaybind, bindable] \
    BSTR ariaSelected();                                                \
                                                                        \
    [id(DISPID_IHTMLELEMENT5_IE8_GETATTRIBUTE)]                         \
    VARIANT ie8_getAttribute([in] BSTR strAttributeName);               \
                                                                        \
    [id(DISPID_IHTMLELEMENT5_IE8_SETATTRIBUTE)]                         \
    void ie8_setAttribute([in] BSTR strAttributeName,[in] VARIANT AttributeValue); \
                                                                        \
    [id(DISPID_IHTMLELEMENT5_IE8_REMOVEATTRIBUTE)]                      \
    VARIANT_BOOL ie8_removeAttribute([in] BSTR strAttributeName);       \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT5_IE8_ATTRIBUTES)]                  \
    IHTMLAttributeCollection3 *ie8_attributes();                        \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT5_ARIAVALUENOW), displaybind, bindable] \
    void ariaValuenow(BSTR v);                                          \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT5_ARIAVALUENOW), displaybind, bindable] \
    BSTR ariaValuenow();                                                \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT5_ARIAPOSINSET), displaybind, bindable] \
    void ariaPosinset(short v);                                         \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT5_ARIAPOSINSET), displaybind, bindable] \
    short ariaPosinset();                                               \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT5_ARIASETSIZE), displaybind, bindable] \
    void ariaSetsize(short v);                                          \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT5_ARIASETSIZE), displaybind, bindable] \
    short ariaSetsize();                                                \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT5_ARIALEVEL), displaybind, bindable]\
    void ariaLevel(short v);                                            \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT5_ARIALEVEL), displaybind, bindable]\
    short ariaLevel();                                                  \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT5_ARIAVALUEMIN), displaybind, bindable] \
    void ariaValuemin(BSTR v);                                          \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT5_ARIAVALUEMIN), displaybind, bindable] \
    BSTR ariaValuemin();                                                \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT5_ARIAVALUEMAX), displaybind, bindable] \
    void ariaValuemax(BSTR v);                                          \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT5_ARIAVALUEMAX), displaybind, bindable] \
    BSTR ariaValuemax();                                                \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT5_ARIACONTROLS), displaybind, bindable] \
    void ariaControls(BSTR v);                                          \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT5_ARIACONTROLS), displaybind, bindable] \
    BSTR ariaControls();                                                \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT5_ARIADESCRIBEDBY), displaybind, bindable] \
    void ariaDescribedby(BSTR v);                                       \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT5_ARIADESCRIBEDBY), displaybind, bindable] \
    BSTR ariaDescribedby();                                             \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT5_ARIAFLOWTO), displaybind, bindable] \
    void ariaFlowto(BSTR v);                                            \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT5_ARIAFLOWTO), displaybind, bindable] \
    BSTR ariaFlowto();                                                  \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT5_ARIALABELLEDBY), displaybind, bindable] \
    void ariaLabelledby(BSTR v);                                        \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT5_ARIALABELLEDBY), displaybind, bindable] \
    BSTR ariaLabelledby();                                              \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT5_ARIAACTIVEDESCENDANT), displaybind, bindable] \
    void ariaActivedescendant(BSTR v);                                  \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT5_ARIAACTIVEDESCENDANT), displaybind, bindable] \
    BSTR ariaActivedescendant();                                        \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT5_ARIAOWNS), displaybind, bindable] \
    void ariaOwns(BSTR v);                                              \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT5_ARIAOWNS), displaybind, bindable] \
    BSTR ariaOwns();                                                    \
                                                                        \
    [id(DISPID_IHTMLELEMENT5_HASATTRIBUTES)]                            \
    VARIANT_BOOL hasAttributes();                                       \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT5_ARIALIVE), displaybind, bindable] \
    void ariaLive(BSTR v);                                              \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT5_ARIALIVE), displaybind, bindable] \
    BSTR ariaLive();                                                    \
                                                                        \
    [propput, id(DISPID_IHTMLELEMENT5_ARIARELEVANT), displaybind, bindable] \
    void ariaRelevant(BSTR v);                                          \
                                                                        \
    [propget, id(DISPID_IHTMLELEMENT5_ARIARELEVANT), displaybind, bindable] \
    BSTR ariaRelevant()

[
    odl,
    oleautomation,
    dual,
    uuid(3050f3f2-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLDatabinding : IDispatch
{
    [propput, id(DISPID_IHTMLDATABINDING_DATAFLD)]
    HRESULT dataFld([in] BSTR v);

    [propget, id(DISPID_IHTMLDATABINDING_DATAFLD)]
    HRESULT dataFld([retval, out] BSTR * p);

    [propput, id(DISPID_IHTMLDATABINDING_DATASRC)]
    HRESULT dataSrc([in] BSTR v);

    [propget, id(DISPID_IHTMLDATABINDING_DATASRC)]
    HRESULT dataSrc([retval, out] BSTR * p);

    [propput, id(DISPID_IHTMLDATABINDING_DATAFORMATAS)]
    HRESULT dataFormatAs([in] BSTR v);

    [propget, id(DISPID_IHTMLDATABINDING_DATAFORMATAS)]
    HRESULT dataFormatAs([retval, out] BSTR * p);
}

#define WINE_IHTMLDATABINDING_DISPINTERFACE_DECL        \
    [propput, id(DISPID_IHTMLDATABINDING_DATAFLD)]      \
    void dataFld(BSTR v);                               \
                                                        \
    [propget, id(DISPID_IHTMLDATABINDING_DATAFLD)]      \
    BSTR dataFld();                                     \
                                                        \
    [propput, id(DISPID_IHTMLDATABINDING_DATASRC)]      \
    void dataSrc(BSTR v);                               \
                                                        \
    [propget, id(DISPID_IHTMLDATABINDING_DATASRC)]      \
    BSTR dataSrc();                                     \
                                                        \
    [propput, id(DISPID_IHTMLDATABINDING_DATAFORMATAS)] \
    void dataFormatAs(BSTR v);                          \
                                                        \
    [propget, id(DISPID_IHTMLDATABINDING_DATAFORMATAS)] \
    BSTR dataFormatAs()

#define WINE_HTMLELEMENT_DISPINTERFACE_DECL     \
    WINE_IHTMLELEMENT_DISPINTERFACE_DECL;       \
    WINE_IHTMLELEMENT2_DISPINTERFACE_DECL;      \
    WINE_IHTMLELEMENT3_DISPINTERFACE_DECL;      \
    WINE_IHTMLELEMENT4_DISPINTERFACE_DECL;      \
    WINE_IHTMLUNIQUENAME_DISPINTERFACE_DECL;    \
    WINE_HTMLDOMNODE_DISPINTERFACE_DECL;        \
    WINE_IHTMLELEMENT5_DISPINTERFACE_DECL;      \
    WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL

#define WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL \
    WINE_IHTMLELEMENT_DISPINTERFACE_DECL;       \
    WINE_IHTMLELEMENT2_DISPINTERFACE_DECL;      \
    WINE_IHTMLELEMENT3_DISPINTERFACE_DECL;      \
    WINE_IHTMLELEMENT4_DISPINTERFACE_DECL;      \
    WINE_IHTMLUNIQUENAME_DISPINTERFACE_DECL;    \
    WINE_HTMLDOMNODE_DISPINTERFACE_DECL;        \
    WINE_IHTMLDATABINDING_DISPINTERFACE_DECL;   \
    WINE_IHTMLELEMENT5_DISPINTERFACE_DECL;      \
    WINE_IELEMENTSELECTOR_DISPINTERFACE_DECL;   \
    WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL

/*****************************************************************************
 *    IHTMLGenericElement interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f4b7-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLGenericElement : IDispatch
{
    [propget, id(DISPID_IHTMLGENERICELEMENT_RECORDSET), hidden]
    HRESULT recordset([out, retval] IDispatch **p);

    [id(DISPID_IHTMLGENERICELEMENT_NAMEDRECORDSET)]
    HRESULT namedRecordset(
            [in] BSTR dataMember,
            [in, optional] VARIANT *hierarchy,
            [out, retval] IDispatch **ppRecordset);
}

/*****************************************************************************
 *    DispHTMLGenericElement dispinterface
 */
[
    hidden,
    uuid(3050f563-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLGenericElement
{
properties:
methods:
    WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;

    [propget, id(DISPID_IHTMLGENERICELEMENT_RECORDSET), hidden]
    IDispatch *recordset();

    [id(DISPID_IHTMLGENERICELEMENT_NAMEDRECORDSET)]
    IDispatch *namedRecordset(
            [in] BSTR dataMember,
            [in, optional] VARIANT *hierarchy);
}

/*****************************************************************************
 *    IHTMLStyleSheetRule interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050F357-98B5-11CF-BB82-00AA00BDCE0B)
]
interface IHTMLStyleSheetRule : IDispatch
{
    [propput, id(DISPID_IHTMLSTYLESHEETRULE_SELECTORTEXT)]
    HRESULT selectorText([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLESHEETRULE_SELECTORTEXT)]
    HRESULT selectorText([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLSTYLESHEETRULE_STYLE)]
    HRESULT style([retval, out] IHTMLRuleStyle **p);

    [propget, id(DISPID_IHTMLSTYLESHEETRULE_READONLY)]
    HRESULT readOnly([retval, out] VARIANT_BOOL *p);
}

[
    hidden,
    uuid(3050f50e-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLStyleSheetRule
{
properties:
methods:
    [propput, id(DISPID_IHTMLSTYLESHEETRULE_SELECTORTEXT)]
    void selectorText(BSTR v);

    [propget, id(DISPID_IHTMLSTYLESHEETRULE_SELECTORTEXT)]
    BSTR selectorText();

    [propget, id(DISPID_IHTMLSTYLESHEETRULE_STYLE), nonbrowsable]
    IHTMLRuleStyle* style();

    [propget, id(DISPID_IHTMLSTYLESHEETRULE_READONLY)]
    VARIANT_BOOL readOnly();

    WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL;
}

[
    noncreatable,
    uuid(3050f3ce-98b5-11cf-bb82-00aa00bdce0b)
]
coclass HTMLStyleSheetRule
{
    [default]           dispinterface DispHTMLStyleSheetRule;
                        interface IHTMLStyleSheetRule;
                        interface IHTMLDOMConstructor;
}

/*****************************************************************************
 *    IHTMLStyleSheetRulesCollection interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050F2E5-98B5-11Cf-BB82-00AA00BDCE0B)
]
interface IHTMLStyleSheetRulesCollection : IDispatch
{
    [propget, id(DISPID_IHTMLSTYLESHEETRULESCOLLECTION_LENGTH)]
    HRESULT length([retval, out] LONG *p);

    [id(DISPID_IHTMLSTYLESHEETRULESCOLLECTION_ITEM)]
    HRESULT item(
        [in] LONG index,
        [retval, out] IHTMLStyleSheetRule **ppHTMLStyleSheetRule);
}

[
    hidden,
    uuid(3050f52f-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLStyleSheetRulesCollection
{
properties:
methods:
    [propget, id(DISPID_IHTMLSTYLESHEETRULESCOLLECTION_LENGTH)]
    long length();

    [id(DISPID_IHTMLSTYLESHEETRULESCOLLECTION_ITEM)]
    IHTMLStyleSheetRule* item([in] long index);

    WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL;
}

[
    noncreatable,
    uuid(3050f3cd-98b5-11cf-bb82-00aa00bdce0b)
]
coclass HTMLStyleSheetRulesCollection
{
    [default]           dispinterface DispHTMLStyleSheetRulesCollection;
                        interface IHTMLStyleSheetRulesCollection;
                        interface IHTMLDOMConstructor;
}

[
    odl,
    oleautomation,
    dual,
    uuid(3050f7ee-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLStyleSheetPage : IDispatch
{
    [propget, id(DISPID_IHTMLSTYLESHEETPAGE_SELECTOR)]
    HRESULT selector([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLSTYLESHEETPAGE_PSEUDOCLASS)]
    HRESULT pseudoClass([retval, out] BSTR *p);
}

[
    hidden,
    uuid(3050f540-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLStyleSheetPage
{
properties:
methods:
    [propget, id(DISPID_IHTMLSTYLESHEETPAGE_SELECTOR)]
    BSTR selector();

    [propget, id(DISPID_IHTMLSTYLESHEETPAGE_PSEUDOCLASS)]
    BSTR pseudoClass();

    WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL;
}
[
    noncreatable,
    uuid(3050f7ef-98b5-11cf-bb82-00aa00bdce0b)
]
coclass HTMLStyleSheetPage
{
    [default]           dispinterface DispHTMLStyleSheetPage;
                        interface IHTMLStyleSheetPage;
                        interface IHTMLDOMConstructor;
}

[
    odl,
    oleautomation,
    dual,
    uuid(3050f7f0-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLStyleSheetPagesCollection : IDispatch
{
    [propget, id(DISPID_IHTMLSTYLESHEETPAGESCOLLECTION_LENGTH)]
    HRESULT length([retval, out] LONG *p);

    [id(DISPID_IHTMLSTYLESHEETPAGESCOLLECTION_ITEM)]
    HRESULT item(
        [in] LONG index,
        [retval, out] IHTMLStyleSheetPage **ppHTMLStyleSheetPage);
}

[
    hidden,
    uuid(3050f543-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLStyleSheetPagesCollection
{
properties:
methods:
    [propget, id(DISPID_IHTMLSTYLESHEETPAGESCOLLECTION_LENGTH)]
    long length();

    [id(DISPID_IHTMLSTYLESHEETPAGESCOLLECTION_ITEM)]
    IHTMLStyleSheetPage* item([in] long index);

    WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL;
}

[
    noncreatable,
    uuid(3050f7f1-98b5-11cf-bb82-00aa00bdce0b)
]
coclass HTMLStyleSheetPagesCollection
{
    [default]           dispinterface DispHTMLStyleSheetPagesCollection;
                        interface IHTMLStyleSheetPagesCollection;
                        interface IHTMLDOMConstructor;
}

/*****************************************************************************
 *    IHTMLStyleSheet interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050F2E3-98B5-11CF-BB82-00AA00BDCE0B)
]
interface IHTMLStyleSheet : IDispatch
{
    [propput, id(DISPID_IHTMLSTYLESHEET_TITLE)]
    HRESULT title([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLESHEET_TITLE)]
    HRESULT title([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLSTYLESHEET_PARENTSTYLESHEET)]
    HRESULT parentStyleSheet([retval, out] IHTMLStyleSheet **p);

    [propget, id(DISPID_IHTMLSTYLESHEET_OWNINGELEMENT)]
    HRESULT owningElement([retval, out] IHTMLElement **p);

    [propput, id(DISPID_IHTMLSTYLESHEET_DISABLED)]
    HRESULT disabled([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLSTYLESHEET_DISABLED)]
    HRESULT disabled([retval, out] VARIANT_BOOL *p);

    [propget, id(DISPID_IHTMLSTYLESHEET_READONLY)]
    HRESULT readOnly([retval, out] VARIANT_BOOL *p);

    [propget, id(DISPID_IHTMLSTYLESHEET_IMPORTS)]
    HRESULT imports([retval, out] IHTMLStyleSheetsCollection **p);

    [propput, id(DISPID_IHTMLSTYLESHEET_HREF)]
    HRESULT href([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLESHEET_HREF)]
    HRESULT href([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLSTYLESHEET_TYPE)]
    HRESULT type([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLSTYLESHEET_ID)]
    HRESULT id([retval, out] BSTR *p);

    [id(DISPID_IHTMLSTYLESHEET_ADDIMPORT)]
    HRESULT addImport(
        [in] BSTR bstrURL,
        [defaultvalue(-1), in] LONG lIndex,
        [retval, out] LONG *plIndex);

    [id(DISPID_IHTMLSTYLESHEET_ADDRULE)]
    HRESULT addRule(
        [in] BSTR bstrSelector,
        [in] BSTR bstrStyle,
        [defaultvalue(-1), in] LONG lIndex,
        [retval, out] LONG *plNewIndex);

    [id(DISPID_IHTMLSTYLESHEET_REMOVEIMPORT)]
    HRESULT removeImport([in] LONG lIndex);

    [id(DISPID_IHTMLSTYLESHEET_REMOVERULE)]
    HRESULT removeRule([in] LONG lIndex);

    [propput, id(DISPID_IHTMLSTYLESHEET_MEDIA)]
    HRESULT media([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLESHEET_MEDIA)]
    HRESULT media([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLESHEET_CSSTEXT)]
    HRESULT cssText([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLESHEET_CSSTEXT)]
    HRESULT cssText([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLSTYLESHEET_RULES)]
    HRESULT rules([retval, out] IHTMLStyleSheetRulesCollection **p);
}

/*****************************************************************************
 *    IHTMLStyleSheet2 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f3d1-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLStyleSheet2 : IDispatch
{
    [propget, id(DISPID_IHTMLSTYLESHEET2_PAGES)]
    HRESULT pages([retval, out] IHTMLStyleSheetPagesCollection **p);

    [id(DISPID_IHTMLSTYLESHEET2_ADDPAGERULE)]
    HRESULT addPageRule(
        [in] BSTR bstrSelector,
        [in] BSTR bstrStyle,
        [defaultvalue(-1), in] LONG lIndex,
        [retval, out] LONG *plNewIndex);
}

[
    hidden,
    uuid(3050f58d-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLStyleSheet
{
properties:
methods:
    [propput, id(DISPID_IHTMLSTYLESHEET_TITLE)]
    void title(BSTR v);

    [propget, id(DISPID_IHTMLSTYLESHEET_TITLE)]
    BSTR title();

    [propget, id(DISPID_IHTMLSTYLESHEET_PARENTSTYLESHEET)]
    IHTMLStyleSheet* parentStyleSheet();

    [propget, id(DISPID_IHTMLSTYLESHEET_OWNINGELEMENT)]
    IHTMLElement* owningElement();

    [propput, id(DISPID_IHTMLSTYLESHEET_DISABLED)]
    void disabled(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLSTYLESHEET_DISABLED)]
    VARIANT_BOOL disabled();

    [propget, id(DISPID_IHTMLSTYLESHEET_READONLY)]
    VARIANT_BOOL readOnly();

    [propget, id(DISPID_IHTMLSTYLESHEET_IMPORTS)]
    IHTMLStyleSheetsCollection* imports();

    [propput, id(DISPID_IHTMLSTYLESHEET_HREF)]
    void href(BSTR v);

    [propget, id(DISPID_IHTMLSTYLESHEET_HREF)]
    BSTR href();

    [propget, id(DISPID_IHTMLSTYLESHEET_TYPE)]
    BSTR type();

    [propget, id(DISPID_IHTMLSTYLESHEET_ID)]
    BSTR id();

    [id(DISPID_IHTMLSTYLESHEET_ADDIMPORT)]
    LONG addImport(
        [in] BSTR bstrURL,
        [defaultvalue(-1), in] LONG lIndex);

    [id(DISPID_IHTMLSTYLESHEET_ADDRULE)]
    LONG addRule(
        [in] BSTR bstrSelector,
        [in] BSTR bstrStyle,
        [defaultvalue(-1), in] LONG lIndex);

    [id(DISPID_IHTMLSTYLESHEET_REMOVEIMPORT)]
    void removeImport([in] LONG lIndex);

    [id(DISPID_IHTMLSTYLESHEET_REMOVERULE)]
    void removeRule([in] LONG lIndex);

    [propput, id(DISPID_IHTMLSTYLESHEET_MEDIA)]
    void media(BSTR v);

    [propget, id(DISPID_IHTMLSTYLESHEET_MEDIA)]
    BSTR media();

    [propput, id(DISPID_IHTMLSTYLESHEET_CSSTEXT)]
    void cssText(BSTR v);

    [propget, id(DISPID_IHTMLSTYLESHEET_CSSTEXT)]
    BSTR cssText();

    [propget, id(DISPID_IHTMLSTYLESHEET_RULES)]
    IHTMLStyleSheetRulesCollection* rules();

    [propget, id(DISPID_IHTMLSTYLESHEET2_PAGES)]
    IHTMLStyleSheetPagesCollection* pages();

    [id(DISPID_IHTMLSTYLESHEET2_ADDPAGERULE)]
    LONG addPageRule(
        [in] BSTR bstrSelector,
        [in] BSTR bstrStyle,
        [defaultvalue(-1), in] LONG lIndex);
}

[
    noncreatable,
    uuid(3050f2e4-98b5-11cf-bb82-00aa00bdce0b)
]
coclass HTMLStyleSheet
{
    [default]           dispinterface DispHTMLStyleSheet;
                        interface IHTMLStyleSheet;
                        interface IHTMLStyleSheet2;
}

/*****************************************************************************
 *    IHTMLStyleSheetsCollection interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050F37E-98B5-11CF-BB82-00AA00BDCE0B)
]
interface IHTMLStyleSheetsCollection : IDispatch
{
    [propget, id(DISPID_IHTMLSTYLESHEETSCOLLECTION_LENGTH)]
    HRESULT length([retval, out] LONG *p);

    [propget, id(DISPID_IHTMLSTYLESHEETSCOLLECTION__NEWENUM)]
    HRESULT _newEnum([retval, out] IUnknown **p);

    [id(DISPID_IHTMLSTYLESHEETSCOLLECTION_ITEM)]
    HRESULT item(
        [in] VARIANT *pvarIndex,
        [retval, out] VARIANT *pvarResult);
}

/*****************************************************************************
 *    DispHTMLStyleSheetsCollection dispinterface
 */
[
    hidden,
    uuid(3050f547-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLStyleSheetsCollection
{
properties:
methods:
    [propget, id(DISPID_IHTMLSTYLESHEETSCOLLECTION_LENGTH)]
    long length();

    [propget, id(DISPID_IHTMLSTYLESHEETSCOLLECTION__NEWENUM), hidden, restricted]
    IUnknown *_newEnum();

    [id(DISPID_IHTMLSTYLESHEETSCOLLECTION_ITEM)]
    VARIANT item([in] VARIANT *pvarIndex);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR), hidden]
    IDispatch *constructor();
}

/*****************************************************************************
 *    IHTMLTxtRange interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f220-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLTxtRange : IDispatch
{
    [propget, id(DISPID_IHTMLTXTRANGE_HTMLTEXT)]
    HRESULT htmlText([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLTXTRANGE_TEXT)]
    HRESULT text([in] BSTR v);

    [propget, id(DISPID_IHTMLTXTRANGE_TEXT)]
    HRESULT text([retval, out] BSTR *p);

    [id(DISPID_IHTMLTXTRANGE_PARENTELEMENT)]
    HRESULT parentElement([retval, out] IHTMLElement **parent);

    [id(DISPID_IHTMLTXTRANGE_DUPLICATE)]
    HRESULT duplicate([retval, out] IHTMLTxtRange **Duplicate);

    [id(DISPID_IHTMLTXTRANGE_INRANGE)]
    HRESULT inRange(
        [in] IHTMLTxtRange *Range,
        [retval, out] VARIANT_BOOL *InRange);

    [id(DISPID_IHTMLTXTRANGE_ISEQUAL)]
    HRESULT isEqual(
        [in] IHTMLTxtRange *Range,
        [retval, out] VARIANT_BOOL *IsEqual);

    [id(DISPID_IHTMLTXTRANGE_SCROLLINTOVIEW)]
    HRESULT scrollIntoView([defaultvalue(-1), in] VARIANT_BOOL fStart);

    [id(DISPID_IHTMLTXTRANGE_COLLAPSE)]
    HRESULT collapse([defaultvalue(-1), in] VARIANT_BOOL Start);

    [id(DISPID_IHTMLTXTRANGE_EXPAND)]
    HRESULT expand(
        [in] BSTR Unit,
        [retval, out] VARIANT_BOOL *Success);

    [id(DISPID_IHTMLTXTRANGE_MOVE)]
    HRESULT move(
        [in] BSTR Unit,
        [defaultvalue(1), in] LONG Count,
        [retval, out] LONG *ActualCount);

    [id(DISPID_IHTMLTXTRANGE_MOVESTART)]
    HRESULT moveStart(
        [in] BSTR Unit,
        [defaultvalue(1), in] LONG Count,
        [retval, out] LONG *ActualCount);

    [id(DISPID_IHTMLTXTRANGE_MOVEEND)]
    HRESULT moveEnd(
        [in] BSTR Unit,
        [defaultvalue(1), in] LONG Count,
        [retval, out] LONG *ActualCount);

    [id(DISPID_IHTMLTXTRANGE_SELECT)]
    HRESULT select();

    [id(DISPID_IHTMLTXTRANGE_PASTEHTML)]
    HRESULT pasteHTML([in] BSTR html);

    [id(DISPID_IHTMLTXTRANGE_MOVETOELEMENTTEXT)]
    HRESULT moveToElementText([in] IHTMLElement *element);

    [id(DISPID_IHTMLTXTRANGE_SETENDPOINT)]
    HRESULT setEndPoint(
        [in] BSTR how,
        [in] IHTMLTxtRange *SourceRange);

    [id(DISPID_IHTMLTXTRANGE_COMPAREENDPOINTS)]
    HRESULT compareEndPoints(
        [in] BSTR how,
        [in] IHTMLTxtRange *SourceRange,
        [retval, out] LONG *ret);

    [id(DISPID_IHTMLTXTRANGE_FINDTEXT)]
    HRESULT findText(
        [in] BSTR String,
        [defaultvalue(1073741823), in] LONG count,
        [defaultvalue(0), in] LONG Flags,
        [retval, out] VARIANT_BOOL *Success);

    [id(DISPID_IHTMLTXTRANGE_MOVETOPOINT)]
    HRESULT moveToPoint(
        [in] LONG x,
        [in] LONG y);

    [id(DISPID_IHTMLTXTRANGE_GETBOOKMARK)]
    HRESULT getBookmark([retval, out] BSTR *Boolmark);

    [id(DISPID_IHTMLTXTRANGE_MOVETOBOOKMARK)]
    HRESULT moveToBookmark(
        [in] BSTR Bookmark,
        [retval, out] VARIANT_BOOL *Success);

    [id(DISPID_IHTMLTXTRANGE_QUERYCOMMANDSUPPORTED)]
    HRESULT queryCommandSupported(
        [in] BSTR cmdID,
        [retval, out] VARIANT_BOOL *pfRet);

    [id(DISPID_IHTMLTXTRANGE_QUERYCOMMANDENABLED)]
    HRESULT queryCommandEnabled(
        [in] BSTR cmdID,
        [retval, out] VARIANT_BOOL *pfRet);

    [id(DISPID_IHTMLTXTRANGE_QUERYCOMMANDSTATE)]
    HRESULT queryCommandState(
        [in] BSTR cmdID,
        [retval, out] VARIANT_BOOL *pfRet);

    [id(DISPID_IHTMLTXTRANGE_QUERYCOMMANDINDETERM)]
    HRESULT queryCommandIndeterm(
        [in] BSTR cmdID,
        [retval, out] VARIANT_BOOL *pfRet);

    [id(DISPID_IHTMLTXTRANGE_QUERYCOMMANDTEXT)]
    HRESULT queryCommandText(
        [in] BSTR cmdID,
        [retval, out] BSTR *pcmdText);

    [id(DISPID_IHTMLTXTRANGE_QUERYCOMMANDVALUE)]
    HRESULT queryCommandValue(
        [in] BSTR cmdID,
        [retval, out] VARIANT *pcmdValue);

    [id(DISPID_IHTMLTXTRANGE_EXECCOMMAND)]
    HRESULT execCommand(
        [in] BSTR cmdID,
        [defaultvalue(0), in] VARIANT_BOOL showUI,
        [optional, in] VARIANT value,
        [retval, out] VARIANT_BOOL *pfRet);

    [id(DISPID_IHTMLTXTRANGE_EXECCOMMANDSHOWHELP)]
    HRESULT execCommandShowHelp(
        [in] BSTR cmdID,
        [retval, out] VARIANT_BOOL *pfRet);
}

[
    noncreatable,
    uuid(3050f37f-98b5-11cf-bb82-00aa00bdce0b)
]
coclass HTMLStyleSheetsCollection
{
    [default]           interface IHTMLStyleSheetsCollection;
}

/*****************************************************************************
 *    IHTMLFormElement interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050F1F7-98B5-11CF-BB82-00AA00BDCE0B)
]
interface IHTMLFormElement : IDispatch
{
    [propput, id(DISPID_IHTMLFORMELEMENT_ACTION)]
    HRESULT action([in] BSTR v);

    [propget, id(DISPID_IHTMLFORMELEMENT_ACTION)]
    HRESULT action([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLFORMELEMENT_DIR)]
    HRESULT dir([in] BSTR v);

    [propget, id(DISPID_IHTMLFORMELEMENT_DIR)]
    HRESULT dir([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLFORMELEMENT_ENCODING)]
    HRESULT encoding([in] BSTR v);

    [propget, id(DISPID_IHTMLFORMELEMENT_ENCODING)]
    HRESULT encoding([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLFORMELEMENT_METHOD)]
    HRESULT method([in] BSTR v);

    [propget, id(DISPID_IHTMLFORMELEMENT_METHOD)]
    HRESULT method([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLFORMELEMENT_ELEMENTS)]
    HRESULT elements([retval, out] IDispatch **p);

    [propput, id(DISPID_IHTMLFORMELEMENT_TARGET)]
    HRESULT target([in] BSTR v);

    [propget, id(DISPID_IHTMLFORMELEMENT_TARGET)]
    HRESULT target([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLFORMELEMENT_NAME)]
    HRESULT name([in] BSTR v);

    [propget, id(DISPID_IHTMLFORMELEMENT_NAME)]
    HRESULT name([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLFORMELEMENT_ONSUBMIT)]
    HRESULT onsubmit([in] VARIANT v);

    [propget, id(DISPID_IHTMLFORMELEMENT_ONSUBMIT)]
    HRESULT onsubmit([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLFORMELEMENT_ONRESET)]
    HRESULT onreset([in] VARIANT v);

    [propget, id(DISPID_IHTMLFORMELEMENT_ONRESET)]
    HRESULT onreset([retval, out] VARIANT *p);

    [id(DISPID_IHTMLFORMELEMENT_SUBMIT)]
    HRESULT submit();

    [id(DISPID_IHTMLFORMELEMENT_RESET)]
    HRESULT reset();

    [propput, id(DISPID_IHTMLFORMELEMENT_LENGTH)]
    HRESULT length([in] LONG v);

    [propget, id(DISPID_IHTMLFORMELEMENT_LENGTH)]
    HRESULT length([retval, out] LONG *p);

    [propget, id(DISPID_IHTMLFORMELEMENT__NEWENUM)]
    HRESULT _newEnum([retval, out] IUnknown **p);

    [id(DISPID_IHTMLFORMELEMENT_ITEM)]
    HRESULT item(
        [optional, in] VARIANT name,
        [optional, in] VARIANT index,
        [retval, out] IDispatch **pdisp);

    [id(DISPID_IHTMLFORMELEMENT_TAGS)]
    HRESULT tags(
        [in] VARIANT tagName,
        [retval, out] IDispatch **pdisp);
}

/*****************************************************************************
 *    DispHTMLFormElement dispinterface
 */
[
    hidden,
    uuid(3050F510-98B5-11CF-BB82-00AA00BDCE0B)
]
dispinterface DispHTMLFormElement
{
properties:
methods:
    WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;

    [propput, id(DISPID_IHTMLFORMELEMENT_ACTION)]
    void action(BSTR v);

    [propget, id(DISPID_IHTMLFORMELEMENT_ACTION)]
    BSTR action();

    [propput, id(DISPID_IHTMLFORMELEMENT_ENCODING)]
    void encoding(BSTR v);

    [propget, id(DISPID_IHTMLFORMELEMENT_ENCODING)]
    BSTR encoding();

    [propput, id(DISPID_IHTMLFORMELEMENT_METHOD)]
    void method(BSTR v);

    [propget, id(DISPID_IHTMLFORMELEMENT_METHOD)]
    BSTR method();

    [propget, id(DISPID_IHTMLFORMELEMENT_ELEMENTS)]
    IDispatch *elements();

    [propput, id(DISPID_IHTMLFORMELEMENT_TARGET)]
    void target(BSTR v);

    [propget, id(DISPID_IHTMLFORMELEMENT_TARGET)]
    BSTR target();

    [propput, id(DISPID_IHTMLFORMELEMENT_NAME)]
    void name(BSTR v);

    [propget, id(DISPID_IHTMLFORMELEMENT_NAME)]
    BSTR name();

    [propput, id(DISPID_IHTMLFORMELEMENT_ONSUBMIT)]
    void onsubmit(VARIANT v);

    [propget, id(DISPID_IHTMLFORMELEMENT_ONSUBMIT)]
    VARIANT onsubmit();

    [propput, id(DISPID_IHTMLFORMELEMENT_ONRESET)]
    void onreset(VARIANT v);

    [propget, id(DISPID_IHTMLFORMELEMENT_ONRESET)]
    VARIANT onreset();

    [id(DISPID_IHTMLFORMELEMENT_SUBMIT)]
    void submit();

    [id(DISPID_IHTMLFORMELEMENT_RESET)]
    void reset();

    [propput, id(DISPID_IHTMLFORMELEMENT_LENGTH)]
    void length(long v);

    [propget, id(DISPID_IHTMLFORMELEMENT_LENGTH)]
    long length();

    [propget, id(DISPID_IHTMLFORMELEMENT__NEWENUM), hidden, restricted]
    IUnknown *_newEnum();

    [id(DISPID_IHTMLFORMELEMENT_ITEM)]
    IDispatch *item(VARIANT name, VARIANT index);

    [id(DISPID_IHTMLFORMELEMENT_TAGS)]
    IDispatch *tags(VARIANT tagName);
}

[
    hidden,
    uuid(3050F364-98B5-11CF-BB82-00AA00BDCE0B)
]
dispinterface HTMLFormElementEvents
{
properties:
methods:
    [id(DISPID_HTMLELEMENTEVENTS_ONHELP)]
    VARIANT_BOOL onhelp();

    [id(DISPID_HTMLELEMENTEVENTS_ONCLICK)]
    VARIANT_BOOL onclick();

    [id(DISPID_HTMLELEMENTEVENTS_ONDBLCLICK)]
    VARIANT_BOOL ondblclick();

    [id(DISPID_HTMLELEMENTEVENTS_ONKEYPRESS)]
    VARIANT_BOOL onkeypress();

    [id(DISPID_HTMLELEMENTEVENTS_ONKEYDOWN)]
    void onkeydown();

    [id(DISPID_HTMLELEMENTEVENTS_ONKEYUP)]
    void onkeyup();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEOUT)]
    void onmouseout();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEOVER)]
    void onmouseover();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEMOVE)]
    void onmousemove();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEDOWN)]
    void onmousedown();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEUP)]
    void onmouseup();

    [id(DISPID_HTMLELEMENTEVENTS_ONSELECTSTART)]
    VARIANT_BOOL onselectstart();

    [id(DISPID_HTMLELEMENTEVENTS_ONFILTERCHANGE)]
    void onfilterchange();

    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGSTART)]
    VARIANT_BOOL ondragstart();

    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREUPDATE)]
    VARIANT_BOOL onbeforeupdate();

    [id(DISPID_HTMLELEMENTEVENTS_ONAFTERUPDATE)]
    void onafterupdate();

    [id(DISPID_HTMLELEMENTEVENTS_ONERRORUPDATE)]
    VARIANT_BOOL onerrorupdate();

    [id(DISPID_HTMLELEMENTEVENTS_ONROWEXIT)]
    VARIANT_BOOL onrowexit();

    [id(DISPID_HTMLELEMENTEVENTS_ONROWENTER)]
    void onrowenter();

    [id(DISPID_HTMLELEMENTEVENTS_ONDATASETCHANGED)]
    void ondatasetchanged();

    [id(DISPID_HTMLELEMENTEVENTS_ONDATAAVAILABLE)]
    void ondataavailable();

    [id(DISPID_HTMLELEMENTEVENTS_ONDATASETCOMPLETE)]
    void ondatasetcomplete();

    [id(DISPID_HTMLELEMENTEVENTS_ONLOSECAPTURE)]
    void onlosecapture();

    [id(DISPID_HTMLELEMENTEVENTS_ONPROPERTYCHANGE)]
    void onpropertychange();

    [id(DISPID_HTMLELEMENTEVENTS_ONSCROLL)]
    void onscroll();

    [id(DISPID_HTMLELEMENTEVENTS_ONFOCUS)]
    void onfocus();

    [id(DISPID_HTMLELEMENTEVENTS_ONBLUR)]
    void onblur();

    [id(DISPID_HTMLELEMENTEVENTS_ONRESIZE)]
    void onresize();

    [id(DISPID_HTMLELEMENTEVENTS_ONDRAG)]
    VARIANT_BOOL ondrag();

    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGEND)]
    void ondragend();

    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGENTER)]
    VARIANT_BOOL ondragenter();

    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGOVER)]
    VARIANT_BOOL ondragover();

    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGLEAVE)]
    void ondragleave();

    [id(DISPID_HTMLELEMENTEVENTS_ONDROP)]
    VARIANT_BOOL ondrop();

    [id(DISPID_HTMLELEMENTEVENTS_ONBEFORECUT)]
    VARIANT_BOOL onbeforecut();

    [id(DISPID_HTMLELEMENTEVENTS_ONCUT)]
    VARIANT_BOOL oncut();

    [id(DISPID_HTMLELEMENTEVENTS_ONBEFORECOPY)]
    VARIANT_BOOL onbeforecopy();

    [id(DISPID_HTMLELEMENTEVENTS_ONCOPY)]
    VARIANT_BOOL oncopy();

    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREPASTE)]
    VARIANT_BOOL onbeforepaste();

    [id(DISPID_HTMLELEMENTEVENTS_ONPASTE)]
    VARIANT_BOOL onpaste();

    [id(DISPID_HTMLELEMENTEVENTS_ONCONTEXTMENU)]
    VARIANT_BOOL oncontextmenu();

    [id(DISPID_HTMLELEMENTEVENTS_ONROWSDELETE)]
    void onrowsdelete();

    [id(DISPID_HTMLELEMENTEVENTS_ONROWSINSERTED)]
    void onrowsinserted();

    [id(DISPID_HTMLELEMENTEVENTS_ONCELLCHANGE)]
    void oncellchange();

    [id(DISPID_HTMLELEMENTEVENTS_ONREADYSTATECHANGE)]
    void onreadystatechange();

    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREEDITFOCUS)]
    void onbeforeeditfocus();

    [id(DISPID_HTMLELEMENTEVENTS_ONLAYOUTCOMPLETE)]
    void onlayoutcomplete();

    [id(DISPID_HTMLELEMENTEVENTS_ONPAGE)]
    void onpage();

    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREDEACTIVATE)]
    VARIANT_BOOL onbeforedeactivate();

    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREACTIVATE)]
    VARIANT_BOOL onbeforeactivate();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOVE)]
    void onmove();

    [id(DISPID_HTMLELEMENTEVENTS_ONCONTROLSELECT)]
    VARIANT_BOOL oncontrolselect();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOVESTART)]
    VARIANT_BOOL onmovestart();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOVEEND)]
    void onmoveend();

    [id(DISPID_HTMLELEMENTEVENTS_ONRESIZESTART)]
    VARIANT_BOOL onresizestart();

    [id(DISPID_HTMLELEMENTEVENTS_ONRESIZEEND)]
    void onresizeend();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEENTER)]
    void onmouseenter();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSELEAVE)]
    void onmouseleave();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEWHEEL)]
    VARIANT_BOOL onmousewheel();

    [id(DISPID_HTMLELEMENTEVENTS_ONACTIVATE)]
    void onactivate();

    [id(DISPID_HTMLELEMENTEVENTS_ONDEACTIVATE)]
    void ondeactivate();

    [id(DISPID_HTMLELEMENTEVENTS_ONFOCUSIN)]
    void onfocusin();

    [id(DISPID_HTMLELEMENTEVENTS_ONFOCUSOUT)]
    void onfocusout();

    [id(DISPID_HTMLFORMELEMENTEVENTS_ONSUBMIT)]
    VARIANT_BOOL onsubmit();

    [id(DISPID_HTMLFORMELEMENTEVENTS_ONRESET)]
    VARIANT_BOOL onreset();
}

interface IHTMLEventObj;

[
    hidden,
    uuid(3050F614-98B5-11CF-BB82-00AA00BDCE0B)
]
dispinterface HTMLFormElementEvents2
{
properties:
methods:
    [id(DISPID_HTMLELEMENTEVENTS2_ONHELP)]
    VARIANT_BOOL onhelp([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONCLICK)]
    VARIANT_BOOL onclick([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDBLCLICK)]
    VARIANT_BOOL ondblclick([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONKEYPRESS)]
    VARIANT_BOOL onkeypress([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONKEYDOWN)]
    void onkeydown([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONKEYUP)]
    void onkeyup([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEOUT)]
    void onmouseout([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEOVER)]
    void onmouseover([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEMOVE)]
    void onmousemove([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEDOWN)]
    void onmousedown([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEUP)]
    void onmouseup([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONSELECTSTART)]
    VARIANT_BOOL onselectstart([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONFILTERCHANGE)]
    void onfilterchange([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGSTART)]
    VARIANT_BOOL ondragstart([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREUPDATE)]
    VARIANT_BOOL onbeforeupdate([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONAFTERUPDATE)]
    void onafterupdate([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONERRORUPDATE)]
    VARIANT_BOOL onerrorupdate([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONROWEXIT)]
    VARIANT_BOOL onrowexit([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONROWENTER)]
    void onrowenter([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDATASETCHANGED)]
    void ondatasetchanged([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDATAAVAILABLE)]
    void ondataavailable([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDATASETCOMPLETE)]
    void ondatasetcomplete([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONLOSECAPTURE)]
    void onlosecapture([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONPROPERTYCHANGE)]
    void onpropertychange([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONSCROLL)]
    void onscroll([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUS)]
    void onfocus([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONBLUR)]
    void onblur([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZE)]
    void onresize([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAG)]
    VARIANT_BOOL ondrag([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGEND)]
    void ondragend([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGENTER)]
    VARIANT_BOOL ondragenter([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGOVER)]
    VARIANT_BOOL ondragover([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGLEAVE)]
    void ondragleave([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDROP)]
    VARIANT_BOOL ondrop([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFORECUT)]
    VARIANT_BOOL onbeforecut([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONCUT)]
    VARIANT_BOOL oncut([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFORECOPY)]
    VARIANT_BOOL onbeforecopy([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONCOPY)]
    VARIANT_BOOL oncopy([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREPASTE)]
    VARIANT_BOOL onbeforepaste([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONPASTE)]
    VARIANT_BOOL onpaste([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONCONTEXTMENU)]
    VARIANT_BOOL oncontextmenu([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONROWSDELETE)]
    void onrowsdelete([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONROWSINSERTED)]
    void onrowsinserted([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONCELLCHANGE)]
    void oncellchange([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONREADYSTATECHANGE)]
    void onreadystatechange([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONLAYOUTCOMPLETE)]
    void onlayoutcomplete([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONPAGE)]
    void onpage([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEENTER)]
    void onmouseenter([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSELEAVE)]
    void onmouseleave([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONACTIVATE)]
    void onactivate([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDEACTIVATE)]
    void ondeactivate([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREDEACTIVATE)]
    VARIANT_BOOL onbeforedeactivate([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREACTIVATE)]
    VARIANT_BOOL onbeforeactivate([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUSIN)]
    void onfocusin([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUSOUT)]
    void onfocusout([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOVE)]
    void onmove([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONCONTROLSELECT)]
    VARIANT_BOOL oncontrolselect([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOVESTART)]
    VARIANT_BOOL onmovestart([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOVEEND)]
    void onmoveend([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZESTART)]
    VARIANT_BOOL onresizestart([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZEEND)]
    void onresizeend([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEWHEEL)]
    VARIANT_BOOL onmousewheel([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLFORMELEMENTEVENTS2_ONSUBMIT)]
    VARIANT_BOOL onsubmit([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLFORMELEMENTEVENTS2_ONRESET)]
    VARIANT_BOOL onreset([in] IHTMLEventObj* pEvtObj);
}

[
    noncreatable,
    uuid(3050F24D-98B5-11CF-BB82-00AA00BDCE0B)
]
coclass HTMLFormElement
{
    [default]           dispinterface DispHTMLFormElement;
    [source, default]   dispinterface HTMLFormElementEvents;
    [source]            dispinterface HTMLFormElementEvents2;
                        interface IHTMLElement;
                        interface IHTMLElement2;
                        interface IHTMLElement3;
                        interface IHTMLElement4;
                        interface IHTMLUniqueName;
                        interface IHTMLDOMNode;
                        interface IHTMLDOMNode2;
                        interface IHTMLDOMConstructor;
                        interface IHTMLFormElement;
}

/*****************************************************************************
 *    IHTMLTextContainer interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f230-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLTextContainer : IDispatch
{
    [id(DISPID_IHTMLTEXTCONTAINER_CREATECONTROLRANGE)]
    HRESULT createControlRange([retval, out] IDispatch **range);

    [propget, id(DISPID_IHTMLTEXTCONTAINER_SCROLLHEIGHT), displaybind, bindable]
    HRESULT scrollHeight([retval, out] LONG *p);

    [propget, id(DISPID_IHTMLTEXTCONTAINER_SCROLLWIDTH), displaybind, bindable]
    HRESULT scrollWidth([retval, out] LONG *p);

    [propput, id(DISPID_IHTMLTEXTCONTAINER_SCROLLTOP), displaybind, bindable]
    HRESULT scrollTop([in] LONG v);

    [propget, id(DISPID_IHTMLTEXTCONTAINER_SCROLLTOP), displaybind, bindable]
    HRESULT scrollTop([retval, out] LONG *p);

    [propput, id(DISPID_IHTMLTEXTCONTAINER_SCROLLLEFT), displaybind, bindable]
    HRESULT scrollLeft([in] LONG v);

    [propget, id(DISPID_IHTMLTEXTCONTAINER_SCROLLLEFT), displaybind, bindable]
    HRESULT scrollLeft([retval, out] LONG *p);

    [propput, id(DISPID_IHTMLTEXTCONTAINER_ONSCROLL), displaybind, bindable]
    HRESULT onscroll([in] VARIANT v);

    [propget, id(DISPID_IHTMLTEXTCONTAINER_ONSCROLL), displaybind, bindable]
    HRESULT onscroll([retval, out] VARIANT *p);
}

/*****************************************************************************
 *    IHTMLImgElement interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050F240-98B5-11CF-BB82-00AA00BDCE0B)
]
interface IHTMLImgElement : IDispatch
{
    [propput, id(DISPID_IHTMLIMGELEMENT_ISMAP)]
    HRESULT isMap([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLIMGELEMENT_ISMAP)]
    HRESULT isMap([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLIMGELEMENT_USEMAP)]
    HRESULT useMap([in] BSTR v);

    [propget, id(DISPID_IHTMLIMGELEMENT_USEMAP)]
    HRESULT useMap([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLIMGELEMENT_MIMETYPE)]
    HRESULT mimeType([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLIMGELEMENT_FILESIZE)]
    HRESULT fileSize([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLIMGELEMENT_FILECREATEDDATE)]
    HRESULT fileCreatedDate([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLIMGELEMENT_FILEMODIFIEDDATE)]
    HRESULT fileModifiedDate([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLIMGELEMENT_FILEUPDATEDDATE)]
    HRESULT fileUpdatedDate([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLIMGELEMENT_PROTOCOL)]
    HRESULT protocol([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLIMGELEMENT_HREF)]
    HRESULT href([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLIMGELEMENT_NAMEPROP)]
    HRESULT nameProp([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLIMGELEMENT_BORDER)]
    HRESULT border([in] VARIANT v);

    [propget, id(DISPID_IHTMLIMGELEMENT_BORDER)]
    HRESULT border([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLIMGELEMENT_VSPACE)]
    HRESULT vspace([in] LONG v);

    [propget, id(DISPID_IHTMLIMGELEMENT_VSPACE)]
    HRESULT vspace([retval, out] LONG *p);

    [propput, id(DISPID_IHTMLIMGELEMENT_HSPACE)]
    HRESULT hspace([in] LONG v);

    [propget, id(DISPID_IHTMLIMGELEMENT_HSPACE)]
    HRESULT hspace([retval, out] LONG *p);

    [propput, id(DISPID_IHTMLIMGELEMENT_ALT)]
    HRESULT alt([in] BSTR v);

    [propget, id(DISPID_IHTMLIMGELEMENT_ALT)]
    HRESULT alt([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLIMGELEMENT_SRC)]
    HRESULT src([in] BSTR v);

    [propget, id(DISPID_IHTMLIMGELEMENT_SRC)]
    HRESULT src([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLIMGELEMENT_LOWSRC)]
    HRESULT lowsrc([in] BSTR v);

    [propget, id(DISPID_IHTMLIMGELEMENT_LOWSRC)]
    HRESULT lowsrc([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLIMGELEMENT_VRML)]
    HRESULT vrml([in] BSTR v);

    [propget, id(DISPID_IHTMLIMGELEMENT_VRML)]
    HRESULT vrml([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLIMGELEMENT_DYNSRC)]
    HRESULT dynsrc([in] BSTR v);

    [propget, id(DISPID_IHTMLIMGELEMENT_DYNSRC)]
    HRESULT dynsrc([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLIMGELEMENT_READYSTATE)]
    HRESULT readyState([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLIMGELEMENT_COMPLETE)]
    HRESULT complete([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLIMGELEMENT_LOOP)]
    HRESULT loop([in] VARIANT v);

    [propget, id(DISPID_IHTMLIMGELEMENT_LOOP)]
    HRESULT loop([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLIMGELEMENT_ALIGN)]
    HRESULT align([in] BSTR v);

    [propget, id(DISPID_IHTMLIMGELEMENT_ALIGN)]
    HRESULT align([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLIMGELEMENT_ONLOAD)]
    HRESULT onload([in] VARIANT v);

    [propget, id(DISPID_IHTMLIMGELEMENT_ONLOAD)]
    HRESULT onload([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLIMGELEMENT_ONERROR)]
    HRESULT onerror([in] VARIANT v);

    [propget, id(DISPID_IHTMLIMGELEMENT_ONERROR)]
    HRESULT onerror([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLIMGELEMENT_ONABORT)]
    HRESULT onabort([in] VARIANT v);

    [propget, id(DISPID_IHTMLIMGELEMENT_ONABORT)]
    HRESULT onabort([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLIMGELEMENT_NAME)]
    HRESULT name([in] BSTR v);

    [propget, id(DISPID_IHTMLIMGELEMENT_NAME)]
    HRESULT name([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLIMGELEMENT_WIDTH)]
    HRESULT width([in] LONG v);

    [propget, id(DISPID_IHTMLIMGELEMENT_WIDTH)]
    HRESULT width([retval, out] LONG *p);

    [propput, id(DISPID_IHTMLIMGELEMENT_HEIGHT)]
    HRESULT height([in] LONG v);

    [propget, id(DISPID_IHTMLIMGELEMENT_HEIGHT)]
    HRESULT height([retval, out] LONG *p);

    [propput, id(DISPID_IHTMLIMGELEMENT_START)]
    HRESULT start([in] BSTR v);

    [propget, id(DISPID_IHTMLIMGELEMENT_START)]
    HRESULT start([retval, out] BSTR *p);
}

/*****************************************************************************
 *    IHTMLImageElementFactory interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050F38E-98B5-11CF-BB82-00AA00BDCE0B)
]
interface IHTMLImageElementFactory : IDispatch
{
    [id(DISPID_IHTMLIMAGEELEMENTFACTORY_CREATE)]
    HRESULT create(
        [optional, in] VARIANT width,
        [optional, in] VARIANT height,
        [retval, out]  IHTMLImgElement **elem);
}

/*****************************************************************************
 *    DispHTMLImg interface
 */
[
    hidden,
    uuid(3050f51c-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLImg
{
properties:
methods:
    WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;

    [propput, id(DISPID_IHTMLIMGELEMENT_ISMAP), displaybind, bindable]
    void isMap(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLIMGELEMENT_ISMAP), displaybind, bindable]
    VARIANT_BOOL isMap();

    [propput, id(DISPID_IHTMLIMGELEMENT_USEMAP), displaybind, bindable]
    void useMap(BSTR v);

    [propget, id(DISPID_IHTMLIMGELEMENT_USEMAP), displaybind, bindable]
    BSTR useMap();

    [propget, id(DISPID_IHTMLIMGELEMENT_MIMETYPE)]
    BSTR mimeType();

    [propget, id(DISPID_IHTMLIMGELEMENT_FILESIZE)]
    BSTR fileSize();

    [propget, id(DISPID_IHTMLIMGELEMENT_FILECREATEDDATE)]
    BSTR fileCreatedDate();

    [propget, id(DISPID_IHTMLIMGELEMENT_FILEMODIFIEDDATE)]
    BSTR fileModifiedDate();

    [propget, id(DISPID_IHTMLIMGELEMENT_FILEUPDATEDDATE)]
    BSTR fileUpdatedDate();

    [propget, id(DISPID_IHTMLIMGELEMENT_PROTOCOL)]
    BSTR protocol();

    [propget, id(DISPID_IHTMLIMGELEMENT_HREF)]
    BSTR href();

    [propget, id(DISPID_IHTMLIMGELEMENT_NAMEPROP)]
    BSTR nameProp();

    [propput, id(DISPID_IHTMLIMGELEMENT_BORDER), displaybind, bindable]
    void border(VARIANT v);

    [propget, id(DISPID_IHTMLIMGELEMENT_BORDER), displaybind, bindable]
    VARIANT border();

    [propput, id(DISPID_IHTMLIMGELEMENT_VSPACE), displaybind, bindable]
    void vspace(LONG v);

    [propget, id(DISPID_IHTMLIMGELEMENT_VSPACE), displaybind, bindable]
    LONG vspace();

    [propput, id(DISPID_IHTMLIMGELEMENT_HSPACE), displaybind, bindable]
    void hspace(LONG v);

    [propget, id(DISPID_IHTMLIMGELEMENT_HSPACE), displaybind, bindable]
    LONG hspace();

    [propput, id(DISPID_IHTMLIMGELEMENT_ALT), displaybind, bindable]
    void alt(BSTR v);

    [propget, id(DISPID_IHTMLIMGELEMENT_ALT), displaybind, bindable]
    BSTR alt();

    [propput, id(DISPID_IHTMLIMGELEMENT_SRC), displaybind, bindable]
    void src(BSTR v);

    [propget, id(DISPID_IHTMLIMGELEMENT_SRC), displaybind, bindable]
    BSTR src();

    [propput, id(DISPID_IHTMLIMGELEMENT_LOWSRC), displaybind, bindable]
    void lowsrc(BSTR v);

    [propget, id(DISPID_IHTMLIMGELEMENT_LOWSRC), displaybind, bindable]
    BSTR lowsrc();

    [propput, id(DISPID_IHTMLIMGELEMENT_VRML), displaybind, bindable]
    void vrml(BSTR v);

    [propget, id(DISPID_IHTMLIMGELEMENT_VRML), displaybind, bindable]
    BSTR vrml();

    [propput, id(DISPID_IHTMLIMGELEMENT_DYNSRC), displaybind, bindable]
    void dynsrc(BSTR v);

    [propget, id(DISPID_IHTMLIMGELEMENT_DYNSRC), displaybind, bindable]
    BSTR dynsrc();

    [propget, id(DISPID_IHTMLIMGELEMENT_COMPLETE)]
    VARIANT_BOOL complete();

    [propput, id(DISPID_IHTMLIMGELEMENT_LOOP), displaybind, bindable]
    void loop(VARIANT v);

    [propget, id(DISPID_IHTMLIMGELEMENT_LOOP), displaybind, bindable]
    VARIANT loop();

    [propput, id(DISPID_IHTMLIMGELEMENT_ALIGN), displaybind, bindable]
    void align(BSTR v);

    [propget, id(DISPID_IHTMLIMGELEMENT_ALIGN), displaybind, bindable]
    BSTR align();

    [propput, id(DISPID_IHTMLIMGELEMENT_ONLOAD), displaybind, bindable]
    void onload(VARIANT v);

    [propget, id(DISPID_IHTMLIMGELEMENT_ONLOAD), displaybind, bindable]
    VARIANT onload();

    [propput, id(DISPID_IHTMLIMGELEMENT_ONERROR), displaybind, bindable]
    void onerror(VARIANT v);

    [propget, id(DISPID_IHTMLIMGELEMENT_ONERROR), displaybind, bindable]
    VARIANT onerror();

    [propput, id(DISPID_IHTMLIMGELEMENT_ONABORT), displaybind, bindable]
    void onabort(VARIANT v);

    [propget, id(DISPID_IHTMLIMGELEMENT_ONABORT), displaybind, bindable]
    VARIANT onabort();

    [propput, id(DISPID_IHTMLIMGELEMENT_NAME), displaybind, bindable]
    void name(BSTR v);

    [propget, id(DISPID_IHTMLIMGELEMENT_NAME), displaybind, bindable]
    BSTR name();

    [propput, id(DISPID_IHTMLIMGELEMENT_WIDTH)]
    void width(LONG v);

    [propget, id(DISPID_IHTMLIMGELEMENT_WIDTH)]
    LONG width();

    [propput, id(DISPID_IHTMLIMGELEMENT_HEIGHT)]
    void height(LONG v);

    [propget, id(DISPID_IHTMLIMGELEMENT_HEIGHT)]
    LONG height();

    [propput, id(DISPID_IHTMLIMGELEMENT_START), displaybind, bindable]
    void start(BSTR v);

    [propget, id(DISPID_IHTMLIMGELEMENT_START), displaybind, bindable]
    BSTR start();

    [propput, id(DISPID_IHTMLIMGELEMENT2_LONGDESC), displaybind, bindable]
    void longDesc(BSTR v);

    [propget, id(DISPID_IHTMLIMGELEMENT2_LONGDESC), displaybind, bindable]
    BSTR longDesc();
}

/*****************************************************************************
 *    IHTMLControlElement interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f4e9-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLControlElement : IDispatch
{
    [propput, id(DISPID_IHTMLCONTROLELEMENT_TABINDEX), displaybind, bindable]
    HRESULT tabIndex([in] short v);

    [propget, id(DISPID_IHTMLCONTROLELEMENT_TABINDEX), displaybind, bindable]
    HRESULT tabIndex([retval, out] short * p);

    [id(DISPID_IHTMLCONTROLELEMENT_FOCUS)]
    HRESULT focus();

    [propput, id(DISPID_IHTMLCONTROLELEMENT_ACCESSKEY), displaybind, bindable]
    HRESULT accessKey([in] BSTR v);

    [propget, id(DISPID_IHTMLCONTROLELEMENT_ACCESSKEY), displaybind, bindable]
    HRESULT accessKey([retval, out] BSTR * p);

    [propput, id(DISPID_IHTMLCONTROLELEMENT_ONBLUR), displaybind, bindable]
    HRESULT onblur([in] VARIANT v);

    [propget, id(DISPID_IHTMLCONTROLELEMENT_ONBLUR), displaybind, bindable]
    HRESULT onblur([retval, out] VARIANT * p);

    [propput, id(DISPID_IHTMLCONTROLELEMENT_ONFOCUS), displaybind, bindable]
    HRESULT onfocus([in] VARIANT v);

    [propget, id(DISPID_IHTMLCONTROLELEMENT_ONFOCUS), displaybind, bindable]
    HRESULT onfocus([retval, out] VARIANT * p);

    [propput, id(DISPID_IHTMLCONTROLELEMENT_ONRESIZE), displaybind, bindable]
    HRESULT onresize([in] VARIANT v);

    [propget, id(DISPID_IHTMLCONTROLELEMENT_ONRESIZE), displaybind, bindable]
    HRESULT onresize([retval, out] VARIANT * p);

    [id(DISPID_IHTMLCONTROLELEMENT_BLUR)]
    HRESULT blur();

    [id(DISPID_IHTMLCONTROLELEMENT_ADDFILTER)]
    HRESULT addFilter([in] IUnknown* pUnk);

    [id(DISPID_IHTMLCONTROLELEMENT_REMOVEFILTER)]
    HRESULT removeFilter([in] IUnknown* pUnk);

    [propget, id(DISPID_IHTMLCONTROLELEMENT_CLIENTHEIGHT), displaybind, bindable]
    HRESULT clientHeight([retval, out] LONG * p);

    [propget, id(DISPID_IHTMLCONTROLELEMENT_CLIENTWIDTH), displaybind, bindable]
    HRESULT clientWidth([retval, out] LONG * p);

    [propget, id(DISPID_IHTMLCONTROLELEMENT_CLIENTTOP), displaybind, bindable]
    HRESULT clientTop([retval, out] LONG * p);

    [propget, id(DISPID_IHTMLCONTROLELEMENT_CLIENTLEFT), displaybind, bindable]
    HRESULT clientLeft([retval, out] LONG * p);
}

/*****************************************************************************
 *    IHTMLBodyElement interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f1d8-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLBodyElement : IDispatch
{
    [propput, id(DISPID_IHTMLBODYELEMENT_BACKGROUND), displaybind, bindable]
    HRESULT background([in] BSTR v);

    [propget, id(DISPID_IHTMLBODYELEMENT_BACKGROUND), displaybind, bindable]
    HRESULT background([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLBODYELEMENT_BGPROPERTIES), displaybind, bindable]
    HRESULT bgProperties([in] BSTR v);

    [propget, id(DISPID_IHTMLBODYELEMENT_BGPROPERTIES), displaybind, bindable]
    HRESULT bgProperties([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLBODYELEMENT_LEFTMARGIN), displaybind, bindable]
    HRESULT leftMargin([in] VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_LEFTMARGIN), displaybind, bindable]
    HRESULT leftMargin([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLBODYELEMENT_TOPMARGIN), displaybind, bindable]
    HRESULT topMargin([in] VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_TOPMARGIN), displaybind, bindable]
    HRESULT topMargin([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLBODYELEMENT_RIGHTMARGIN), displaybind, bindable]
    HRESULT rightMargin([in] VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_RIGHTMARGIN), displaybind, bindable]
    HRESULT rightMargin([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLBODYELEMENT_BOTTOMMARGIN), displaybind, bindable]
    HRESULT bottomMargin([in] VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_BOTTOMMARGIN), displaybind, bindable]
    HRESULT bottomMargin([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLBODYELEMENT_NOWRAP), displaybind, bindable]
    HRESULT noWrap([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLBODYELEMENT_NOWRAP), displaybind, bindable]
    HRESULT noWrap([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLBODYELEMENT_BGCOLOR), displaybind, bindable]
    HRESULT bgColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_BGCOLOR), displaybind, bindable]
    HRESULT bgColor([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLBODYELEMENT_TEXT), displaybind, bindable]
    HRESULT text([in] VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_TEXT), displaybind, bindable]
    HRESULT text([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLBODYELEMENT_LINK), displaybind, bindable]
    HRESULT link([in] VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_LINK), displaybind, bindable]
    HRESULT link([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLBODYELEMENT_VLINK), displaybind, bindable]
    HRESULT vLink([in] VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_VLINK), displaybind, bindable]
    HRESULT vLink([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLBODYELEMENT_ALINK), displaybind, bindable]
    HRESULT aLink([in] VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_ALINK), displaybind, bindable]
    HRESULT aLink([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLBODYELEMENT_ONLOAD), displaybind, bindable]
    HRESULT onload([in] VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_ONLOAD), displaybind, bindable]
    HRESULT onload([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLBODYELEMENT_ONUNLOAD), displaybind, bindable]
    HRESULT onunload([in] VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_ONUNLOAD), displaybind, bindable]
    HRESULT onunload([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLBODYELEMENT_SCROLL), displaybind, bindable]
    HRESULT scroll([in] BSTR v);

    [propget, id(DISPID_IHTMLBODYELEMENT_SCROLL), displaybind, bindable]
    HRESULT scroll([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLBODYELEMENT_ONSELECT), displaybind, bindable]
    HRESULT onselect([in] VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_ONSELECT), displaybind, bindable]
    HRESULT onselect([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLBODYELEMENT_ONBEFOREUNLOAD), displaybind, bindable]
    HRESULT onbeforeunload([in] VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_ONBEFOREUNLOAD), displaybind, bindable]
    HRESULT onbeforeunload([retval, out] VARIANT *p);

    [id(DISPID_IHTMLBODYELEMENT_CREATETEXTRANGE)]
    HRESULT createTextRange([retval, out] IHTMLTxtRange **range);
}

/*****************************************************************************
 *    IHTMLBodyElement2 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f5c5-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLBodyElement2 : IDispatch
{
    [propput, id(DISPID_IHTMLBODYELEMENT2_ONBEFOREPRINT), displaybind, bindable]
    HRESULT onbeforeprint([in] VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT2_ONBEFOREPRINT), displaybind, bindable]
    HRESULT onbeforeprint([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLBODYELEMENT2_ONAFTERPRINT), displaybind, bindable]
    HRESULT onafterprint([in] VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT2_ONAFTERPRINT), displaybind, bindable]
    HRESULT onafterprint([retval, out] VARIANT *p);
}

[
    hidden,
    uuid(3050f507-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLBody
{
properties:
methods:
    WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;

    [propput, id(DISPID_IHTMLBODYELEMENT_BACKGROUND), displaybind, bindable]
    void background(BSTR v);

    [propget, id(DISPID_IHTMLBODYELEMENT_BACKGROUND), displaybind, bindable]
    BSTR background();

    [propput, id(DISPID_IHTMLBODYELEMENT_BGPROPERTIES), displaybind, bindable]
    void bgProperties(BSTR v);

    [propget, id(DISPID_IHTMLBODYELEMENT_BGPROPERTIES), displaybind, bindable]
    BSTR bgProperties();

    [propput, id(DISPID_IHTMLBODYELEMENT_LEFTMARGIN), displaybind, bindable]
    void leftMargin(VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_LEFTMARGIN), displaybind, bindable]
    VARIANT leftMargin();

    [propput, id(DISPID_IHTMLBODYELEMENT_TOPMARGIN), displaybind, bindable]
    void topMargin(VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_TOPMARGIN), displaybind, bindable]
    VARIANT topMargin();

    [propput, id(DISPID_IHTMLBODYELEMENT_RIGHTMARGIN), displaybind, bindable]
    void rightMargin(VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_RIGHTMARGIN), displaybind, bindable]
    VARIANT rightMargin();

    [propput, id(DISPID_IHTMLBODYELEMENT_BOTTOMMARGIN), displaybind, bindable]
    void bottomMargin(VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_BOTTOMMARGIN), displaybind, bindable]
    VARIANT bottomMargin();

    [propput, id(DISPID_IHTMLBODYELEMENT_NOWRAP), displaybind, bindable]
    void noWrap(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLBODYELEMENT_NOWRAP), displaybind, bindable]
    VARIANT_BOOL noWrap();

    [propput, id(DISPID_IHTMLBODYELEMENT_BGCOLOR), displaybind, bindable]
    void bgColor(VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_BGCOLOR), displaybind, bindable]
    VARIANT bgColor();

    [propput, id(DISPID_IHTMLBODYELEMENT_TEXT), displaybind, bindable]
    void text(VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_TEXT), displaybind, bindable]
    VARIANT text();

    [propput, id(DISPID_IHTMLBODYELEMENT_LINK), displaybind, bindable]
    void link(VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_LINK), displaybind, bindable]
    VARIANT link();

    [propput, id(DISPID_IHTMLBODYELEMENT_VLINK), displaybind, bindable]
    void vLink(VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_VLINK), displaybind, bindable]
    VARIANT vLink();

    [propput, id(DISPID_IHTMLBODYELEMENT_ALINK), displaybind, bindable]
    void aLink(VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_ALINK), displaybind, bindable]
    VARIANT aLink();

    [propput, id(DISPID_IHTMLBODYELEMENT_ONLOAD), displaybind, bindable]
    void onload(VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_ONLOAD), displaybind, bindable]
    VARIANT onload();

    [propput, id(DISPID_IHTMLBODYELEMENT_ONUNLOAD), displaybind, bindable]
    void onunload(VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_ONUNLOAD), displaybind, bindable]
    VARIANT onunload();

    [propput, id(DISPID_IHTMLBODYELEMENT_SCROLL), displaybind, bindable]
    void scroll(BSTR v);

    [propget, id(DISPID_IHTMLBODYELEMENT_SCROLL), displaybind, bindable]
    BSTR scroll();

    [propput, id(DISPID_IHTMLBODYELEMENT_ONSELECT), displaybind, bindable]
    void onselect(VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_ONSELECT), displaybind, bindable]
    VARIANT onselect();

    [propput, id(DISPID_IHTMLBODYELEMENT_ONBEFOREUNLOAD), displaybind, bindable]
    void onbeforeunload(VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT_ONBEFOREUNLOAD), displaybind, bindable]
    VARIANT onbeforeunload();

    [id(DISPID_IHTMLBODYELEMENT_CREATETEXTRANGE)]
    IHTMLTxtRange* createTextRange();

    [propput, id(DISPID_IHTMLBODYELEMENT2_ONBEFOREPRINT), displaybind, bindable]
    void onbeforeprint(VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT2_ONBEFOREPRINT), displaybind, bindable]
    VARIANT onbeforeprint();

    [propput, id(DISPID_IHTMLBODYELEMENT2_ONAFTERPRINT), displaybind, bindable]
    void onafterprint(VARIANT v);

    [propget, id(DISPID_IHTMLBODYELEMENT2_ONAFTERPRINT), displaybind, bindable]
    VARIANT onafterprint();
}

[
    uuid(3050f24a-98b5-11cf-bb82-00aa00bdce0b)
]
coclass HTMLBody
{
    [default]           dispinterface DispHTMLBody;
    [source, default]   dispinterface HTMLTextContainerEvents;
    [source]            dispinterface HTMLTextContainerEvents2;
                        interface IHTMLElement;
                        interface IHTMLElement2;
                        interface IHTMLElement3;
                        interface IHTMLElement4;
                        interface IHTMLUniqueName;
                        interface IHTMLDOMNode;
                        interface IHTMLDOMNode2;
                        interface IHTMLControlElement;
                        interface IHTMLTextContainer;
                        interface IHTMLBodyElement;
                        interface IHTMLBodyElement2;
}

/*****************************************************************************
 *    IHTMLAnchorElement interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f1da-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLAnchorElement : IDispatch
{
    [propput, id(DISPID_IHTMLANCHORELEMENT_HREF), displaybind, bindable]
    HRESULT href([in] BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_HREF), displaybind, bindable]
    HRESULT href([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLANCHORELEMENT_TARGET), displaybind, bindable]
    HRESULT target([in] BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_TARGET), displaybind, bindable]
    HRESULT target([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLANCHORELEMENT_REL), displaybind, bindable]
    HRESULT rel([in] BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_REL), displaybind, bindable]
    HRESULT rel([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLANCHORELEMENT_REV), displaybind, bindable]
    HRESULT rev([in] BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_REV), displaybind, bindable]
    HRESULT rev([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLANCHORELEMENT_URN), displaybind, bindable]
    HRESULT urn([in] BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_URN), displaybind, bindable]
    HRESULT urn([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLANCHORELEMENT_METHODS), displaybind, bindable]
    HRESULT Methods([in] BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_METHODS), displaybind, bindable]
    HRESULT Methods([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLANCHORELEMENT_NAME), displaybind, bindable]
    HRESULT name([in] BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_NAME), displaybind, bindable]
    HRESULT name([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLANCHORELEMENT_HOST)]
    HRESULT host([in] BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_HOST)]
    HRESULT host([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLANCHORELEMENT_HOSTNAME)]
    HRESULT hostname([in] BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_HOSTNAME)]
    HRESULT hostname([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLANCHORELEMENT_PATHNAME)]
    HRESULT pathname([in] BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_PATHNAME)]
    HRESULT pathname([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLANCHORELEMENT_PORT)]
    HRESULT port([in] BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_PORT)]
    HRESULT port([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLANCHORELEMENT_PROTOCOL)]
    HRESULT protocol([in] BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_PROTOCOL)]
    HRESULT protocol([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLANCHORELEMENT_SEARCH)]
    HRESULT search([in] BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_SEARCH)]
    HRESULT search([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLANCHORELEMENT_HASH)]
    HRESULT hash([in] BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_HASH)]
    HRESULT hash([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLANCHORELEMENT_ONBLUR), displaybind, bindable]
    HRESULT onblur([in] VARIANT v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_ONBLUR), displaybind, bindable]
    HRESULT onblur([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLANCHORELEMENT_ONFOCUS), displaybind, bindable]
    HRESULT onfocus([in] VARIANT v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_ONFOCUS), displaybind, bindable]
    HRESULT onfocus([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLANCHORELEMENT_ACCESSKEY), displaybind, bindable]
    HRESULT accessKey([in] BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_ACCESSKEY), displaybind, bindable]
    HRESULT accessKey([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLANCHORELEMENT_PROTOCOLLONG)]
    HRESULT protocolLong([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLANCHORELEMENT_MIMETYPE)]
    HRESULT mimeType([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLANCHORELEMENT_NAMEPROP)]
    HRESULT nameProp([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLANCHORELEMENT_TABINDEX), displaybind, bindable]
    HRESULT tabIndex([in] short v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_TABINDEX), displaybind, bindable]
    HRESULT tabIndex([retval, out] short *p);

    [id(DISPID_IHTMLANCHORELEMENT_FOCUS)]
    HRESULT focus();

    [id(DISPID_IHTMLANCHORELEMENT_BLUR)]
    HRESULT blur();
}

/*****************************************************************************
 *    DispHTMLAnchorElement dispinterface
 */
[
    hidden,
    uuid(3050f502-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLAnchorElement
{
properties:
methods:
    WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;

    [propput, id(DISPID_IHTMLANCHORELEMENT_HREF), displaybind, bindable]
    void href(BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_HREF), displaybind, bindable]
    BSTR href();

    [propput, id(DISPID_IHTMLANCHORELEMENT_TARGET), displaybind, bindable]
    void target(BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_TARGET), displaybind, bindable]
    BSTR target();

    [propput, id(DISPID_IHTMLANCHORELEMENT_REL), displaybind, bindable]
    void rel(BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_REL), displaybind, bindable]
    BSTR rel();

    [propput, id(DISPID_IHTMLANCHORELEMENT_REV), displaybind, bindable]
    void rev(BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_REV), displaybind, bindable]
    BSTR rev();

    [propput, id(DISPID_IHTMLANCHORELEMENT_URN), displaybind, bindable]
    void urn(BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_URN), displaybind, bindable]
    BSTR urn();

    [propput, id(DISPID_IHTMLANCHORELEMENT_METHODS), displaybind, bindable]
    void Methods(BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_METHODS), displaybind, bindable]
    BSTR Methods();

    [propput, id(DISPID_IHTMLANCHORELEMENT_NAME), displaybind, bindable]
    void name(BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_NAME), displaybind, bindable]
    BSTR name();

    [propput, id(DISPID_IHTMLANCHORELEMENT_HOST)]
    void host(BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_HOST)]
    BSTR host();

    [propput, id(DISPID_IHTMLANCHORELEMENT_HOSTNAME)]
    void hostname(BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_HOSTNAME)]
    BSTR hostname();

    [propput, id(DISPID_IHTMLANCHORELEMENT_PATHNAME)]
    void pathname(BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_PATHNAME)]
    BSTR pathname();

    [propput, id(DISPID_IHTMLANCHORELEMENT_PORT)]
    void port(BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_PORT)]
    BSTR port();

    [propput, id(DISPID_IHTMLANCHORELEMENT_PROTOCOL)]
    void protocol(BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_PROTOCOL)]
    BSTR protocol();

    [propput, id(DISPID_IHTMLANCHORELEMENT_SEARCH)]
    void search(BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_SEARCH)]
    BSTR search();

    [propput, id(DISPID_IHTMLANCHORELEMENT_HASH)]
    void hash(BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT_HASH)]
    BSTR hash();

    [propget, id(DISPID_IHTMLANCHORELEMENT_PROTOCOLLONG)]
    BSTR protocolLong();

    [propget, id(DISPID_IHTMLANCHORELEMENT_MIMETYPE)]
    BSTR mimeType();

    [propget, id(DISPID_IHTMLANCHORELEMENT_NAMEPROP)]
    BSTR nameProp();

    [propput, id(DISPID_IHTMLANCHORELEMENT2_CHARSET), displaybind, bindable]
    void charset(BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT2_CHARSET), displaybind, bindable]
    BSTR charset();

    [propput, id(DISPID_IHTMLANCHORELEMENT2_COORDS), displaybind, bindable]
    void coords(BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT2_COORDS), displaybind, bindable]
    BSTR coords();

    [propput, id(DISPID_IHTMLANCHORELEMENT2_HREFLANG), displaybind, bindable]
    void hreflang(BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT2_HREFLANG), displaybind, bindable]
    BSTR hreflang();

    [propput, id(DISPID_IHTMLANCHORELEMENT2_SHAPE), displaybind, bindable]
    void shape(BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT2_SHAPE), displaybind, bindable]
    BSTR shape();

    [propput, id(DISPID_IHTMLANCHORELEMENT2_TYPE), displaybind, bindable]
    void type(BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT2_TYPE), displaybind, bindable]
    BSTR type();

    [propput, id(DISPID_IHTMLANCHORELEMENT3_IE8_SHAPE)]
    void ie8_shape(BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT3_IE8_SHAPE)]
    BSTR ie8_shape();

    [propput, id(DISPID_IHTMLANCHORELEMENT3_IE8_COORDS)]
    void ie8_coords(BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT3_IE8_COORDS)]
    BSTR ie8_coords();

    [propput, id(DISPID_IHTMLANCHORELEMENT3_IE8_HREF)]
    void ie8_href(BSTR v);

    [propget, id(DISPID_IHTMLANCHORELEMENT3_IE8_HREF)]
    BSTR ie8_href();
}

/*****************************************************************************
 *    IHTMLElementCollection interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050F21F-98B5-11CF-BB82-00AA00BDCE0B)
]
interface IHTMLElementCollection : IDispatch
{
    [id(DISPID_IHTMLELEMENTCOLLECTION_TOSTRING)]
    HRESULT toString([retval, out] BSTR *String);

    [propput, id(DISPID_IHTMLELEMENTCOLLECTION_LENGTH)]
    HRESULT length([in] LONG v);

    [propget, id(DISPID_IHTMLELEMENTCOLLECTION_LENGTH)]
    HRESULT length([retval, out] LONG *p);

    [propget, id(DISPID_IHTMLELEMENTCOLLECTION__NEWENUM)]
    HRESULT _newEnum([retval, out] IUnknown **p);

    [id(DISPID_IHTMLELEMENTCOLLECTION_ITEM)]
    HRESULT item(
        [optional, in] VARIANT name,
        [optional, in] VARIANT index,
        [retval,  out] IDispatch **pdisp);

    [id(DISPID_IHTMLELEMENTCOLLECTION_TAGS)]
    HRESULT tags(
        [in] VARIANT tagName,
        [retval, out] IDispatch **pdisp);
}

/*****************************************************************************
 *    DispHTMLElementCollection dispinterface
 */
[
    hidden,
    uuid(3050f56b-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLElementCollection
{
properties:
methods:
    [id(DISPID_IHTMLELEMENTCOLLECTION_TOSTRING)]
    BSTR toString();

    [propput, id(DISPID_IHTMLELEMENTCOLLECTION_LENGTH)]
    void length(LONG v);

    [propget, id(DISPID_IHTMLELEMENTCOLLECTION_LENGTH)]
    LONG length();

    [propget, id(DISPID_IHTMLELEMENTCOLLECTION__NEWENUM), hidden, restricted]
    IUnknown *_newEnum();

    [id(DISPID_IHTMLELEMENTCOLLECTION_ITEM)]
    IDispatch *item(
            [in, optional] VARIANT name,
            [in, optional] VARIANT index);

    [id(DISPID_IHTMLELEMENTCOLLECTION_TAGS)]
    IDispatch *tags(
            [in] VARIANT tagName);

    [id(DISPID_IHTMLELEMENTCOLLECTION2_URNS)]
    IDispatch *urns([in] VARIANT urn);

    [id(DISPID_IHTMLELEMENTCOLLECTION3_NAMEDITEM)]
    IDispatch *namedItem([in] BSTR name);
}

/*****************************************************************************
 *    IHTMLSelectElement interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f244-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLSelectElement : IDispatch
{
    [propput, id(DISPID_IHTMLSELECTELEMENT_SIZE), displaybind, bindable]
    HRESULT size([in] LONG v);

    [propget, id(DISPID_IHTMLSELECTELEMENT_SIZE), displaybind, bindable]
    HRESULT size([retval, out] LONG *p);

    [propput, id(DISPID_IHTMLSELECTELEMENT_MULTIPLE), displaybind, bindable]
    HRESULT multiple([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLSELECTELEMENT_MULTIPLE), displaybind, bindable]
    HRESULT multiple([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLSELECTELEMENT_NAME), displaybind, bindable]
    HRESULT name([in] BSTR v);

    [propget, id(DISPID_IHTMLSELECTELEMENT_NAME), displaybind, bindable]
    HRESULT name([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLSELECTELEMENT_OPTIONS)]
    HRESULT options([retval, out] IDispatch **p);

    [propput, id(DISPID_IHTMLSELECTELEMENT_ONCHANGE), displaybind, bindable]
    HRESULT onchange([in] VARIANT v);

    [propget, id(DISPID_IHTMLSELECTELEMENT_ONCHANGE), displaybind, bindable]
    HRESULT onchange([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSELECTELEMENT_SELECTEDINDEX)]
    HRESULT selectedIndex([in] LONG v);

    [propget, id(DISPID_IHTMLSELECTELEMENT_SELECTEDINDEX)]
    HRESULT selectedIndex([retval, out] LONG *p);

    [propget, id(DISPID_IHTMLSELECTELEMENT_TYPE), displaybind, bindable]
    HRESULT type([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSELECTELEMENT_VALUE), displaybind, bindable]
    HRESULT value([in] BSTR v);

    [propget, id(DISPID_IHTMLSELECTELEMENT_VALUE), displaybind, bindable]
    HRESULT value([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSELECTELEMENT_DISABLED), displaybind, bindable]
    HRESULT disabled([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLSELECTELEMENT_DISABLED), displaybind, bindable]
    HRESULT disabled([retval, out] VARIANT_BOOL *p);

    [propget, id(DISPID_IHTMLSELECTELEMENT_FORM)]
    HRESULT form([retval, out] IHTMLFormElement **p);

    [id(DISPID_IHTMLSELECTELEMENT_ADD)]
    HRESULT add(
        [in] IHTMLElement *element,
        [optional, in] VARIANT before);

    [id(DISPID_IHTMLSELECTELEMENT_REMOVE)]
    HRESULT remove([defaultvalue(-1), in] LONG index);

    [propput, id(DISPID_IHTMLSELECTELEMENT_LENGTH)]
    HRESULT length([in] LONG v);

    [propget, id(DISPID_IHTMLSELECTELEMENT_LENGTH)]
    HRESULT length([retval, out] LONG *p);

    [propget, id(DISPID_IHTMLSELECTELEMENT__NEWENUM), hidden, restricted]
    HRESULT _newEnum([retval, out] IUnknown **p);

    [id(DISPID_IHTMLSELECTELEMENT_ITEM)]
    HRESULT item(
        [optional, in] VARIANT name,
        [optional, in] VARIANT index,
        [retval, out] IDispatch **pdisp);

    [id(DISPID_IHTMLSELECTELEMENT_TAGS)]
    HRESULT tags(
        [in] VARIANT tagName,
        [retval, out] IDispatch **pdisp);
}

/*****************************************************************************
 *    DispHTMLSelectElement dispinterface
 */
[
    hidden,
    uuid(3050f531-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLSelectElement
{
properties:
methods:
    WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;

    [propput, id(DISPID_IHTMLSELECTELEMENT_SIZE), displaybind, bindable]
    void size(LONG v);

    [propget, id(DISPID_IHTMLSELECTELEMENT_SIZE), displaybind, bindable]
    LONG size();

    [propput, id(DISPID_IHTMLSELECTELEMENT_MULTIPLE), displaybind, bindable]
    void multiple(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLSELECTELEMENT_MULTIPLE), displaybind, bindable]
    VARIANT_BOOL multiple();

    [propput, id(DISPID_IHTMLSELECTELEMENT_NAME), displaybind, bindable]
    void name(BSTR v);

    [propget, id(DISPID_IHTMLSELECTELEMENT_NAME), displaybind, bindable]
    BSTR name();

    [propget, id(DISPID_IHTMLSELECTELEMENT_OPTIONS)]
    IDispatch *options();

    [propput, id(DISPID_IHTMLSELECTELEMENT_ONCHANGE), displaybind, bindable]
    void onchange(VARIANT v);

    [propget, id(DISPID_IHTMLSELECTELEMENT_ONCHANGE), displaybind, bindable]
    VARIANT onchange();

    [propput, id(DISPID_IHTMLSELECTELEMENT_SELECTEDINDEX)]
    void selectedIndex(LONG v);

    [propget, id(DISPID_IHTMLSELECTELEMENT_SELECTEDINDEX)]
    LONG selectedIndex();

    [propget, id(DISPID_IHTMLSELECTELEMENT_TYPE), displaybind, bindable]
    BSTR type();

    [propput, id(DISPID_IHTMLSELECTELEMENT_VALUE), displaybind, bindable]
    void value(BSTR v);

    [propget, id(DISPID_IHTMLSELECTELEMENT_VALUE), displaybind, bindable]
    BSTR value();

    [propget, id(DISPID_IHTMLSELECTELEMENT_FORM)]
    IHTMLFormElement *form();

    [id(DISPID_IHTMLSELECTELEMENT_ADD)]
    void add(
            [in] IHTMLElement *element,
            [in, optional] VARIANT before);

    [id(DISPID_IHTMLSELECTELEMENT_REMOVE)]
    void remove([in, defaultvalue(-1)] LONG index);

    [propput, id(DISPID_IHTMLSELECTELEMENT_LENGTH)]
    void length(LONG v);

    [propget, id(DISPID_IHTMLSELECTELEMENT_LENGTH)]
    LONG length();

    [propget, id(DISPID_IHTMLSELECTELEMENT__NEWENUM), hidden, restricted]
    IUnknown *_newEnum();

    [id(DISPID_IHTMLSELECTELEMENT_ITEM)]
    IDispatch *item(
            [in, optional] VARIANT name,
            [in, optional] VARIANT index);

    [id(DISPID_IHTMLSELECTELEMENT_TAGS)]
    IDispatch *tags([in] VARIANT tagName);

    [id(DISPID_IHTMLSELECTELEMENT2_URNS)]
    IDispatch *urns([in] VARIANT urn);

    [id(DISPID_IHTMLSELECTELEMENT4_NAMEDITEM)]
    IDispatch *namedItem([in] BSTR name);
}

/*****************************************************************************
 *    IHTMLSelectionObject interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050F25A-98B5-11CF-BB82-00AA00BDCE0B)
]
interface IHTMLSelectionObject : IDispatch
{
    [id(DISPID_IHTMLSELECTIONOBJECT_CREATERANGE)]
    HRESULT createRange([retval, out] IDispatch **range);

    [id(DISPID_IHTMLSELECTIONOBJECT_EMPTY)]
    HRESULT empty();

    [id(DISPID_IHTMLSELECTIONOBJECT_CLEAR)]
    HRESULT clear();

    [propget, id(DISPID_IHTMLSELECTIONOBJECT_TYPE)]
    HRESULT type([retval, out] BSTR *p);
}

/*****************************************************************************
 *    IHTMLOptionElement interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050F211-98B5-11CF-BB82-00AA00BDCE0B)
]
interface IHTMLOptionElement : IDispatch
{
    [propput, id(DISPID_IHTMLOPTIONELEMENT_SELECTED)]
    HRESULT selected([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLOPTIONELEMENT_SELECTED)]
    HRESULT selected([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLOPTIONELEMENT_VALUE)]
    HRESULT value([in] BSTR v);

    [propget, id(DISPID_IHTMLOPTIONELEMENT_VALUE)]
    HRESULT value([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLOPTIONELEMENT_DEFAULTSELECTED)]
    HRESULT defaultSelected([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLOPTIONELEMENT_DEFAULTSELECTED)]
    HRESULT defaultSelected([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLOPTIONELEMENT_INDEX)]
    HRESULT index([in] LONG v);

    [propget, id(DISPID_IHTMLOPTIONELEMENT_INDEX)]
    HRESULT index([retval, out] LONG *p);

    [propput, id(DISPID_IHTMLOPTIONELEMENT_TEXT)]
    HRESULT text([in] BSTR v);

    [propget, id(DISPID_IHTMLOPTIONELEMENT_TEXT)]
    HRESULT text([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLOPTIONELEMENT_FORM)]
    HRESULT form([retval, out] IHTMLFormElement **p);
}

[
    odl,
    oleautomation,
    dual,
    uuid(3050f820-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLOptionElement3 : IDispatch
{
    [propput, id(DISPID_IHTMLOPTIONELEMENT3_LABEL), displaybind, bindable]
    HRESULT label([in] BSTR v);

    [propget, id(DISPID_IHTMLOPTIONELEMENT3_LABEL), displaybind, bindable]
    HRESULT label([retval, out] BSTR * p);
}

/*****************************************************************************
 *    IHTMLOptionElementFactory interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050F38C-98B5-11Cf-BB82-00AA00BDCE0B)
]
interface IHTMLOptionElementFactory : IDispatch
{
    [id(DISPID_IHTMLOPTIONELEMENTFACTORY_CREATE)]
    HRESULT create(
        [optional, in] VARIANT text,
        [optional, in] VARIANT value,
        [optional, in] VARIANT defaultselected,
        [optional, in] VARIANT selected,
        [retval, out] IHTMLOptionElement **optelem);
}

/*****************************************************************************
 *    DispHTMLOptionElement dispinterface
 */
[
    hidden,
    uuid(3050f52b-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLOptionElement
{
properties:
methods:
    WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;

    [propput, id(DISPID_IHTMLOPTIONELEMENT_SELECTED)]
    void selected(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLOPTIONELEMENT_SELECTED)]
    VARIANT_BOOL selected();

    [propput, id(DISPID_IHTMLOPTIONELEMENT_VALUE)]
    void value(BSTR v);

    [propget, id(DISPID_IHTMLOPTIONELEMENT_VALUE)]
    BSTR value();

    [propput, id(DISPID_IHTMLOPTIONELEMENT_DEFAULTSELECTED)]
    void defaultSelected(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLOPTIONELEMENT_DEFAULTSELECTED)]
    VARIANT_BOOL defaultSelected();

    [propput, id(DISPID_IHTMLOPTIONELEMENT_INDEX)]
    void index(LONG v);

    [propget, id(DISPID_IHTMLOPTIONELEMENT_INDEX)]
    LONG index();

    [propput, id(DISPID_IHTMLOPTIONELEMENT_TEXT)]
    void text(BSTR v);

    [propget, id(DISPID_IHTMLOPTIONELEMENT_TEXT)]
    BSTR text();

    [propget, id(DISPID_IHTMLOPTIONELEMENT_FORM)]
    IHTMLFormElement *form();

    [propput, id(DISPID_IHTMLOPTIONELEMENT3_LABEL), displaybind, bindable]
    void label(BSTR v);

    [propget, id(DISPID_IHTMLOPTIONELEMENT3_LABEL), displaybind, bindable]
    BSTR label();
}

[
    noncreatable,
    uuid(3050f24d-98b5-11cf-bb82-00aa00bdce0b)
]
coclass HTMLOptionElement
{
    [default]           dispinterface DispHTMLOptionElement;
    [source, default]   dispinterface HTMLElementEvents;
    [source]            dispinterface HTMLElementEvents2;
                        interface IHTMLElement;
                        interface IHTMLElement2;
                        interface IHTMLElement3;
                        interface IHTMLElement4;
                        interface IHTMLUniqueName;
                        interface IHTMLDOMNode;
                        interface IHTMLDOMNode2;
                        interface IHTMLDatabinding;
                        interface IHTMLOptionElement;
                        interface IHTMLOptionElement3;
}

/*****************************************************************************
 *    IHTMLInputElement interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f5d2-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLInputElement : IDispatch
{
    [propput, id(DISPID_IHTMLINPUTELEMENT_TYPE)]
    HRESULT type([in] BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_TYPE)]
    HRESULT type([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_VALUE), displaybind, bindable]
    HRESULT value([in] BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_VALUE), displaybind, bindable]
    HRESULT value([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_NAME), displaybind, bindable]
    HRESULT name([in] BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_NAME), displaybind, bindable]
    HRESULT name([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_STATUS)]
    HRESULT status([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_STATUS)]
    HRESULT status([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_DISABLED), displaybind, bindable]
    HRESULT disabled([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_DISABLED), displaybind, bindable]
    HRESULT disabled([retval, out] VARIANT_BOOL *p);

    [propget, id(DISPID_IHTMLINPUTELEMENT_FORM)]
    HRESULT form([retval, out] IHTMLFormElement **p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_SIZE), displaybind, bindable]
    HRESULT size([in] LONG v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_SIZE), displaybind, bindable]
    HRESULT size([retval, out] LONG *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_MAXLENGTH), displaybind, bindable]
    HRESULT maxLength([in] LONG v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_MAXLENGTH), displaybind, bindable]
    HRESULT maxLength([retval, out] LONG *p);

    [id(DISPID_IHTMLINPUTELEMENT_SELECT)]
    HRESULT select();

    [propput, id(DISPID_IHTMLINPUTELEMENT_ONCHANGE), displaybind, bindable]
    HRESULT onchange([in] VARIANT v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_ONCHANGE), displaybind, bindable]
    HRESULT onchange([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_ONSELECT), displaybind, bindable]
    HRESULT onselect([in] VARIANT v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_ONSELECT), displaybind, bindable]
    HRESULT onselect([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]
    HRESULT defaultValue([in] BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]
    HRESULT defaultValue([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_READONLY), displaybind, bindable]
    HRESULT readOnly([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_READONLY), displaybind, bindable]
    HRESULT readOnly([retval, out] VARIANT_BOOL *p);

    [id(DISPID_IHTMLINPUTELEMENT_CREATETEXTRANGE)]
    HRESULT createTextRange([retval, out] IHTMLTxtRange **range);

    [propput, id(DISPID_IHTMLINPUTELEMENT_INDETERMINATE), bindable]
    HRESULT indeterminate([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_INDETERMINATE), bindable]
    HRESULT indeterminate([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_DEFAULTCHECKED), bindable]
    HRESULT defaultChecked([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_DEFAULTCHECKED), bindable]
    HRESULT defaultChecked([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_CHECKED), bindable]
    HRESULT checked([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_CHECKED), bindable]
    HRESULT checked([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_BORDER), displaybind, bindable]
    HRESULT border([in] VARIANT v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_BORDER), displaybind, bindable]
    HRESULT border([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_VSPACE), displaybind, bindable]
    HRESULT vspace([in] LONG v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_VSPACE), displaybind, bindable]
    HRESULT vspace([retval, out] LONG *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_HSPACE), displaybind, bindable]
    HRESULT hspace([in] LONG v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_HSPACE), displaybind, bindable]
    HRESULT hspace([retval, out] LONG *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_ALT), displaybind, bindable]
    HRESULT alt([in] BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_ALT), displaybind, bindable]
    HRESULT alt([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_SRC), displaybind, bindable]
    HRESULT src([in] BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_SRC), displaybind, bindable]
    HRESULT src([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_LOWSRC), displaybind, bindable]
    HRESULT lowsrc([in] BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_LOWSRC), displaybind, bindable]
    HRESULT lowsrc([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_VRML), displaybind, bindable]
    HRESULT vrml([in] BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_VRML), displaybind, bindable]
    HRESULT vrml([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_DYNSRC), displaybind, bindable]
    HRESULT dynsrc([in] BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_DYNSRC), displaybind, bindable]
    HRESULT dynsrc([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLINPUTELEMENT_READYSTATE)]
    HRESULT readyState([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLINPUTELEMENT_COMPLETE)]
    HRESULT complete([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_LOOP), displaybind, bindable]
    HRESULT loop([in] VARIANT v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_LOOP), displaybind, bindable]
    HRESULT loop([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_ALIGN), displaybind, bindable]
    HRESULT align([in] BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_ALIGN), displaybind, bindable]
    HRESULT align([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_ONLOAD), displaybind, bindable]
    HRESULT onload([in] VARIANT v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_ONLOAD), displaybind, bindable]
    HRESULT onload([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_ONERROR), displaybind, bindable]
    HRESULT onerror([in] VARIANT v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_ONERROR), displaybind, bindable]
    HRESULT onerror([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_ONABORT), displaybind, bindable]
    HRESULT onabort([in] VARIANT v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_ONABORT), displaybind, bindable]
    HRESULT onabort([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_WIDTH)]
    HRESULT width([in] LONG v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_WIDTH)]
    HRESULT width([retval, out] LONG *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_HEIGHT)]
    HRESULT height([in] LONG v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_HEIGHT)]
    HRESULT height([retval, out] LONG *p);

    [propput, id(DISPID_IHTMLINPUTELEMENT_START), displaybind, bindable]
    HRESULT start([in] BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_START), displaybind, bindable]
    HRESULT start([retval, out] BSTR *p);
}

/*****************************************************************************
 *    IHTMLInputTextElement interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f2a6-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLInputTextElement : IDispatch
{
    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_TYPE)]
    HRESULT type([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_VALUE), displaybind, bindable]
    HRESULT value([in] BSTR v);

    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_VALUE), displaybind, bindable]
    HRESULT value([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_NAME), displaybind, bindable]
    HRESULT name([in] BSTR v);

    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_NAME), displaybind, bindable]
    HRESULT name([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_STATUS)]
    HRESULT status([in] VARIANT v);

    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_STATUS)]
    HRESULT status([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_DISABLED), displaybind, bindable]
    HRESULT disabled([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_DISABLED), displaybind, bindable]
    HRESULT disabled([retval, out] VARIANT_BOOL *p);

    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_FORM)]
    HRESULT form([retval, out] IHTMLFormElement **p);

    [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]
    HRESULT defaultValue([in] BSTR v);

    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]
    HRESULT defaultValue([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_SIZE), displaybind, bindable]
    HRESULT size([in] LONG v);

    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_SIZE), displaybind, bindable]
    HRESULT size([retval, out] LONG *p);

    [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_MAXLENGTH), displaybind, bindable]
    HRESULT maxLength([in] LONG v);

    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_MAXLENGTH), displaybind, bindable]
    HRESULT maxLength([retval, out] LONG *p);

    [id(DISPID_IHTMLINPUTTEXTELEMENT_SELECT)]
    HRESULT select();

    [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_ONCHANGE), displaybind, bindable]
    HRESULT onchange([in] VARIANT v);

    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_ONCHANGE), displaybind, bindable]
    HRESULT onchange([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_ONSELECT), displaybind, bindable]
    HRESULT onselect([in] VARIANT v);

    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_ONSELECT), displaybind, bindable]
    HRESULT onselect([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_READONLY), displaybind, bindable]
    HRESULT readOnly([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_READONLY), displaybind, bindable]
    HRESULT readOnly([retval, out] VARIANT_BOOL *p);

    [id(DISPID_IHTMLINPUTTEXTELEMENT_CREATETEXTRANGE)]
    HRESULT createTextRange([retval, out] IHTMLTxtRange **range);
}

[
    hidden,
    uuid(3050f57d-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLInputElement
{
properties:
methods:
    WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;

    [propput, id(DISPID_IHTMLINPUTELEMENT_TYPE)]
    void type(BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_TYPE)]
    BSTR type();

    [propput, id(DISPID_IHTMLINPUTELEMENT_VALUE), displaybind, bindable]
    void value(BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_VALUE), displaybind, bindable]
    BSTR value();

    [propput, id(DISPID_IHTMLINPUTELEMENT_NAME), displaybind, bindable]
    void name(BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_NAME), displaybind, bindable]
    BSTR name();

    [propput, id(DISPID_IHTMLINPUTELEMENT_STATUS)]
    void status(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_STATUS)]
    VARIANT_BOOL status();

    [propget, id(DISPID_IHTMLINPUTELEMENT_FORM)]
    IHTMLFormElement *form();

    [propput, id(DISPID_IHTMLINPUTELEMENT_SIZE), displaybind, bindable]
    void size(LONG v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_SIZE), displaybind, bindable]
    LONG size();

    [propput, id(DISPID_IHTMLINPUTELEMENT_MAXLENGTH), displaybind, bindable]
    void maxLength(LONG v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_MAXLENGTH), displaybind, bindable]
    LONG maxLength();

    [id(DISPID_IHTMLINPUTELEMENT_SELECT)]
    void select();

    [propput, id(DISPID_IHTMLINPUTELEMENT_ONCHANGE), displaybind, bindable]
    void onchange(VARIANT v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_ONCHANGE), displaybind, bindable]
    VARIANT onchange();

    [propput, id(DISPID_IHTMLINPUTELEMENT_ONSELECT), displaybind, bindable]
    void onselect(VARIANT v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_ONSELECT), displaybind, bindable]
    VARIANT onselect();

    [propput, id(DISPID_IHTMLINPUTELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]
    void defaultValue(BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]
    BSTR defaultValue();

    [propput, id(DISPID_IHTMLINPUTELEMENT_READONLY), displaybind, bindable]
    void readOnly(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_READONLY), displaybind, bindable]
    VARIANT_BOOL readOnly();

    [id(DISPID_IHTMLINPUTELEMENT_CREATETEXTRANGE)]
    IHTMLTxtRange *createTextRange();

    [propput, id(DISPID_IHTMLINPUTELEMENT_INDETERMINATE), bindable]
    void indeterminate(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_INDETERMINATE), bindable]
    VARIANT_BOOL indeterminate();

    [propput, id(DISPID_IHTMLINPUTELEMENT_DEFAULTCHECKED), bindable]
    void defaultChecked(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_DEFAULTCHECKED), bindable]
    VARIANT_BOOL defaultChecked();

    [propput, id(DISPID_IHTMLINPUTELEMENT_CHECKED), bindable]
    void checked(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_CHECKED), bindable]
    VARIANT_BOOL checked();

    [propput, id(DISPID_IHTMLINPUTELEMENT_BORDER), displaybind, bindable]
    void border(VARIANT v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_BORDER), displaybind, bindable]
    VARIANT border();

    [propput, id(DISPID_IHTMLINPUTELEMENT_VSPACE), displaybind, bindable]
    void vspace(LONG v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_VSPACE), displaybind, bindable]
    LONG vspace();

    [propput, id(DISPID_IHTMLINPUTELEMENT_HSPACE), displaybind, bindable]
    void hspace(LONG v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_HSPACE), displaybind, bindable]
    LONG hspace();

    [propput, id(DISPID_IHTMLINPUTELEMENT_ALT), displaybind, bindable]
    void alt(BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_ALT), displaybind, bindable]
    BSTR alt();

    [propput, id(DISPID_IHTMLINPUTELEMENT_SRC), displaybind, bindable]
    void src(BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_SRC), displaybind, bindable]
    BSTR src();

    [propput, id(DISPID_IHTMLINPUTELEMENT_LOWSRC), displaybind, bindable]
    void lowsrc(BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_LOWSRC), displaybind, bindable]
    BSTR lowsrc();

    [propput, id(DISPID_IHTMLINPUTELEMENT_VRML), displaybind, bindable]
    void vrml(BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_VRML), displaybind, bindable]
    BSTR vrml();

    [propput, id(DISPID_IHTMLINPUTELEMENT_DYNSRC), displaybind, bindable]
    void dynsrc(BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_DYNSRC), displaybind, bindable]
    BSTR dynsrc();

    [propget, id(DISPID_IHTMLINPUTELEMENT_COMPLETE)]
    VARIANT_BOOL complete();

    [propput, id(DISPID_IHTMLINPUTELEMENT_LOOP), displaybind, bindable]
    void loop(VARIANT v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_LOOP), displaybind, bindable]
    VARIANT loop();

    [propput, id(DISPID_IHTMLINPUTELEMENT_ALIGN), displaybind, bindable]
    void align(BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_ALIGN), displaybind, bindable]
    BSTR align();

    [propput, id(DISPID_IHTMLINPUTELEMENT_ONLOAD), displaybind, bindable]
    void onload(VARIANT v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_ONLOAD), displaybind, bindable]
    VARIANT onload();

    [propput, id(DISPID_IHTMLINPUTELEMENT_ONERROR), displaybind, bindable]
    void onerror(VARIANT v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_ONERROR), displaybind, bindable]
    VARIANT onerror();

    [propput, id(DISPID_IHTMLINPUTELEMENT_ONABORT), displaybind, bindable]
    void onabort(VARIANT v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_ONABORT), displaybind, bindable]
    VARIANT onabort();

    [propput, id(DISPID_IHTMLINPUTELEMENT_WIDTH)]
    void width(LONG v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_WIDTH)]
    LONG width();

    [propput, id(DISPID_IHTMLINPUTELEMENT_HEIGHT)]
    void height(LONG v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_HEIGHT)]
    LONG height();

    [propput, id(DISPID_IHTMLINPUTELEMENT_START), displaybind, bindable]
    void start(BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT_START), displaybind, bindable]
    BSTR start();

    [propput, id(DISPID_IHTMLINPUTELEMENT2_ACCEPT), displaybind, bindable]
    void accept(BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT2_ACCEPT), displaybind, bindable]
    BSTR accept();

    [propput, id(DISPID_IHTMLINPUTELEMENT2_USEMAP), displaybind, bindable]
    void useMap(BSTR v);

    [propget, id(DISPID_IHTMLINPUTELEMENT2_USEMAP), displaybind, bindable]
    BSTR useMap();
}

/*****************************************************************************
 *    IHTMLTextAreaElement interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f2aa-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLTextAreaElement : IDispatch
{
    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_TYPE)]
    HRESULT type([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_VALUE), displaybind, bindable]
    HRESULT value([in] BSTR v);

    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_VALUE), displaybind, bindable]
    HRESULT value([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_NAME), displaybind, bindable]
    HRESULT name([in] BSTR v);

    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_NAME), displaybind, bindable]
    HRESULT name([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_STATUS)]
    HRESULT status([in] VARIANT v);

    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_STATUS)]
    HRESULT status([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_DISABLED), displaybind, bindable]
    HRESULT disabled([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_DISABLED), displaybind, bindable]
    HRESULT disabled([retval, out] VARIANT_BOOL *p);

    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_FORM)]
    HRESULT form([retval, out] IHTMLFormElement **p);

    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]
    HRESULT defaultValue([in] BSTR v);

    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]
    HRESULT defaultValue([retval, out] BSTR *p);

    [id(DISPID_IHTMLTEXTAREAELEMENT_SELECT)]
    HRESULT select();

    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_ONCHANGE), displaybind, bindable]
    HRESULT onchange([in] VARIANT v);

    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_ONCHANGE), displaybind, bindable]
    HRESULT onchange([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_ONSELECT), displaybind, bindable]
    HRESULT onselect([in] VARIANT v);

    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_ONSELECT), displaybind, bindable]
    HRESULT onselect([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_READONLY), displaybind, bindable]
    HRESULT readOnly([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_READONLY), displaybind, bindable]
    HRESULT readOnly([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_ROWS), displaybind, bindable]
    HRESULT rows([in] LONG v);

    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_ROWS), displaybind, bindable]
    HRESULT rows([retval, out] LONG *p);

    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_COLS), displaybind, bindable]
    HRESULT cols([in] LONG v);

    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_COLS), displaybind, bindable]
    HRESULT cols([retval, out] LONG *p);

    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_WRAP), displaybind, bindable]
    HRESULT wrap([in] BSTR v);

    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_WRAP), displaybind, bindable]
    HRESULT wrap([retval, out] BSTR *p);

    [id(DISPID_IHTMLTEXTAREAELEMENT_CREATETEXTRANGE)]
    HRESULT createTextRange([retval, out] IHTMLTxtRange **range);
}

/*****************************************************************************
 *    DispHTMLTextAreaElement dispinterface
 */
[
    hidden,
    uuid(3050f521-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLTextAreaElement
{
properties:
methods:
    WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;

    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_TYPE)]
    BSTR type();

    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_VALUE), displaybind, bindable]
    void value(BSTR v);

    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_VALUE), displaybind, bindable]
    BSTR value();

    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_NAME), displaybind, bindable]
    void name(BSTR v);

    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_NAME), displaybind, bindable]
    BSTR name();

    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_STATUS)]
    void status(VARIANT v);

    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_STATUS)]
    VARIANT status();

    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_FORM)]
    IHTMLFormElement *form();

    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]
    void defaultValue(BSTR v);

    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]
    BSTR defaultValue();

    [id(DISPID_IHTMLTEXTAREAELEMENT_SELECT)]
    void select();

    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_ONCHANGE), displaybind, bindable]
    void onchange(VARIANT v);

    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_ONCHANGE), displaybind, bindable]
    VARIANT onchange();

    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_ONSELECT), displaybind, bindable]
    void onselect(VARIANT v);

    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_ONSELECT), displaybind, bindable]
    VARIANT onselect();

    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_READONLY), displaybind, bindable]
    void readOnly(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_READONLY), displaybind, bindable]
    VARIANT_BOOL readOnly();

    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_ROWS), displaybind, bindable]
    void rows(LONG v);

    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_ROWS), displaybind, bindable]
    LONG rows();

    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_COLS), displaybind, bindable]
    void cols(LONG v);

    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_COLS), displaybind, bindable]
    LONG cols();

    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_WRAP), displaybind, bindable]
    void wrap(BSTR v);

    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_WRAP), displaybind, bindable]
    BSTR wrap();

    [id(DISPID_IHTMLTEXTAREAELEMENT_CREATETEXTRANGE)]
    IHTMLTxtRange *createTextRange();
}

/*****************************************************************************
 *    IHTMLHeadElement interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f81d-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLHeadElement : IDispatch
{
    [propput, id(DISPID_IHTMLHEADELEMENT_PROFILE), displaybind, bindable]
    HRESULT profile([in] BSTR v);

    [propget, id(DISPID_IHTMLHEADELEMENT_PROFILE), displaybind, bindable]
    HRESULT profile([retval, out] BSTR *p);
}

/*****************************************************************************
 *    IHTMLHeadElement2 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3051042f-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLHeadElement2 : IDispatch
{
    [propput, id(DISPID_IHTMLHEADELEMENT2_IE8_PROFILE), displaybind, bindable]
    HRESULT profile([in] BSTR v);

    [propget, id(DISPID_IHTMLHEADELEMENT2_IE8_PROFILE), displaybind, bindable]
    HRESULT profile([retval, out] BSTR *p);
}

/*****************************************************************************
 *    IHTMLTitleElement interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f322-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLTitleElement : IDispatch
{
    [propput, id(DISPID_IHTMLTITLEELEMENT_TEXT), bindable]
    HRESULT text([in] BSTR v);

    [propget, id(DISPID_IHTMLTITLEELEMENT_TEXT), bindable]
    HRESULT text([retval, out] BSTR *p);
}

/*****************************************************************************
 *    DispHTMLHeadElement interface
 */
[
    hidden,
    uuid(3050f561-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLHeadElement
{
properties:
methods:
    WINE_HTMLELEMENT_DISPINTERFACE_DECL;

    [propput, id(DISPID_IHTMLHEADELEMENT_PROFILE), displaybind, bindable]
    void profile(BSTR v);

    [propget, id(DISPID_IHTMLHEADELEMENT_PROFILE), displaybind, bindable]
    BSTR profile();

    [propput, id(DISPID_IHTMLHEADELEMENT2_IE8_PROFILE), displaybind, bindable]
    void ie8_profile(BSTR v);

    [propget, id(DISPID_IHTMLHEADELEMENT2_IE8_PROFILE), displaybind, bindable]
    BSTR ie8_profile();
}

/*****************************************************************************
 *    DispHTMLTitleElement interface
 */
[
    hidden,
    uuid(3050f516-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLTitleElement
{
properties:
methods:
    WINE_HTMLELEMENT_DISPINTERFACE_DECL;

    [propput, id(DISPID_IHTMLTITLEELEMENT_TEXT), bindable]
    void text(BSTR v);

    [propget, id(DISPID_IHTMLTITLEELEMENT_TEXT), bindable]
    BSTR text();
}

/*****************************************************************************
 *    DispHTMLUnknownElement interface
 */
[
    hidden,
    uuid(3050f539-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLUnknownElement
{
properties:
methods:
    WINE_HTMLELEMENT_DISPINTERFACE_DECL;
}

/*****************************************************************************
 *    IOmHistory interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(FECEAAA2-8405-11CF-8BA1-00AA00476DA6)
]
interface IOmHistory : IDispatch
{
    [propget, id(DISPID_IOMHISTORY_LENGTH)]
    HRESULT length([retval, out] short *p);

    [id(DISPID_IOMHISTORY_BACK)]
    HRESULT back([optional, in] VARIANT *pvargdistance);

    [id(DISPID_IOMHISTORY_FORWARD)]
    HRESULT forward([optional, in] VARIANT *pvargdistance);

    [id(DISPID_IOMHISTORY_GO)]
    HRESULT go([optional, in] VARIANT *pvargdistance);
}

[
    noncreatable,
    uuid(FECEAAA3-8405-11cf-8BA1-00AA00476DA6)
]
coclass HTMLHistory
{
    [default]           interface IOmHistory;
}

/*****************************************************************************
 *    IHTMLMimeTypesCollection interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050F3FC-98B5-11CF-BB82-00AA00BDCE0B)
]
interface IHTMLMimeTypesCollection : IDispatch
{
    [propget, id(DISPID_IHTMLMIMETYPESCOLLECTION_LENGTH)]
    HRESULT length([retval, out] LONG *p);
}

[
    noncreatable,
    uuid(3050f3fe-98b5-11cf-bb82-00aa00bdce0b)
]
coclass CMimeTypes
{
    [default]           interface IHTMLMimeTypesCollection;
}

/*****************************************************************************
 *    IHTMLPluginsCollection interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050F3FD-98B5-11CF-BB82-00AA00BDCE0B)
]
interface IHTMLPluginsCollection : IDispatch
{
    [propget, id(DISPID_IHTMLPLUGINSCOLLECTION_LENGTH)]
    HRESULT length([retval, out] LONG *p);

    [id(DISPID_IHTMLPLUGINSCOLLECTION_REFRESH)]
    HRESULT refresh([defaultvalue(0), in] VARIANT_BOOL reload);
}

[
    hidden,
    uuid(3050f54a-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispCPlugins
{
 properties:
methods:
    [propget, id(DISPID_IHTMLPLUGINSCOLLECTION_LENGTH)]
    long length();

    [id(DISPID_IHTMLPLUGINSCOLLECTION_REFRESH)]
    void refresh([defaultvalue(0), in] VARIANT_BOOL reload);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR), hidden]
    IDispatch *constructor();
}

[
    noncreatable,
    uuid(3050f3ff-98b5-11cf-bb82-00aa00bdce0b)
]
coclass CPlugins
{
    [default]  dispinterface DispCPlugins;
               interface IHTMLPluginsCollection;
               interface IHTMLDOMConstructor;
}

/*****************************************************************************
 *    IHTMLOpsProfile interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050F401-98B5-11CF-BB82-00AA00BDCE0B)
]
interface IHTMLOpsProfile : IDispatch
{
    [id(DISPID_IHTMLOPSPROFILE_ADDREQUEST)]
    HRESULT addRequest(
        [in] BSTR name,
        [optional, in] VARIANT reserved,
        [retval, out] VARIANT_BOOL *success);

    [id(DISPID_IHTMLOPSPROFILE_CLEARREQUEST)]
    HRESULT clearRequest();

    [id(DISPID_IHTMLOPSPROFILE_DOREQUEST)]
    HRESULT doRequest(
        [in] VARIANT usage,
        [optional, in] VARIANT fname,
        [optional, in] VARIANT domain,
        [optional, in] VARIANT path,
        [optional, in] VARIANT expire,
        [optional, in] VARIANT reserved);

    [id(DISPID_IHTMLOPSPROFILE_GETATTRIBUTE)]
    HRESULT getAttribute(
        [in] BSTR name,
        [retval, out] BSTR *value);

    [id(DISPID_IHTMLOPSPROFILE_SETATTRIBUTE)]
    HRESULT setAttribute(
        [in] BSTR name,
        [in] BSTR value,
        [optional, in] VARIANT prefs,
        [retval, out] VARIANT_BOOL *success);

    [id(DISPID_IHTMLOPSPROFILE_COMMITCHANGES)]
    HRESULT commitChanges([retval, out] VARIANT_BOOL *success);

    [id(DISPID_IHTMLOPSPROFILE_ADDREADREQUEST)]
    HRESULT addReadRequest(
        [in] BSTR name,
        [optional, in] VARIANT reserved,
        [retval, out] VARIANT_BOOL *success);

    [id(DISPID_IHTMLOPSPROFILE_DOREADREQUEST)]
    HRESULT doReadRequest(
        [in] VARIANT usage,
        [optional, in] VARIANT fname,
        [optional, in] VARIANT domain,
        [optional, in] VARIANT path,
        [optional, in] VARIANT expire,
        [optional, in] VARIANT reserved);

    [id(DISPID_IHTMLOPSPROFILE_DOWRITEREQUEST)]
    HRESULT doWriteRequest([retval, out] VARIANT_BOOL *success);
}

[
    noncreatable,
    uuid(3050f402-98b5-11cf-bb82-00aa00bdce0b)
]
coclass COpsProfile
{
    [default]           interface IHTMLOpsProfile;
}

/*****************************************************************************
 *    IOmNavigator interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(FECEAAA5-8405-11CF-8BA1-00AA00476DA6)
]
interface IOmNavigator : IDispatch
{
    [propget, id(DISPID_IOMNAVIGATOR_APPCODENAME)]
    HRESULT appCodeName([retval, out] BSTR *p);

    [propget, id(DISPID_IOMNAVIGATOR_APPNAME)]
    HRESULT appName([retval, out] BSTR *p);

    [propget, id(DISPID_IOMNAVIGATOR_APPVERSION)]
    HRESULT appVersion([retval, out] BSTR *p);

    [propget, id(DISPID_IOMNAVIGATOR_USERAGENT)]
    HRESULT userAgent([retval, out] BSTR *p);

    [id(DISPID_IOMNAVIGATOR_JAVAENABLED)]
    HRESULT javaEnabled([retval, out] VARIANT_BOOL *enabled);

    [id(DISPID_IOMNAVIGATOR_TAINTENABLED)]
    HRESULT taintEnabled([retval, out] VARIANT_BOOL *enabled);

    [propget, id(DISPID_IOMNAVIGATOR_MIMETYPES)]
    HRESULT mimeTypes([retval, out] IHTMLMimeTypesCollection **p);

    [propget, id(DISPID_IOMNAVIGATOR_PLUGINS)]
    HRESULT plugins([retval, out] IHTMLPluginsCollection **p);

    [propget, id(DISPID_IOMNAVIGATOR_COOKIEENABLED)]
    HRESULT cookieEnabled([retval, out] VARIANT_BOOL *p);

    [propget, id(DISPID_IOMNAVIGATOR_OPSPROFILE)]
    HRESULT opsProfile([retval, out] IHTMLOpsProfile **p);

    [id(DISPID_IOMNAVIGATOR_TOSTRING)]
    HRESULT toString([retval, out] BSTR *String);

    [propget, id(DISPID_IOMNAVIGATOR_CPUCLASS)]
    HRESULT cpuClass([retval, out] BSTR *p);

    [propget, id(DISPID_IOMNAVIGATOR_SYSTEMLANGUAGE)]
    HRESULT systemLanguage([retval, out] BSTR *p);

    [propget, id(DISPID_IOMNAVIGATOR_BROWSERLANGUAGE), hidden]
    HRESULT browserLanguage([retval, out] BSTR *p);

    [propget, id(DISPID_IOMNAVIGATOR_USERLANGUAGE)]
    HRESULT userLanguage([retval, out] BSTR *p);

    [propget, id(DISPID_IOMNAVIGATOR_PLATFORM)]
    HRESULT platform([retval, out] BSTR *p);

    [propget, id(DISPID_IOMNAVIGATOR_APPMINORVERSION)]
    HRESULT appMinorVersion([retval, out] BSTR *p);

    [propget, id(DISPID_IOMNAVIGATOR_CONNECTIONSPEED), hidden]
    HRESULT connectionSpeed([retval, out] LONG *p);

    [propget, id(DISPID_IOMNAVIGATOR_ONLINE)]
    HRESULT onLine([retval, out] VARIANT_BOOL *p);

    [propget, id(DISPID_IOMNAVIGATOR_USERPROFILE)]
    HRESULT userProfile([retval, out] IHTMLOpsProfile **p);
}

/*****************************************************************************
 *    DispHTMLNavigator dispinterface
 */
[
    hidden,
    uuid(3050f54c-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLNavigator
{
properties:
methods:
    [propget, id(DISPID_IOMNAVIGATOR_APPCODENAME)]
    BSTR appCodeName();

    [propget, id(DISPID_IOMNAVIGATOR_APPNAME)]
    BSTR appName();

    [propget, id(DISPID_IOMNAVIGATOR_APPVERSION)]
    BSTR appVersion();

    [propget, id(DISPID_IOMNAVIGATOR_USERAGENT)]
    BSTR userAgent();

    [id(DISPID_IOMNAVIGATOR_JAVAENABLED)]
    VARIANT_BOOL javaEnabled();

    [id(DISPID_IOMNAVIGATOR_TAINTENABLED)]
    VARIANT_BOOL taintEnabled();

    [propget, id(DISPID_IOMNAVIGATOR_MIMETYPES)]
    IHTMLMimeTypesCollection *mimeTypes();

    [propget, id(DISPID_IOMNAVIGATOR_PLUGINS)]
    IHTMLPluginsCollection *plugins();

    [propget, id(DISPID_IOMNAVIGATOR_COOKIEENABLED)]
    VARIANT_BOOL cookieEnabled();

    [propget, id(DISPID_IOMNAVIGATOR_OPSPROFILE)]
    IHTMLOpsProfile *opsProfile();

    [id(DISPID_IOMNAVIGATOR_TOSTRING)]
    BSTR toString();

    [propget, id(DISPID_IOMNAVIGATOR_CPUCLASS)]
    BSTR cpuClass();

    [propget, id(DISPID_IOMNAVIGATOR_SYSTEMLANGUAGE)]
    BSTR systemLanguage();

    [propget, id(DISPID_IOMNAVIGATOR_BROWSERLANGUAGE), hidden]
    BSTR browserLanguage();

    [propget, id(DISPID_IOMNAVIGATOR_USERLANGUAGE)]
    BSTR userLanguage();

    [propget, id(DISPID_IOMNAVIGATOR_PLATFORM)]
    BSTR platform();

    [propget, id(DISPID_IOMNAVIGATOR_APPMINORVERSION)]
    BSTR appMinorVersion();

    [propget, id(DISPID_IOMNAVIGATOR_CONNECTIONSPEED), hidden]
    LONG connectionSpeed();

    [propget, id(DISPID_IOMNAVIGATOR_ONLINE)]
    VARIANT_BOOL onLine();

    [propget, id(DISPID_IOMNAVIGATOR_USERPROFILE)]
    IHTMLOpsProfile *userProfile();

    WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL;
}

[
    noncreatable,
    uuid(FECEAAA6-8405-11cf-8BA1-00AA00476DA6)
]
coclass HTMLNavigator
{
    [default]  dispinterface DispHTMLNavigator;
               interface IOmNavigator;
}

/*****************************************************************************
 *    IHTMLLocation interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(163BB1E0-6E00-11cf-837A-48DC04C10000)
]
interface IHTMLLocation : IDispatch
{
    [propput, id(DISPID_IHTMLLOCATION_HREF)]
    HRESULT href([in] BSTR v);

    [propget, id(DISPID_IHTMLLOCATION_HREF)]
    HRESULT href([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLLOCATION_PROTOCOL)]
    HRESULT protocol([in] BSTR v);

    [propget, id(DISPID_IHTMLLOCATION_PROTOCOL)]
    HRESULT protocol([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLLOCATION_HOST)]
    HRESULT host([in] BSTR v);

    [propget, id(DISPID_IHTMLLOCATION_HOST)]
    HRESULT host([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLLOCATION_HOSTNAME)]
    HRESULT hostname([in] BSTR v);

    [propget, id(DISPID_IHTMLLOCATION_HOSTNAME)]
    HRESULT hostname([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLLOCATION_PORT)]
    HRESULT port([in] BSTR v);

    [propget, id(DISPID_IHTMLLOCATION_PORT)]
    HRESULT port([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLLOCATION_PATHNAME)]
    HRESULT pathname([in] BSTR v);

    [propget, id(DISPID_IHTMLLOCATION_PATHNAME)]
    HRESULT pathname([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLLOCATION_SEARCH)]
    HRESULT search([in] BSTR v);

    [propget, id(DISPID_IHTMLLOCATION_SEARCH)]
    HRESULT search([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLLOCATION_HASH)]
    HRESULT hash([in] BSTR v);

    [propget, id(DISPID_IHTMLLOCATION_HASH)]
    HRESULT hash([retval, out] BSTR *p);

    [id(DISPID_IHTMLLOCATION_RELOAD)]
    HRESULT reload([defaultvalue(0), in] VARIANT_BOOL flag);

    [id(DISPID_IHTMLLOCATION_REPLACE)]
    HRESULT replace([in] BSTR bstr);

    [id(DISPID_IHTMLLOCATION_ASSIGN)]
    HRESULT assign([in] BSTR bstr);

    [id(DISPID_IHTMLLOCATION_TOSTRING)]
    HRESULT toString([retval, out] BSTR *String);
}

/*****************************************************************************
 *    DispHTMLLocation dispinterface
 */
[
    hidden,
    uuid(3050f54e-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLLocation
{
properties:
methods:
    [propput, id(DISPID_IHTMLLOCATION_HREF)]
    void href(BSTR v);

    [propget, id(DISPID_IHTMLLOCATION_HREF)]
    BSTR href();

    [propput, id(DISPID_IHTMLLOCATION_PROTOCOL)]
    void protocol(BSTR v);

    [propget, id(DISPID_IHTMLLOCATION_PROTOCOL)]
    BSTR protocol();

    [propput, id(DISPID_IHTMLLOCATION_HOST)]
    void host(BSTR v);

    [propget, id(DISPID_IHTMLLOCATION_HOST)]
    BSTR host();

    [propput, id(DISPID_IHTMLLOCATION_HOSTNAME)]
    void hostname(BSTR v);

    [propget, id(DISPID_IHTMLLOCATION_HOSTNAME)]
    BSTR hostname();

    [propput, id(DISPID_IHTMLLOCATION_PORT)]
    void port(BSTR v);

    [propget, id(DISPID_IHTMLLOCATION_PORT)]
    BSTR port();

    [propput, id(DISPID_IHTMLLOCATION_PATHNAME)]
    void pathname(BSTR v);

    [propget, id(DISPID_IHTMLLOCATION_PATHNAME)]
    BSTR pathname();

    [propput, id(DISPID_IHTMLLOCATION_SEARCH)]
    void search(BSTR v);

    [propget, id(DISPID_IHTMLLOCATION_SEARCH)]
    BSTR search();

    [propput, id(DISPID_IHTMLLOCATION_HASH)]
    void hash(BSTR v);

    [propget, id(DISPID_IHTMLLOCATION_HASH)]
    BSTR hash();

    [id(DISPID_IHTMLLOCATION_RELOAD)]
    void reload([in, defaultvalue(0)] VARIANT_BOOL flag);

    [id(DISPID_IHTMLLOCATION_REPLACE)]
    void replace([in] BSTR bstr);

    [id(DISPID_IHTMLLOCATION_ASSIGN)]
    void assign([in] BSTR bstr);

    [id(DISPID_IHTMLLOCATION_TOSTRING)]
    BSTR toString();

    WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL;
}

[
    noncreatable,
    uuid(163BB1E1-6E00-11cf-837A-48DC04C10000)
]
coclass HTMLLocation
{
    [default]  dispinterface DispHTMLLocation;
               interface IHTMLLocation;
}

[
    odl,
    oleautomation,
    dual,
    uuid(3050f4ce-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLBookmarkCollection : IDispatch
{
    [propget, id(DISPID_IHTMLBOOKMARKCOLLECTION_LENGTH), hidden]
    HRESULT length([out, retval] LONG *p);

    [propget, id(DISPID_IHTMLBOOKMARKCOLLECTION__NEWENUM), hidden, restricted]
    HRESULT _newEnum([out, retval] IUnknown **p);

    [id(DISPID_IHTMLBOOKMARKCOLLECTION_ITEM)]
    HRESULT item(
            [in] LONG index,
            [out, retval] VARIANT *pVarBookmark);
}

/*****************************************************************************
 *    IHTMLDataTransfer interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f4b3-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLDataTransfer : IDispatch
{
    [id(DISPID_IHTMLDATATRANSFER_SETDATA)]
    HRESULT setData(
            [in] BSTR format,
            [in] VARIANT *data,
            [out, retval] VARIANT_BOOL *pret);

    [id(DISPID_IHTMLDATATRANSFER_GETDATA)]
    HRESULT getData(
            [in] BSTR format,
            [out, retval] VARIANT *pvarRet);

    [id(DISPID_IHTMLDATATRANSFER_CLEARDATA)]
    HRESULT clearData(
            [in] BSTR format,
            [out, retval] VARIANT_BOOL *pret);

    [propput, id(DISPID_IHTMLDATATRANSFER_DROPEFFECT)]
    HRESULT dropEffect([in] BSTR v);

    [propget, id(DISPID_IHTMLDATATRANSFER_DROPEFFECT)]
    HRESULT dropEffect([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLDATATRANSFER_EFFECTALLOWED)]
    HRESULT effectAllowed([in] BSTR v);

    [propget, id(DISPID_IHTMLDATATRANSFER_EFFECTALLOWED)]
    HRESULT effectAllowed([out, retval] BSTR *p);
}

/*****************************************************************************
 *    IHTMLEventObj interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050F32D-98B5-11CF-BB82-00AA00BDCE0B)
]
interface IHTMLEventObj : IDispatch
{
    [propget, id(DISPID_IHTMLEVENTOBJ_SRCELEMENT)]
    HRESULT srcElement([retval, out] IHTMLElement **p);

    [propget, id(DISPID_IHTMLEVENTOBJ_ALTKEY)]
    HRESULT altKey([retval, out] VARIANT_BOOL *p);

    [propget, id(DISPID_IHTMLEVENTOBJ_CTRLKEY)]
    HRESULT ctrlKey([retval, out] VARIANT_BOOL *p);

    [propget, id(DISPID_IHTMLEVENTOBJ_SHIFTKEY)]
    HRESULT shiftKey([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLEVENTOBJ_RETURNVALUE)]
    HRESULT returnValue([in] VARIANT v);

    [propget, id(DISPID_IHTMLEVENTOBJ_RETURNVALUE)]
    HRESULT returnValue([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLEVENTOBJ_CANCELBUBBLE)]
    HRESULT cancelBubble([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLEVENTOBJ_CANCELBUBBLE)]
    HRESULT cancelBubble([retval, out] VARIANT_BOOL *p);

    [propget, id(DISPID_IHTMLEVENTOBJ_FROMELEMENT)]
    HRESULT fromElement([retval, out] IHTMLElement **p);

    [propget, id(DISPID_IHTMLEVENTOBJ_TOELEMENT)]
    HRESULT toElement([retval, out] IHTMLElement **p);

    [propput, id(DISPID_IHTMLEVENTOBJ_KEYCODE)]
    HRESULT keyCode([in] LONG v);

    [propget, id(DISPID_IHTMLEVENTOBJ_KEYCODE)]
    HRESULT keyCode([retval, out] LONG *p);

    [propget, id(DISPID_IHTMLEVENTOBJ_BUTTON)]
    HRESULT button([retval, out] LONG *p);

    [propget, id(DISPID_IHTMLEVENTOBJ_TYPE)]
    HRESULT type([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLEVENTOBJ_QUALIFIER)]
    HRESULT qualifier([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLEVENTOBJ_REASON)]
    HRESULT reason([retval, out] LONG *p);

    [propget, id(DISPID_IHTMLEVENTOBJ_X)]
    HRESULT x([retval, out] LONG *p);

    [propget, id(DISPID_IHTMLEVENTOBJ_Y)]
    HRESULT y([retval, out] LONG *p);

    [propget, id(DISPID_IHTMLEVENTOBJ_CLIENTX)]
    HRESULT clientX([retval, out] LONG *p);

    [propget, id(DISPID_IHTMLEVENTOBJ_CLIENTY)]
    HRESULT clientY([retval, out] LONG *p);

    [propget, id(DISPID_IHTMLEVENTOBJ_OFFSETX)]
    HRESULT offsetX([retval, out] LONG *p);

    [propget, id(DISPID_IHTMLEVENTOBJ_OFFSETY)]
    HRESULT offsetY([retval, out] LONG *p);

    [propget, id(DISPID_IHTMLEVENTOBJ_SCREENX)]
    HRESULT screenX([retval, out] LONG *p);

    [propget, id(DISPID_IHTMLEVENTOBJ_SCREENY)]
    HRESULT screenY([retval, out] LONG *p);

    [propget, id(DISPID_IHTMLEVENTOBJ_SRCFILTER)]
    HRESULT srcFilter([retval, out] IDispatch **p);
}

/*****************************************************************************
 *    DispCEventObj dispinterface
 */
[
    hidden,
    uuid(3050f558-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispCEventObj
{
properties:
methods:
    [propput, id(DISPID_IHTMLEVENTOBJ_RETURNVALUE)]
    void returnValue(VARIANT v);

    [propget, id(DISPID_IHTMLEVENTOBJ_RETURNVALUE)]
    VARIANT returnValue();

    [propput, id(DISPID_IHTMLEVENTOBJ_CANCELBUBBLE)]
    void cancelBubble(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLEVENTOBJ_CANCELBUBBLE)]
    VARIANT_BOOL cancelBubble();

    [propput, id(DISPID_IHTMLEVENTOBJ_KEYCODE)]
    void keyCode(LONG v);

    [propget, id(DISPID_IHTMLEVENTOBJ_KEYCODE)]
    LONG keyCode();

    [id(DISPID_IHTMLEVENTOBJ2_SETATTRIBUTE)]
    void setAttribute(
            [in] BSTR strAttributeName,
            [in] VARIANT AttributeValue,
            [in, defaultvalue(1)] LONG lFlags);

    [id(DISPID_IHTMLEVENTOBJ2_GETATTRIBUTE)]
    VARIANT getAttribute(
            [in] BSTR strAttributeName,
            [in, defaultvalue(0)] LONG lFlags);

    [id(DISPID_IHTMLEVENTOBJ2_REMOVEATTRIBUTE)]
    VARIANT_BOOL removeAttribute(
            [in] BSTR strAttributeName,
            [in, defaultvalue(1)] LONG lFlags);

    [propput, id(DISPID_IHTMLEVENTOBJ2_PROPERTYNAME)]
    void propertyName(BSTR v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_PROPERTYNAME)]
    BSTR propertyName();

    [propputref, id(DISPID_IHTMLEVENTOBJ2_BOOKMARKS)]
    void bookmarks(IHTMLBookmarkCollection *v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_BOOKMARKS)]
    IHTMLBookmarkCollection *bookmarks();

    [propputref, id(DISPID_IHTMLEVENTOBJ2_RECORDSET)]
    void recordset(IDispatch *v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_RECORDSET)]
    IDispatch *recordset();

    [propput, id(DISPID_IHTMLEVENTOBJ2_DATAFLD)]
    void dataFld(BSTR v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_DATAFLD)]
    BSTR dataFld();

    [propputref, id(DISPID_IHTMLEVENTOBJ2_BOUNDELEMENTS)]
    void boundElements(IHTMLElementCollection *v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_BOUNDELEMENTS)]
    IHTMLElementCollection *boundElements();

    [propput, id(DISPID_IHTMLEVENTOBJ2_REPEAT)]
    void repeat(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_REPEAT)]
    VARIANT_BOOL repeat();

    [propput, id(DISPID_IHTMLEVENTOBJ2_SRCURN)]
    void srcUrn(BSTR v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_SRCURN)]
    BSTR srcUrn();

    [propputref, id(DISPID_IHTMLEVENTOBJ2_SRCELEMENT)]
    void srcElement(IHTMLElement *v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_SRCELEMENT)]
    IHTMLElement *srcElement();

    [propput, id(DISPID_IHTMLEVENTOBJ2_ALTKEY)]
    void altKey(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_ALTKEY)]
    VARIANT_BOOL altKey();

    [propput, id(DISPID_IHTMLEVENTOBJ2_CTRLKEY)]
    void ctrlKey(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_CTRLKEY)]
    VARIANT_BOOL ctrlKey();

    [propput, id(DISPID_IHTMLEVENTOBJ2_SHIFTKEY)]
    void shiftKey(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_SHIFTKEY)]
    VARIANT_BOOL shiftKey();

    [propputref, id(DISPID_IHTMLEVENTOBJ2_FROMELEMENT)]
    void fromElement(IHTMLElement *v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_FROMELEMENT)]
    IHTMLElement *fromElement();

    [propputref, id(DISPID_IHTMLEVENTOBJ2_TOELEMENT)]
    void toElement(IHTMLElement *v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_TOELEMENT)]
    IHTMLElement *toElement();

    [propput, id(DISPID_IHTMLEVENTOBJ2_BUTTON)]
    void button(LONG v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_BUTTON)]
    LONG button();

    [propput, id(DISPID_IHTMLEVENTOBJ2_TYPE)]
    void type(BSTR v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_TYPE)]
    BSTR type();

    [propput, id(DISPID_IHTMLEVENTOBJ2_QUALIFIER)]
    void qualifier(BSTR v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_QUALIFIER)]
    BSTR qualifier();

    [propput, id(DISPID_IHTMLEVENTOBJ2_REASON)]
    void reason(LONG v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_REASON)]
    LONG reason();

    [propput, id(DISPID_IHTMLEVENTOBJ2_X)]
    void x(LONG v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_X)]
    LONG x();

    [propput, id(DISPID_IHTMLEVENTOBJ2_Y)]
    void y(LONG v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_Y)]
    LONG y();

    [propput, id(DISPID_IHTMLEVENTOBJ2_CLIENTX)]
    void clientX(LONG v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_CLIENTX)]
    LONG clientX();

    [propput, id(DISPID_IHTMLEVENTOBJ2_CLIENTY)]
    void clientY(LONG v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_CLIENTY)]
    LONG clientY();
    [propput, id(DISPID_IHTMLEVENTOBJ2_OFFSETX)]
    void offsetX(LONG v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_OFFSETX)]
    LONG offsetX();

    [propput, id(DISPID_IHTMLEVENTOBJ2_OFFSETY)]
    void offsetY(LONG v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_OFFSETY)]
    LONG offsetY();

    [propput, id(DISPID_IHTMLEVENTOBJ2_SCREENX)]
    void screenX(LONG v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_SCREENX)]
    LONG screenX();

    [propput, id(DISPID_IHTMLEVENTOBJ2_SCREENY)]
    void screenY(LONG v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_SCREENY)]
    LONG screenY();

    [propputref, id(DISPID_IHTMLEVENTOBJ2_SRCFILTER)]
    void srcFilter(IDispatch *v);

    [propget, id(DISPID_IHTMLEVENTOBJ2_SRCFILTER)]
    IDispatch *srcFilter();

    [propget, id(DISPID_IHTMLEVENTOBJ2_DATATRANSFER)]
    IHTMLDataTransfer *dataTransfer();

    [propget, id(DISPID_IHTMLEVENTOBJ3_CONTENTOVERFLOW)]
    VARIANT_BOOL contentOverflow();

    [propput, id(DISPID_IHTMLEVENTOBJ3_SHIFTLEFT)]
    void shiftLeft(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLEVENTOBJ3_SHIFTLEFT)]
    VARIANT_BOOL shiftLeft();

    [propput, id(DISPID_IHTMLEVENTOBJ3_ALTLEFT)]
    void altLeft(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLEVENTOBJ3_ALTLEFT)]
    VARIANT_BOOL altLeft();

    [propput, id(DISPID_IHTMLEVENTOBJ3_CTRLLEFT)]
    void ctrlLeft(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLEVENTOBJ3_CTRLLEFT)]
    VARIANT_BOOL ctrlLeft();

    [propget, id(DISPID_IHTMLEVENTOBJ3_IMECOMPOSITIONCHANGE), hidden, restricted, nonbrowsable]
    LONG_PTR imeCompositionChange();

    [propget, id(DISPID_IHTMLEVENTOBJ3_IMENOTIFYCOMMAND), hidden, restricted, nonbrowsable]
    LONG_PTR imeNotifyCommand();

    [propget, id(DISPID_IHTMLEVENTOBJ3_IMENOTIFYDATA), hidden, restricted, nonbrowsable]
    LONG_PTR imeNotifyData();

    [propget, id(DISPID_IHTMLEVENTOBJ3_IMEREQUEST), hidden, restricted, nonbrowsable]
    LONG_PTR imeRequest();

    [propget, id(DISPID_IHTMLEVENTOBJ3_IMEREQUESTDATA), hidden, restricted, nonbrowsable]
    LONG_PTR imeRequestData();

    [propget, id(DISPID_IHTMLEVENTOBJ3_KEYBOARDLAYOUT), hidden, restricted, nonbrowsable]
    LONG_PTR keyboardLayout();

    [propget, id(DISPID_IHTMLEVENTOBJ3_BEHAVIORCOOKIE)]
    LONG behaviorCookie();

    [propget, id(DISPID_IHTMLEVENTOBJ3_BEHAVIORPART)]
    LONG behaviorPart();

    [propget, id(DISPID_IHTMLEVENTOBJ3_NEXTPAGE)]
    BSTR nextPage();

    [propget, id(DISPID_IHTMLEVENTOBJ4_WHEELDELTA)]
    LONG wheelDelta();
}

/*****************************************************************************
 *    IHTMLFramesCollection2 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(332C4426-26CB-11D0-B483-00C04FD90119)
]
interface IHTMLFramesCollection2 : IDispatch
{
    [id(DISPID_IHTMLFRAMESCOLLECTION2_ITEM)]
    HRESULT item(
        [in] VARIANT *pvarIndex,
        [retval, out] VARIANT *pvarResult);

    [propget, id(DISPID_IHTMLFRAMESCOLLECTION2_LENGTH)]
    HRESULT length([retval, out] LONG *p);
}

/*****************************************************************************
 *    IHTMLScreen interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f35C-98B5-11CF-BB82-00AA00BDCE0B)
]
interface IHTMLScreen : IDispatch
{
    [propget, id(DISPID_IHTMLSCREEN_COLORDEPTH)]
    HRESULT colorDepth([retval, out] LONG *p);

    [propput, id(DISPID_IHTMLSCREEN_BUFFERDEPTH)]
    HRESULT bufferDepth([in] LONG v);

    [propget, id(DISPID_IHTMLSCREEN_BUFFERDEPTH)]
    HRESULT bufferDepth([retval, out] LONG *p);

    [propget, id(DISPID_IHTMLSCREEN_WIDTH)]
    HRESULT width([retval, out] LONG *p);

    [propget, id(DISPID_IHTMLSCREEN_HEIGHT)]
    HRESULT height([retval, out] LONG *p);

    [propput, id(DISPID_IHTMLSCREEN_UPDATEINTERVAL)]
    HRESULT updateInterval([in] LONG v);

    [propget, id(DISPID_IHTMLSCREEN_UPDATEINTERVAL)]
    HRESULT updateInterval([retval, out] LONG *p);

    [propget, id(DISPID_IHTMLSCREEN_AVAILHEIGHT)]
    HRESULT availHeight([retval, out] LONG *p);

    [propget, id(DISPID_IHTMLSCREEN_AVAILWIDTH)]
    HRESULT availWidth([retval, out] LONG *p);

    [propget, id(DISPID_IHTMLSCREEN_FONTSMOOTHINGENABLED)]
    HRESULT fontSmoothingEnabled([retval, out] VARIANT_BOOL *p);
}

/*****************************************************************************
 *    IHTMLWindow2 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(332C4427-26CB-11D0-B483-00C04FD90119)
]
interface IHTMLWindow2 : IHTMLFramesCollection2
{
    [propget, id(DISPID_IHTMLWINDOW2_FRAMES)]
    HRESULT frames([retval, out] IHTMLFramesCollection2 **p);

    [propput, id(DISPID_IHTMLWINDOW2_DEFAULTSTATUS)]
    HRESULT defaultStatus([in] BSTR v);

    [propget, id(DISPID_IHTMLWINDOW2_DEFAULTSTATUS)]
    HRESULT defaultStatus([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLWINDOW2_STATUS)]
    HRESULT status([in] BSTR v);

    [propget, id(DISPID_IHTMLWINDOW2_STATUS)]
    HRESULT status([retval, out] BSTR *p);

    [id(DISPID_IHTMLWINDOW2_SETTIMEOUT)]
    HRESULT setTimeout(
        [in] BSTR expression,
        [in] LONG msec,
        [optional, in] VARIANT *language,
        [retval, out] LONG *timerID);

    [id(DISPID_IHTMLWINDOW2_CLEARTIMEOUT)]
    HRESULT clearTimeout([in] LONG timerID);

    [id(DISPID_IHTMLWINDOW2_ALERT)]
    HRESULT alert([defaultvalue(""), in] BSTR message);

    [id(DISPID_IHTMLWINDOW2_CONFIRM)]
    HRESULT confirm(
        [defaultvalue(""), in] BSTR message,
        [retval, out] VARIANT_BOOL *confirmed);

    [id(DISPID_IHTMLWINDOW2_PROMPT)]
    HRESULT prompt(
        [defaultvalue(""), in] BSTR message,
        [defaultvalue("undefined"), in] BSTR defstr,
        [retval, out] VARIANT *textdata);

    [propget, id(DISPID_IHTMLWINDOW2_IMAGE)]
    HRESULT Image([retval, out] IHTMLImageElementFactory **p);

    [propget, id(DISPID_IHTMLWINDOW2_LOCATION)]
    HRESULT location([retval, out] IHTMLLocation **p);

    [propget, id(DISPID_IHTMLWINDOW2_HISTORY)]
    HRESULT history([retval, out] IOmHistory **p);

    [id(DISPID_IHTMLWINDOW2_CLOSE)]
    HRESULT close();

    [propput, id(DISPID_IHTMLWINDOW2_OPENER)]
    HRESULT opener([in] VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_OPENER)]
    HRESULT opener([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLWINDOW2_NAVIGATOR)]
    HRESULT navigator([retval, out] IOmNavigator **p);

    [propput, id(DISPID_IHTMLWINDOW2_NAME)]
    HRESULT name([in] BSTR v);

    [propget, id(DISPID_IHTMLWINDOW2_NAME)]
    HRESULT name([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLWINDOW2_PARENT)]
    HRESULT parent([retval, out] IHTMLWindow2 **p);

    [id(DISPID_IHTMLWINDOW2_OPEN)]
    HRESULT open(
        [defaultvalue(""), in] BSTR url,
        [defaultvalue(""), in] BSTR name,
        [defaultvalue(""), in] BSTR features,
        [defaultvalue(0), in] VARIANT_BOOL replace,
        [retval, out] IHTMLWindow2 **pomWindowResult);

    [propget, id(DISPID_IHTMLWINDOW2_SELF)]
    HRESULT self([retval, out] IHTMLWindow2 **p);

    [propget, id(DISPID_IHTMLWINDOW2_TOP)]
    HRESULT top([retval, out] IHTMLWindow2 **p);

    [propget, id(DISPID_IHTMLWINDOW2_WINDOW)]
    HRESULT window([retval, out] IHTMLWindow2 **p);

    [id(DISPID_IHTMLWINDOW2_NAVIGATE)]
    HRESULT navigate([in] BSTR url);

    [propput, id(DISPID_IHTMLWINDOW2_ONFOCUS)]
    HRESULT onfocus([in] VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_ONFOCUS)]
    HRESULT onfocus([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLWINDOW2_ONBLUR)]
    HRESULT onblur([in] VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_ONBLUR)]
    HRESULT onblur([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLWINDOW2_ONLOAD)]
    HRESULT onload([in] VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_ONLOAD)]
    HRESULT onload([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLWINDOW2_ONBEFOREUNLOAD)]
    HRESULT onbeforeunload([in] VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_ONBEFOREUNLOAD)]
    HRESULT onbeforeunload([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLWINDOW2_ONUNLOAD)]
    HRESULT onunload([in] VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_ONUNLOAD)]
    HRESULT onunload([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLWINDOW2_ONHELP)]
    HRESULT onhelp([in] VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_ONHELP)]
    HRESULT onhelp([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLWINDOW2_ONERROR)]
    HRESULT onerror([in] VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_ONERROR)]
    HRESULT onerror([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLWINDOW2_ONRESIZE)]
    HRESULT onresize([in] VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_ONRESIZE)]
    HRESULT onresize([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLWINDOW2_ONSCROLL)]
    HRESULT onscroll([in] VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_ONSCROLL)]
    HRESULT onscroll([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLWINDOW2_DOCUMENT)]
    HRESULT document([retval, out] IHTMLDocument2 **p);

    [propget, id(DISPID_IHTMLWINDOW2_EVENT)]
    HRESULT event([retval, out] IHTMLEventObj **p);

    [propget, id(DISPID_IHTMLWINDOW2__NEWENUM)]
    HRESULT _newEnum([retval, out] IUnknown **p);

    [id(DISPID_IHTMLWINDOW2_SHOWMODALDIALOG)]
    HRESULT showModalDialog(
        [in] BSTR dialog,
        [optional, in] VARIANT *varArgIn,
        [optional, in] VARIANT *varOptions,
        [retval, out] VARIANT *varArgOut);

    [id(DISPID_IHTMLWINDOW2_SHOWHELP)]
    HRESULT showHelp(
        [in] BSTR helpURL,
        [optional, in] VARIANT helpArg,
        [defaultvalue(""), in] BSTR features);

    [propget, id(DISPID_IHTMLWINDOW2_SCREEN)]
    HRESULT screen([retval, out] IHTMLScreen **p);

    [propget, id(DISPID_IHTMLWINDOW2_OPTION)]
    HRESULT Option([retval, out] IHTMLOptionElementFactory **p);

    [id(DISPID_IHTMLWINDOW2_FOCUS)]
    HRESULT focus();

    [propget, id(DISPID_IHTMLWINDOW2_CLOSED)]
    HRESULT closed([retval, out] VARIANT_BOOL *p);

    [id(DISPID_IHTMLWINDOW2_BLUR)]
    HRESULT blur();

    [id(DISPID_IHTMLWINDOW2_SCROLL)]
    HRESULT scroll([in] LONG x, [in] LONG y);

    [propget, id(DISPID_IHTMLWINDOW2_CLIENTINFORMATION)]
    HRESULT clientInformation([retval, out] IOmNavigator **p);

    [id(DISPID_IHTMLWINDOW2_SETINTERVAL)]
    HRESULT setInterval([
        in] BSTR expression,
        [in] LONG msec,
        [optional, in] VARIANT *language,
        [retval, out] LONG *timerID);

    [id(DISPID_IHTMLWINDOW2_CLEARINTERVAL)]
    HRESULT clearInterval([in] LONG timerID);

    [propput, id(DISPID_IHTMLWINDOW2_OFFSCREENBUFFERING)]
    HRESULT offscreenBuffering([in] VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_OFFSCREENBUFFERING)]
    HRESULT offscreenBuffering([retval, out] VARIANT *p);

    [id(DISPID_IHTMLWINDOW2_EXECSCRIPT)]
    HRESULT execScript(
        [in] BSTR scode,
        [defaultvalue("JScript"), in] BSTR language,
        [retval, out] VARIANT *pvarRet);

    [id(DISPID_IHTMLWINDOW2_TOSTRING)]
    HRESULT toString([retval, out] BSTR *String);

    [id(DISPID_IHTMLWINDOW2_SCROLLBY)]
    HRESULT scrollBy([in] LONG x, [in] LONG y);

    [id(DISPID_IHTMLWINDOW2_SCROLLTO)]
    HRESULT scrollTo([in] LONG x, [in] LONG y);

    [id(DISPID_IHTMLWINDOW2_MOVETO)]
    HRESULT moveTo([in] LONG x, [in] LONG y);

    [id(DISPID_IHTMLWINDOW2_MOVEBY)]
    HRESULT moveBy([in] LONG x, [in] LONG y);

    [id(DISPID_IHTMLWINDOW2_RESIZETO)]
    HRESULT resizeTo([in] LONG x, [in] LONG y);

    [id(DISPID_IHTMLWINDOW2_RESIZEBY)]
    HRESULT resizeBy([in] LONG x, [in] LONG y);

    [propget, id(DISPID_IHTMLWINDOW2_EXTERNAL)]
    HRESULT external([retval, out] IDispatch **p);
}

/*****************************************************************************
 *    IHTMLWindow3 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f4ae-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLWindow3 : IDispatch
{
    [propget, id(DISPID_IHTMLWINDOW3_SCREENLEFT)]
    HRESULT screenLeft([out, retval] LONG *p);

    [propget, id(DISPID_IHTMLWINDOW3_SCREENTOP)]
    HRESULT screenTop([out, retval] LONG *p);

    [id(DISPID_IHTMLWINDOW3_ATTACHEVENT)]
    HRESULT attachEvent(
            [in] BSTR event,
            [in] IDispatch *pDisp,
            [out, retval] VARIANT_BOOL *pfResult);

    [id(DISPID_IHTMLWINDOW3_DETACHEVENT)]
    HRESULT detachEvent(
            [in] BSTR event,
            [in] IDispatch *pDisp);

    [id(DISPID_IHTMLWINDOW3_SETTIMEOUT)]
    HRESULT setTimeout(
            [in] VARIANT *expression,
            [in] LONG msec,
            [in, optional] VARIANT *language,
            [out, retval] LONG *timerID);

    [id(DISPID_IHTMLWINDOW3_SETINTERVAL)]
    HRESULT setInterval(
            [in] VARIANT *expression,
            [in] LONG msec,
            [in, optional] VARIANT *language,
            [out, retval] LONG *timerID);

    [id(DISPID_IHTMLWINDOW3_PRINT)]
    HRESULT print();

    [propput, id(DISPID_IHTMLWINDOW3_ONBEFOREPRINT), displaybind, bindable]
    HRESULT onbeforeprint([in] VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW3_ONBEFOREPRINT), displaybind, bindable]
    HRESULT onbeforeprint([out, retval] VARIANT *p);

    [propput, id(DISPID_IHTMLWINDOW3_ONAFTERPRINT), displaybind, bindable]
    HRESULT onafterprint([in] VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW3_ONAFTERPRINT), displaybind, bindable]
    HRESULT onafterprint([out, retval] VARIANT *p);

    [propget, id(DISPID_IHTMLWINDOW3_CLIPBOARDDATA)]
    HRESULT clipboardData([out, retval] IHTMLDataTransfer **p);

    [id(DISPID_IHTMLWINDOW3_SHOWMODELESSDIALOG)]
    HRESULT showModelessDialog(
            [in, defaultvalue("")] BSTR url,
            [in, optional] VARIANT *varArgIn,
            [in, optional] VARIANT *options,
            [out, retval] IHTMLWindow2 **pDialog);
}

/*****************************************************************************
 *    IHTMLWindow4 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f6cf-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLWindow4 : IDispatch
{
    [id(DISPID_IHTMLWINDOW4_CREATEPOPUP)]
    HRESULT createPopup([optional, in] VARIANT* varArgIn,
                        [retval, out] IDispatch** ppPopup);

    [propget, id(DISPID_IHTMLWINDOW4_FRAMEELEMENT)]
    HRESULT frameElement([retval, out] IHTMLFrameBase* * p);
}

/*****************************************************************************
 *    IHTMLWindow5 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3051040e-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLWindow5 : IDispatch
{
    [propput, id(DISPID_IHTMLWINDOW5_XMLHTTPREQUEST)]
    HRESULT XMLHttpRequest([in] VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW5_XMLHTTPREQUEST)]
    HRESULT XMLHttpRequest([retval, out] VARIANT * p);
}

/*****************************************************************************
 *    DispHTMLScreen dispinterface
 */
[
    hidden,
    uuid(3050f591-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLScreen
{
properties:
methods:
    [propget, id(DISPID_IHTMLSCREEN_COLORDEPTH)]
    long colorDepth();

    [propput, id(DISPID_IHTMLSCREEN_BUFFERDEPTH)]
    void bufferDepth(long v);

    [propget, id(DISPID_IHTMLSCREEN_BUFFERDEPTH)]
    long bufferDepth();

    [propget, id(DISPID_IHTMLSCREEN_WIDTH)]
    long width();

    [propget, id(DISPID_IHTMLSCREEN_HEIGHT)]
    long height();

    [propput, id(DISPID_IHTMLSCREEN_UPDATEINTERVAL)]
    void updateInterval(long v);

    [propget, id(DISPID_IHTMLSCREEN_UPDATEINTERVAL)]
    long updateInterval();

    [propget, id(DISPID_IHTMLSCREEN_AVAILHEIGHT)]
    long availHeight();

    [propget, id(DISPID_IHTMLSCREEN_AVAILWIDTH)]
    long availWidth();

    [propget, id(DISPID_IHTMLSCREEN_FONTSMOOTHINGENABLED)]
    VARIANT_BOOL fontSmoothingEnabled();

    [propget, id(DISPID_IHTMLSCREEN2_LOGICALXDPI)]
    long logicalXDPI();

    [propget, id(DISPID_IHTMLSCREEN2_LOGICALYDPI)]
    long logicalYDPI();

    [propget, id(DISPID_IHTMLSCREEN2_DEVICEXDPI)]
    long deviceXDPI();

    [propget, id(DISPID_IHTMLSCREEN2_DEVICEYDPI)]
    long deviceYDPI();

    [propget, id(DISPID_IHTMLSCREEN3_SYSTEMXDPI)]
    long systemXDPI();

    [propget, id(DISPID_IHTMLSCREEN3_SYSTEMYDPI)]
    long systemYDPI();

    [propget, id(DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR), hidden]
    IDispatch *constructor();
}

/*****************************************************************************
 *    DispHTMLWindow2 dispinterface
 */
[
    hidden,
    uuid(3050f55d-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLWindow2
{
properties:
methods:
    [id(DISPID_IHTMLFRAMESCOLLECTION2_ITEM)]
    VARIANT item([in] VARIANT *pvarIndex);

    [propget, id(DISPID_IHTMLFRAMESCOLLECTION2_LENGTH)]
    LONG length();

    [propget, id(DISPID_IHTMLWINDOW2_FRAMES)]
    IHTMLFramesCollection2 *frames();

    [propput, id(DISPID_IHTMLWINDOW2_DEFAULTSTATUS)]
    void defaultStatus(BSTR v);

    [propget, id(DISPID_IHTMLWINDOW2_DEFAULTSTATUS)]
    BSTR defaultStatus();

    [propput, id(DISPID_IHTMLWINDOW2_STATUS)]
    void status(BSTR v);

    [propget, id(DISPID_IHTMLWINDOW2_STATUS)]
    BSTR status();

    [id(DISPID_IHTMLWINDOW2_CLEARTIMEOUT)]
    void clearTimeout([in] LONG timerID);

    [id(DISPID_IHTMLWINDOW2_ALERT)]
    void alert([in, defaultvalue("")] BSTR message);

    [id(DISPID_IHTMLWINDOW2_CONFIRM)]
    VARIANT_BOOL confirm([in, defaultvalue("")] BSTR message);

    [id(DISPID_IHTMLWINDOW2_PROMPT)]
    VARIANT prompt(
            [in, defaultvalue("")] BSTR message,
            [in, defaultvalue("undefined")] BSTR defstr);

    [propget, id(DISPID_IHTMLWINDOW2_IMAGE)]
    IHTMLImageElementFactory *Image();

    [propget, id(DISPID_IHTMLWINDOW2_LOCATION)]
    IHTMLLocation *location();

    [propget, id(DISPID_IHTMLWINDOW2_HISTORY)]
    IOmHistory *history();

    [id(DISPID_IHTMLWINDOW2_CLOSE)]
    void close();

    [propput, id(DISPID_IHTMLWINDOW2_OPENER)]
    void opener(VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_OPENER)]
    VARIANT opener();

    [propget, id(DISPID_IHTMLWINDOW2_NAVIGATOR)]
    IOmNavigator *navigator();

    [propput, id(DISPID_IHTMLWINDOW2_NAME)]
    void name(BSTR v);

    [propget, id(DISPID_IHTMLWINDOW2_NAME)]
    BSTR name();

    [propget, id(DISPID_IHTMLWINDOW2_PARENT)]
    IHTMLWindow2 *parent();

    [id(DISPID_IHTMLWINDOW2_OPEN)]
    IHTMLWindow2 *open(
            [in, defaultvalue("")] BSTR url,
            [in, defaultvalue("")] BSTR name,
            [in, defaultvalue("")] BSTR features,
            [in, defaultvalue(0)]  VARIANT_BOOL replace);

    [propget, id(DISPID_IHTMLWINDOW2_SELF)]
    IHTMLWindow2 *self();

    [propget, id(DISPID_IHTMLWINDOW2_TOP)]
    IHTMLWindow2 *top();

    [propget, id(DISPID_IHTMLWINDOW2_WINDOW)]
    IHTMLWindow2 *window();

    [id(DISPID_IHTMLWINDOW2_NAVIGATE)]
    void navigate([in] BSTR url);

    [propput, id(DISPID_IHTMLWINDOW2_ONFOCUS), displaybind, bindable]
    void onfocus(VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_ONFOCUS), displaybind, bindable]
    VARIANT onfocus();

    [propput, id(DISPID_IHTMLWINDOW2_ONBLUR), displaybind, bindable]
    void onblur(VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_ONBLUR), displaybind, bindable]
    VARIANT onblur();

    [propget, id(DISPID_IHTMLWINDOW2_ONLOAD), displaybind, bindable]
    VARIANT onload();

    [propput, id(DISPID_IHTMLWINDOW2_ONBEFOREUNLOAD), displaybind, bindable]
    void onbeforeunload(VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_ONBEFOREUNLOAD), displaybind, bindable]
    VARIANT onbeforeunload();

    [propput, id(DISPID_IHTMLWINDOW2_ONUNLOAD), displaybind, bindable]
    void onunload(VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_ONUNLOAD), displaybind, bindable]
    VARIANT onunload();

    [propput, id(DISPID_IHTMLWINDOW2_ONHELP), displaybind, bindable]
    void onhelp(VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_ONHELP), displaybind, bindable]
    VARIANT onhelp();

    [propput, id(DISPID_IHTMLWINDOW2_ONERROR), displaybind, bindable]
    void onerror(VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_ONERROR), displaybind, bindable]
    VARIANT onerror();

    [propput, id(DISPID_IHTMLWINDOW2_ONRESIZE), displaybind, bindable]
    void onresize(VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_ONRESIZE), displaybind, bindable]
    VARIANT onresize();

    [propput, id(DISPID_IHTMLWINDOW2_ONSCROLL), displaybind, bindable]
    void onscroll(VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_ONSCROLL), displaybind, bindable]
    VARIANT onscroll();

    [propget, id(DISPID_IHTMLWINDOW2_DOCUMENT), source]
    IHTMLDocument2 *document();

    [propget, id(DISPID_IHTMLWINDOW2_EVENT)]
    IHTMLEventObj *event();

    [propget, id(DISPID_IHTMLWINDOW2__NEWENUM), hidden, restricted]
    IUnknown *_newEnum();

    [id(DISPID_IHTMLWINDOW2_SHOWMODALDIALOG)]
    VARIANT showModalDialog(
            [in] BSTR dialog,
            [in, optional] VARIANT *varArgIn,
            [in, optional] VARIANT *varOptions);

    [id(DISPID_IHTMLWINDOW2_SHOWHELP)]
    void showHelp(
            [in] BSTR helpURL,
            [in, optional] VARIANT helpArg,
            [in, defaultvalue("")] BSTR features);

    [propget, id(DISPID_IHTMLWINDOW2_SCREEN)]
    IHTMLScreen *screen();

    [propget, id(DISPID_IHTMLWINDOW2_OPTION)]
    IHTMLOptionElementFactory *Option();

    [id(DISPID_IHTMLWINDOW2_FOCUS)]
    void focus();

    [propget, id(DISPID_IHTMLWINDOW2_CLOSED)]
    VARIANT_BOOL closed();

    [id(DISPID_IHTMLWINDOW2_BLUR)]
    void blur();

    [id(DISPID_IHTMLWINDOW2_SCROLL)]
    void scroll([in] LONG x, [in] LONG y);

    [propget, id(DISPID_IHTMLWINDOW2_CLIENTINFORMATION)]
    IOmNavigator *clientInformation();

    [id(DISPID_IHTMLWINDOW2_CLEARINTERVAL)]
    void clearInterval([in] LONG timerID);

    [propput, id(DISPID_IHTMLWINDOW2_OFFSCREENBUFFERING)]
    void offscreenBuffering(VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_OFFSCREENBUFFERING)]
    VARIANT offscreenBuffering();

    [id(DISPID_IHTMLWINDOW2_EXECSCRIPT)]
    VARIANT execScript(
            [in] BSTR _code,
            [in, defaultvalue("JScript")] BSTR language);

    [id(DISPID_IHTMLWINDOW2_TOSTRING)]
    BSTR toString();

    [id(DISPID_IHTMLWINDOW2_SCROLLBY)]
    void scrollBy([in] LONG x, [in] LONG y);

    [id(DISPID_IHTMLWINDOW2_SCROLLTO)]
    void scrollTo([in] LONG x, [in] LONG y);

    [id(DISPID_IHTMLWINDOW2_MOVETO)]
    void moveTo([in] LONG x, [in] LONG y);

    [id(DISPID_IHTMLWINDOW2_MOVEBY)]
    void moveBy([in] LONG x, [in] LONG y);

    [id(DISPID_IHTMLWINDOW2_RESIZETO)]
    void resizeTo([in] LONG x, [in] LONG y);

    [id(DISPID_IHTMLWINDOW2_RESIZEBY)]
    void resizeBy([in] LONG x, [in] LONG y);

    [propget, id(DISPID_IHTMLWINDOW2_EXTERNAL)]
    IDispatch *external();

    [propget, id(DISPID_IHTMLWINDOW3_SCREENLEFT)]
    LONG screenLeft();

    [propget, id(DISPID_IHTMLWINDOW3_SCREENTOP)]
    LONG screenTop();

    [id(DISPID_IHTMLWINDOW3_ATTACHEVENT)]
    VARIANT_BOOL attachEvent(
             [in] BSTR event,
             [in] IDispatch *pDisp);

    [id(DISPID_IHTMLWINDOW3_DETACHEVENT)]
    void detachEvent(
            [in] BSTR event,
            [in] IDispatch *pDisp);

    [id(DISPID_IHTMLWINDOW3_SETTIMEOUT)]
    LONG setTimeout(
            [in] VARIANT *expression,
            [in] LONG msec,
            [in, optional] VARIANT *language);

    [id(DISPID_IHTMLWINDOW3_SETINTERVAL)]
    LONG setInterval(
            [in] VARIANT *expression,
            [in] LONG msec,
            [in, optional] VARIANT *language);

    [id(DISPID_IHTMLWINDOW3_PRINT)]
    void print();

    [propput, id(DISPID_IHTMLWINDOW3_ONBEFOREPRINT), displaybind, bindable]
    void onbeforeprint(VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW3_ONBEFOREPRINT), displaybind, bindable]
    VARIANT onbeforeprint();

    [propput, id(DISPID_IHTMLWINDOW3_ONAFTERPRINT), displaybind, bindable]
    void onafterprint(VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW3_ONAFTERPRINT), displaybind, bindable]
    VARIANT onafterprint();

    [propget, id(DISPID_IHTMLWINDOW3_CLIPBOARDDATA)]
    IHTMLDataTransfer *clipboardData();

    [id(DISPID_IHTMLWINDOW3_SHOWMODELESSDIALOG)]
    IHTMLWindow2 *showModelessDialog(
            [in, defaultvalue("")] BSTR url,
            [in, optional] VARIANT *varArgIn,
            [in, optional] VARIANT *options);

    [id(DISPID_IHTMLWINDOW4_CREATEPOPUP)]
    IDispatch *createPopup([in, optional] VARIANT *varArgIn);

    [propget, id(DISPID_IHTMLWINDOW4_FRAMEELEMENT)]
    IHTMLFrameBase *frameElement();
}

/*****************************************************************************
 *    DispHTMLWindowProxy dispinterface
 */
[
    hidden,
    uuid(3050f55e-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLWindowProxy
{
properties:
methods:
    [id(DISPID_IHTMLFRAMESCOLLECTION2_ITEM)]
    VARIANT item([in] VARIANT* pvarIndex);

    [propget, id(DISPID_IHTMLFRAMESCOLLECTION2_LENGTH)]
    LONG length();

    [propget, id(DISPID_IHTMLWINDOW2_FRAMES)]
    IHTMLFramesCollection2* frames();

    [propput, id(DISPID_IHTMLWINDOW2_DEFAULTSTATUS)]
    void defaultStatus(BSTR v);

    [propget, id(DISPID_IHTMLWINDOW2_DEFAULTSTATUS)]
    BSTR defaultStatus();

    [propput, id(DISPID_IHTMLWINDOW2_STATUS)]
    void status(BSTR v);

    [propget, id(DISPID_IHTMLWINDOW2_STATUS)]
    BSTR status();

    [id(DISPID_IHTMLWINDOW2_CLEARTIMEOUT)]
    void clearTimeout([in] LONG timerID);

    [id(DISPID_IHTMLWINDOW2_ALERT)]
    void alert([defaultvalue(""), in] BSTR message);

    [id(DISPID_IHTMLWINDOW2_CONFIRM)]
    VARIANT_BOOL confirm([defaultvalue(""), in] BSTR message);

    [id(DISPID_IHTMLWINDOW2_PROMPT)]
    VARIANT prompt([defaultvalue(""), in] BSTR message,
                   [defaultvalue("undefined"), in] BSTR defstr);

    [propget, id(DISPID_IHTMLWINDOW2_IMAGE)]
    IHTMLImageElementFactory* Image();

    [propget, id(DISPID_IHTMLWINDOW2_LOCATION)]
    IHTMLLocation* location();

    [propget, id(DISPID_IHTMLWINDOW2_HISTORY)]
    IOmHistory* history();

    [id(DISPID_IHTMLWINDOW2_CLOSE)]
    void close();

    [propput, id(DISPID_IHTMLWINDOW2_OPENER)]
    void opener(VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_OPENER)]
    VARIANT opener();

    [propget, id(DISPID_IHTMLWINDOW2_NAVIGATOR)]
    IOmNavigator* navigator();

    [propput, id(DISPID_IHTMLWINDOW2_NAME)]
    void name(BSTR v);

    [propget, id(DISPID_IHTMLWINDOW2_NAME)]
    BSTR name();

    [propget, id(DISPID_IHTMLWINDOW2_PARENT)]
    IHTMLWindow2* parent();

    [id(DISPID_IHTMLWINDOW2_OPEN)]
    IHTMLWindow2* open([defaultvalue(""), in] BSTR url,
                       [defaultvalue(""), in] BSTR name,
                       [defaultvalue(""), in] BSTR features,
                       [defaultvalue(0), in] VARIANT_BOOL replace);

    [propget, id(DISPID_IHTMLWINDOW2_SELF)]
    IHTMLWindow2* self();

    [propget, id(DISPID_IHTMLWINDOW2_TOP)]
    IHTMLWindow2* top();

    [propget, id(DISPID_IHTMLWINDOW2_WINDOW)]
    IHTMLWindow2* window();

    [id(DISPID_IHTMLWINDOW2_NAVIGATE)]
    void navigate([in] BSTR url);

    [propput, id(DISPID_IHTMLWINDOW2_ONFOCUS), displaybind, bindable]
    void onfocus(VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_ONFOCUS), displaybind, bindable]
    VARIANT onfocus();

    [propput, id(DISPID_IHTMLWINDOW2_ONBLUR), displaybind, bindable]
    void onblur(VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_ONBLUR), displaybind, bindable]
    VARIANT onblur();

    [propput, id(DISPID_IHTMLWINDOW2_ONLOAD), displaybind, bindable]
    void onload(VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_ONLOAD), displaybind, bindable]
    VARIANT onload();

    [propput, id(DISPID_IHTMLWINDOW2_ONBEFOREUNLOAD), displaybind, bindable]
    void onbeforeunload(VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_ONBEFOREUNLOAD), displaybind, bindable]
    VARIANT onbeforeunload();

    [propput, id(DISPID_IHTMLWINDOW2_ONUNLOAD), displaybind, bindable]
    void onunload(VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_ONUNLOAD), displaybind, bindable]
    VARIANT onunload();

    [propput, id(DISPID_IHTMLWINDOW2_ONHELP), displaybind, bindable]
    void onhelp(VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_ONHELP), displaybind, bindable]
    VARIANT onhelp();

    [propput, id(DISPID_IHTMLWINDOW2_ONERROR), displaybind, bindable]
    void onerror(VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_ONERROR), displaybind, bindable]
    VARIANT onerror();

    [propput, id(DISPID_IHTMLWINDOW2_ONRESIZE), displaybind, bindable]
    void onresize(VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_ONRESIZE), displaybind, bindable]
    VARIANT onresize();

    [propput, id(DISPID_IHTMLWINDOW2_ONSCROLL), displaybind, bindable]
    void onscroll(VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_ONSCROLL), displaybind, bindable]
    VARIANT onscroll();

    [propget, id(DISPID_IHTMLWINDOW2_DOCUMENT), source]
    IHTMLDocument2* document();

    [propget, id(DISPID_IHTMLWINDOW2_EVENT)]
    IHTMLEventObj* event();

    [propget, id(DISPID_IHTMLWINDOW2__NEWENUM), hidden, restricted]
    IUnknown* _newEnum();

    [id(DISPID_IHTMLWINDOW2_SHOWMODALDIALOG)]
    VARIANT showModalDialog([in] BSTR dialog,
                            [optional, in] VARIANT* varArgIn,
                            [optional, in] VARIANT* varOptions);

    [id(DISPID_IHTMLWINDOW2_SHOWHELP)]
    void showHelp([in] BSTR helpURL,
                  [optional, in] VARIANT helpArg,
                  [defaultvalue(""), in] BSTR features);

    [propget, id(DISPID_IHTMLWINDOW2_SCREEN)]
    IHTMLScreen* screen();

    [propget, id(DISPID_IHTMLWINDOW2_OPTION)]
    IHTMLOptionElementFactory* Option();

    [id(DISPID_IHTMLWINDOW2_FOCUS)]
    void focus();

    [propget, id(DISPID_IHTMLWINDOW2_CLOSED)]
    VARIANT_BOOL closed();

    [id(DISPID_IHTMLWINDOW2_BLUR)]
    void blur();

    [id(DISPID_IHTMLWINDOW2_SCROLL)]
    void scroll([in] LONG x,
                [in] LONG y);

    [propget, id(DISPID_IHTMLWINDOW2_CLIENTINFORMATION)]
    IOmNavigator* clientInformation();

    [id(DISPID_IHTMLWINDOW2_CLEARINTERVAL)]
    void clearInterval([in] LONG timerID);

    [propput, id(DISPID_IHTMLWINDOW2_OFFSCREENBUFFERING)]
    void offscreenBuffering(VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW2_OFFSCREENBUFFERING)]
    VARIANT offscreenBuffering();

    [id(DISPID_IHTMLWINDOW2_EXECSCRIPT)]
    VARIANT execScript([in] BSTR code,
                       [defaultvalue("JScript"), in] BSTR language);

    [id(DISPID_IHTMLWINDOW2_TOSTRING)]
    BSTR toString();

    [id(DISPID_IHTMLWINDOW2_SCROLLBY)]
    void scrollBy([in] LONG x,
                  [in] LONG y);

    [id(DISPID_IHTMLWINDOW2_SCROLLTO)]
    void scrollTo([in] LONG x,
                  [in] LONG y);

    [id(DISPID_IHTMLWINDOW2_MOVETO)]
    void moveTo([in] LONG x,
                [in] LONG y);

    [id(DISPID_IHTMLWINDOW2_MOVEBY)]
    void moveBy([in] LONG x,
                [in] LONG y);

    [id(DISPID_IHTMLWINDOW2_RESIZETO)]
    void resizeTo([in] LONG x,
                  [in] LONG y);

    [id(DISPID_IHTMLWINDOW2_RESIZEBY)]
    void resizeBy([in] LONG x,
                  [in] LONG y);

    [propget, id(DISPID_IHTMLWINDOW2_EXTERNAL)]
    IDispatch* external();

    [propget, id(DISPID_IHTMLWINDOW3_SCREENLEFT)]
    LONG screenLeft();

    [propget, id(DISPID_IHTMLWINDOW3_SCREENTOP)]
    LONG screenTop();

    [id(DISPID_IHTMLWINDOW3_ATTACHEVENT)]
    VARIANT_BOOL attachEvent([in] BSTR event,
                             [in] IDispatch* pDisp);

    [id(DISPID_IHTMLWINDOW3_DETACHEVENT)]
    void detachEvent([in] BSTR event,
                     [in] IDispatch* pDisp);

    [id(DISPID_IHTMLWINDOW3_SETTIMEOUT)]
    LONG setTimeout([in] VARIANT* expression,
                    [in] LONG msec,
                    [optional, in] VARIANT* language);

    [id(DISPID_IHTMLWINDOW3_SETINTERVAL)]
    LONG setInterval([in] VARIANT* expression,
                     [in] LONG msec,
                     [optional, in] VARIANT* language);

    [id(DISPID_IHTMLWINDOW3_PRINT)]
    void print();

    [propput, id(DISPID_IHTMLWINDOW3_ONBEFOREPRINT), displaybind, bindable]
    void onbeforeprint(VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW3_ONBEFOREPRINT), displaybind, bindable]
    VARIANT onbeforeprint();

    [propput, id(DISPID_IHTMLWINDOW3_ONAFTERPRINT), displaybind, bindable]
    void onafterprint(VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW3_ONAFTERPRINT), displaybind, bindable]
    VARIANT onafterprint();

    [propget, id(DISPID_IHTMLWINDOW3_CLIPBOARDDATA)]
    IHTMLDataTransfer* clipboardData();

    [id(DISPID_IHTMLWINDOW3_SHOWMODELESSDIALOG)]
    IHTMLWindow2* showModelessDialog([defaultvalue(""), in] BSTR url,
                                     [optional, in] VARIANT* varArgIn,
                                     [optional, in] VARIANT* options);

    [id(DISPID_IHTMLWINDOW4_CREATEPOPUP)]
    IDispatch* createPopup([optional, in] VARIANT* varArgIn);

    [propget, id(DISPID_IHTMLWINDOW4_FRAMEELEMENT)]
    IHTMLFrameBase* frameElement();

    [propput, id(DISPID_IHTMLWINDOW5_XMLHTTPREQUEST)]
    void XMLHttpRequest(VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW5_XMLHTTPREQUEST)]
    VARIANT XMLHttpRequest();
}

/*****************************************************************************
 *    HTMLWindowEvents interface
 */
[
    hidden,
    uuid(96A0A4E0-D062-11cf-94B6-00AA0060275C)
]
dispinterface HTMLWindowEvents
{
properties:
methods:
    [id(DISPID_HTMLWINDOWEVENTS_ONLOAD)]
    void onload();

    [id(DISPID_HTMLWINDOWEVENTS_ONUNLOAD)]
    void onunload();

    [id(DISPID_HTMLWINDOWEVENTS_ONHELP)]
    VARIANT_BOOL onhelp();

    [id(DISPID_HTMLWINDOWEVENTS_ONFOCUS)]
    void onfocus();

    [id(DISPID_HTMLWINDOWEVENTS_ONBLUR)]
    void onblur();

    [id(DISPID_HTMLWINDOWEVENTS_ONERROR)]
    void onerror([in] BSTR description,
                 [in] BSTR url,
                 [in] LONG line);

    [id(DISPID_HTMLWINDOWEVENTS_ONRESIZE)]
    void onresize();

    [id(DISPID_HTMLWINDOWEVENTS_ONSCROLL)]
    void onscroll();

    [id(DISPID_HTMLWINDOWEVENTS_ONBEFOREUNLOAD)]
    void onbeforeunload();

    [id(DISPID_HTMLWINDOWEVENTS_ONBEFOREPRINT)]
    void onbeforeprint();

    [id(DISPID_HTMLWINDOWEVENTS_ONAFTERPRINT)]
    void onafterprint();
}

/*****************************************************************************
 *    HTMLWindowEvents2 interface
 */
[
    hidden,
    uuid(3050f625-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface HTMLWindowEvents2
{
properties:
methods:
    [id(DISPID_HTMLWINDOWEVENTS2_ONLOAD)]
    void onload([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLWINDOWEVENTS2_ONUNLOAD)]
    void onunload([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLWINDOWEVENTS2_ONHELP)]
    VARIANT_BOOL onhelp([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLWINDOWEVENTS2_ONFOCUS)]
    void onfocus([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLWINDOWEVENTS2_ONBLUR)]
    void onblur([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLWINDOWEVENTS2_ONERROR)]
    void onerror([in] BSTR description,
                 [in] BSTR url,
                 [in] LONG line);

    [id(DISPID_HTMLWINDOWEVENTS2_ONRESIZE)]
    void onresize([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLWINDOWEVENTS2_ONSCROLL)]
    void onscroll([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLWINDOWEVENTS2_ONBEFOREUNLOAD)]
    void onbeforeunload([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLWINDOWEVENTS2_ONBEFOREPRINT)]
    void onbeforeprint([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLWINDOWEVENTS2_ONAFTERPRINT)]
    void onafterprint([in] IHTMLEventObj* pEvtObj);
}

/*****************************************************************************
 *    HTMLWindowProxy class
 */
[
    uuid(3050f391-98b5-11cf-bb82-00aa00bdce0b)
]
coclass HTMLWindowProxy
{
    [default]           dispinterface DispHTMLWindowProxy;
    [source, default]   dispinterface HTMLWindowEvents;
    [source]            dispinterface HTMLWindowEvents2;
                        interface IHTMLWindow2;
                        interface IHTMLWindow3;
                        interface IHTMLWindow4;
                        interface IHTMLWindow5;
}

/*****************************************************************************
 *    HTMLDocumentEvents2 interface
 */
[
    hidden,
    uuid(3050f613-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface HTMLDocumentEvents2
{
    properties:
    methods:
    [id(DISPID_HTMLDOCUMENTEVENTS2_ONHELP)]
    VARIANT_BOOL onhelp([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONCLICK)]
    VARIANT_BOOL onclick([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONDBLCLICK)]
    VARIANT_BOOL ondblclick([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONKEYDOWN)]
    void onkeydown([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONKEYUP)]
    void onkeyup([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONKEYPRESS)]
    VARIANT_BOOL onkeypress([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEDOWN)]
    void onmousedown([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEMOVE)]
    void onmousemove([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEUP)]
    void onmouseup([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEOUT)]
    void onmouseout([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEOVER)]
    void onmouseover([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONREADYSTATECHANGE)]
    void onreadystatechange([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONBEFOREUPDATE)]
    VARIANT_BOOL onbeforeupdate([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONAFTERUPDATE)]
    void onafterupdate([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONROWEXIT)]
    VARIANT_BOOL onrowexit([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONROWENTER)]
    void onrowenter([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONDRAGSTART)]
    VARIANT_BOOL ondragstart([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONSELECTSTART)]
    VARIANT_BOOL onselectstart([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONERRORUPDATE)]
    VARIANT_BOOL onerrorupdate([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONCONTEXTMENU)]
    VARIANT_BOOL oncontextmenu([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONSTOP)]
    VARIANT_BOOL onstop([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONROWSDELETE)]
    void onrowsdelete([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONROWSINSERTED)]
    void onrowsinserted([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONCELLCHANGE)]
    void oncellchange([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONPROPERTYCHANGE)]
    void onpropertychange([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONDATASETCHANGED)]
    void ondatasetchanged([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONDATAAVAILABLE)]
    void ondataavailable([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONDATASETCOMPLETE)]
    void ondatasetcomplete([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONBEFOREEDITFOCUS)]
    void onbeforeeditfocus([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONSELECTIONCHANGE)]
    void onselectionchange([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONCONTROLSELECT)]
    VARIANT_BOOL oncontrolselect([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEWHEEL)]
    VARIANT_BOOL onmousewheel([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONFOCUSIN)]
    void onfocusin([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONFOCUSOUT)]
    void onfocusout([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONACTIVATE)]
    void onactivate([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONDEACTIVATE)]
    void ondeactivate([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONBEFOREACTIVATE)]
    VARIANT_BOOL onbeforeactivate([in] IHTMLEventObj *pEvtObj);

    [id(DISPID_HTMLDOCUMENTEVENTS2_ONBEFOREDEACTIVATE)]
    VARIANT_BOOL onbeforedeactivate([in] IHTMLEventObj *pEvtObj);
}

/*****************************************************************************
 *    HTMLDocumentEvents interface
 */
[
    hidden,
    uuid(3050f260-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface HTMLDocumentEvents
{
    properties:
    methods:
    [id(DISPID_HTMLDOCUMENTEVENTS_ONHELP)]
    VARIANT_BOOL onhelp();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONCLICK)]
    VARIANT_BOOL onclick();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONDBLCLICK)]
    VARIANT_BOOL ondblclick();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONKEYDOWN)]
    void onkeydown();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONKEYUP)]
    void onkeyup();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONKEYPRESS)]
    VARIANT_BOOL onkeypress();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONMOUSEDOWN)]
    void onmousedown();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONMOUSEMOVE)]
    void onmousemove();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONMOUSEUP)]
    void onmouseup();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONMOUSEOUT)]
    void onmouseout();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONMOUSEOVER)]
    void onmouseover();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONREADYSTATECHANGE)]
    void onreadystatechange();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONBEFOREUPDATE)]
    VARIANT_BOOL onbeforeupdate();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONAFTERUPDATE)]
    void onafterupdate();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONROWEXIT)]
    VARIANT_BOOL onrowexit();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONROWENTER)]
    void onrowenter();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONDRAGSTART)]
    VARIANT_BOOL ondragstart();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONSELECTSTART)]
    VARIANT_BOOL onselectstart();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONERRORUPDATE)]
    VARIANT_BOOL onerrorupdate();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONCONTEXTMENU)]
    VARIANT_BOOL oncontextmenu();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONSTOP)]
    VARIANT_BOOL onstop();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONROWSDELETE)]
    void onrowsdelete();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONROWSINSERTED)]
    void onrowsinserted();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONCELLCHANGE)]
    void oncellchange();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONPROPERTYCHANGE)]
    void onpropertychange();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONDATASETCHANGED)]
    void ondatasetchanged();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONDATAAVAILABLE)]
    void ondataavailable();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONDATASETCOMPLETE)]
    void ondatasetcomplete();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONBEFOREEDITFOCUS)]
    void onbeforeeditfocus();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONSELECTIONCHANGE)]
    void onselectionchange();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONCONTROLSELECT)]
    VARIANT_BOOL oncontrolselect();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONMOUSEWHEEL)]
    VARIANT_BOOL onmousewheel();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONFOCUSIN)]
    void onfocusin();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONFOCUSOUT)]
    void onfocusout();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONACTIVATE)]
    void onactivate();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONDEACTIVATE)]
    void ondeactivate();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONBEFOREACTIVATE)]
    VARIANT_BOOL onbeforeactivate();

    [id(DISPID_HTMLDOCUMENTEVENTS_ONBEFOREDEACTIVATE)]
    VARIANT_BOOL onbeforedeactivate();
}

/*****************************************************************************
 *    HTMLTextContainerEvents interface
 */
[
    hidden,
    uuid(1ff6aa72-5842-11cf-a707-00aa00c0098d)
]
dispinterface HTMLTextContainerEvents
{
properties:

methods:
    [id(DISPID_HTMLELEMENTEVENTS_ONHELP)]
    VARIANT_BOOL onhelp();

    [id(DISPID_HTMLELEMENTEVENTS_ONCLICK)]
    VARIANT_BOOL onclick();

    [id(DISPID_HTMLELEMENTEVENTS_ONDBLCLICK)]
    VARIANT_BOOL ondblclick();

    [id(DISPID_HTMLELEMENTEVENTS_ONKEYPRESS)]
    VARIANT_BOOL onkeypress();

    [id(DISPID_HTMLELEMENTEVENTS_ONKEYDOWN)]
    void onkeydown();

    [id(DISPID_HTMLELEMENTEVENTS_ONKEYUP)]
    void onkeyup();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEOUT)]
    void onmouseout();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEOVER)]
    void onmouseover();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEMOVE)]
    void onmousemove();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEDOWN)]
    void onmousedown();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEUP)]
    void onmouseup();

    [id(DISPID_HTMLELEMENTEVENTS_ONSELECTSTART)]
    VARIANT_BOOL onselectstart();

    [id(DISPID_HTMLELEMENTEVENTS_ONFILTERCHANGE)]
    void onfilterchange();

    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGSTART)]
    VARIANT_BOOL ondragstart();

    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREUPDATE)]
    VARIANT_BOOL onbeforeupdate();

    [id(DISPID_HTMLELEMENTEVENTS_ONAFTERUPDATE)]
    void onafterupdate();

    [id(DISPID_HTMLELEMENTEVENTS_ONERRORUPDATE)]
    VARIANT_BOOL onerrorupdate();

    [id(DISPID_HTMLELEMENTEVENTS_ONROWEXIT)]
    VARIANT_BOOL onrowexit();

    [id(DISPID_HTMLELEMENTEVENTS_ONROWENTER)]
    void onrowenter();

    [id(DISPID_HTMLELEMENTEVENTS_ONDATASETCHANGED)]
    void ondatasetchanged();

    [id(DISPID_HTMLELEMENTEVENTS_ONDATAAVAILABLE)]
    void ondataavailable();

    [id(DISPID_HTMLELEMENTEVENTS_ONDATASETCOMPLETE)]
    void ondatasetcomplete();

    [id(DISPID_HTMLELEMENTEVENTS_ONLOSECAPTURE)]
    void onlosecapture();

    [id(DISPID_HTMLELEMENTEVENTS_ONPROPERTYCHANGE)]
    void onpropertychange();

    [id(DISPID_HTMLELEMENTEVENTS_ONSCROLL)]
    void onscroll();

    [id(DISPID_HTMLELEMENTEVENTS_ONFOCUS)]
    void onfocus();

    [id(DISPID_HTMLELEMENTEVENTS_ONBLUR)]
    void onblur();

    [id(DISPID_HTMLELEMENTEVENTS_ONRESIZE)]
    void onresize();

    [id(DISPID_HTMLELEMENTEVENTS_ONDRAG)]
    VARIANT_BOOL ondrag();

    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGEND)]
    void ondragend();

    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGENTER)]
    VARIANT_BOOL ondragenter();

    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGOVER)]
    VARIANT_BOOL ondragover();

    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGLEAVE)]
    void ondragleave();

    [id(DISPID_HTMLELEMENTEVENTS_ONDROP)]
    VARIANT_BOOL ondrop();

    [id(DISPID_HTMLELEMENTEVENTS_ONBEFORECUT)]
    VARIANT_BOOL onbeforecut();

    [id(DISPID_HTMLELEMENTEVENTS_ONCUT)]
    VARIANT_BOOL oncut();

    [id(DISPID_HTMLELEMENTEVENTS_ONBEFORECOPY)]
    VARIANT_BOOL onbeforecopy();

    [id(DISPID_HTMLELEMENTEVENTS_ONCOPY)]
    VARIANT_BOOL oncopy();

    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREPASTE)]
    VARIANT_BOOL onbeforepaste();

    [id(DISPID_HTMLELEMENTEVENTS_ONPASTE)]
    VARIANT_BOOL onpaste();

    [id(DISPID_HTMLELEMENTEVENTS_ONCONTEXTMENU)]
    VARIANT_BOOL oncontextmenu();

    [id(DISPID_HTMLELEMENTEVENTS_ONROWSDELETE)]
    void onrowsdelete();

    [id(DISPID_HTMLELEMENTEVENTS_ONROWSINSERTED)]
    void onrowsinserted();

    [id(DISPID_HTMLELEMENTEVENTS_ONCELLCHANGE)]
    void oncellchange();

    [id(DISPID_HTMLELEMENTEVENTS_ONREADYSTATECHANGE)]
    void onreadystatechange();

    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREEDITFOCUS)]
    void onbeforeeditfocus();

    [id(DISPID_HTMLELEMENTEVENTS_ONLAYOUTCOMPLETE)]
    void onlayoutcomplete();

    [id(DISPID_HTMLELEMENTEVENTS_ONPAGE)]
    void onpage();

    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREDEACTIVATE)]
    VARIANT_BOOL onbeforedeactivate();

    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREACTIVATE)]
    VARIANT_BOOL onbeforeactivate();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOVE)]
    void onmove();

    [id(DISPID_HTMLELEMENTEVENTS_ONCONTROLSELECT)]
    VARIANT_BOOL oncontrolselect();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOVESTART)]
    VARIANT_BOOL onmovestart();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOVEEND)]
    void onmoveend();

    [id(DISPID_HTMLELEMENTEVENTS_ONRESIZESTART)]
    VARIANT_BOOL onresizestart();

    [id(DISPID_HTMLELEMENTEVENTS_ONRESIZEEND)]
    void onresizeend();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEENTER)]
    void onmouseenter();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSELEAVE)]
    void onmouseleave();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEWHEEL)]
    VARIANT_BOOL onmousewheel();

    [id(DISPID_HTMLELEMENTEVENTS_ONACTIVATE)]
    void onactivate();

    [id(DISPID_HTMLELEMENTEVENTS_ONDEACTIVATE)]
    void ondeactivate();

    [id(DISPID_HTMLELEMENTEVENTS_ONFOCUSIN)]
    void onfocusin();

    [id(DISPID_HTMLELEMENTEVENTS_ONFOCUSOUT)]
    void onfocusout();

    [id(DISPID_HTMLTEXTCONTAINEREVENTS_ONCHANGE)]
    void onchange();

    [id(DISPID_HTMLTEXTCONTAINEREVENTS_ONSELECT)]
    void onselect();
}

/*****************************************************************************
 *    HTMLTextContainerEvents2 interface
 */
[
    hidden,
    uuid(3050f624-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface HTMLTextContainerEvents2
{
properties:
methods:
    [id(DISPID_HTMLELEMENTEVENTS2_ONHELP)]
    VARIANT_BOOL onhelp([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONCLICK)]
    VARIANT_BOOL onclick([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDBLCLICK)]
    VARIANT_BOOL ondblclick([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONKEYPRESS)]
    VARIANT_BOOL onkeypress([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONKEYDOWN)]
    void onkeydown([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONKEYUP)]
    void onkeyup([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEOUT)]
    void onmouseout([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEOVER)]
    void onmouseover([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEMOVE)]
    void onmousemove([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEDOWN)]
    void onmousedown([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEUP)]
    void onmouseup([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONSELECTSTART)]
    VARIANT_BOOL onselectstart([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONFILTERCHANGE)]
    void onfilterchange([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGSTART)]
    VARIANT_BOOL ondragstart([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREUPDATE)]
    VARIANT_BOOL onbeforeupdate([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONAFTERUPDATE)]
    void onafterupdate([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONERRORUPDATE)]
    VARIANT_BOOL onerrorupdate([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONROWEXIT)]
    VARIANT_BOOL onrowexit([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONROWENTER)]
    void onrowenter([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDATASETCHANGED)]
    void ondatasetchanged([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDATAAVAILABLE)]
    void ondataavailable([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDATASETCOMPLETE)]
    void ondatasetcomplete([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONLOSECAPTURE)]
    void onlosecapture([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONPROPERTYCHANGE)]
    void onpropertychange([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONSCROLL)]
    void onscroll([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUS)]
    void onfocus([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONBLUR)]
    void onblur([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZE)]
    void onresize([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAG)]
    VARIANT_BOOL ondrag([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGEND)]
    void ondragend([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGENTER)]
    VARIANT_BOOL ondragenter([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGOVER)]
    VARIANT_BOOL ondragover([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGLEAVE)]
    void ondragleave([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDROP)]
    VARIANT_BOOL ondrop([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFORECUT)]
    VARIANT_BOOL onbeforecut([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONCUT)]
    VARIANT_BOOL oncut([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFORECOPY)]
    VARIANT_BOOL onbeforecopy([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONCOPY)]
    VARIANT_BOOL oncopy([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREPASTE)]
    VARIANT_BOOL onbeforepaste([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONPASTE)]
    VARIANT_BOOL onpaste([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONCONTEXTMENU)]
    VARIANT_BOOL oncontextmenu([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONROWSDELETE)]
    void onrowsdelete([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONROWSINSERTED)]
    void onrowsinserted([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONCELLCHANGE)]
    void oncellchange([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONREADYSTATECHANGE)]
    void onreadystatechange([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONLAYOUTCOMPLETE)]
    void onlayoutcomplete([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONPAGE)]
    void onpage([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEENTER)]
    void onmouseenter([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSELEAVE)]
    void onmouseleave([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONACTIVATE)]
    void onactivate([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDEACTIVATE)]
    void ondeactivate([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREDEACTIVATE)]
    VARIANT_BOOL onbeforedeactivate([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREACTIVATE)]
    VARIANT_BOOL onbeforeactivate([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUSIN)]
    void onfocusin([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUSOUT)]
    void onfocusout([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOVE)]
    void onmove([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONCONTROLSELECT)]
    VARIANT_BOOL oncontrolselect([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOVESTART)]
    VARIANT_BOOL onmovestart([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOVEEND)]
    void onmoveend([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZESTART)]
    VARIANT_BOOL onresizestart([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZEEND)]
    void onresizeend([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEWHEEL)]
    VARIANT_BOOL onmousewheel([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLTEXTCONTAINEREVENTS2_ONCHANGE)]
    void onchange([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLTEXTCONTAINEREVENTS2_ONSELECT)]
    void onselect([in] IHTMLEventObj* pEvtObj);
}

/*****************************************************************************
 *    IHTMLDocument interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(626FC520-A41E-11CF-A731-00A0C9082637)
]
interface IHTMLDocument : IDispatch
{
    [propget, id(DISPID_IHTMLDOCUMENT_SCRIPT)]
    HRESULT Script([retval, out] IDispatch **p);
}

/*****************************************************************************
 *    IHTMLDocument2 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(332C4425-26CB-11D0-B483-00C04FD90119)
]
interface IHTMLDocument2 : IHTMLDocument
{
    [propget, id(DISPID_IHTMLDOCUMENT2_ALL)]
    HRESULT all([retval, out] IHTMLElementCollection **p);

    [propget, id(DISPID_IHTMLDOCUMENT2_BODY)]
    HRESULT body([retval, out] IHTMLElement **p);

    [propget, id(DISPID_IHTMLDOCUMENT2_ACTIVEELEMENT)]
    HRESULT activeElement([retval, out] IHTMLElement **p);

    [propget, id(DISPID_IHTMLDOCUMENT2_IMAGES)]
    HRESULT images([retval, out] IHTMLElementCollection **p);

    [propget, id(DISPID_IHTMLDOCUMENT2_APPLETS)]
    HRESULT applets([retval, out] IHTMLElementCollection **p);

    [propget, id(DISPID_IHTMLDOCUMENT2_LINKS)]
    HRESULT links([retval, out] IHTMLElementCollection **p);

    [propget, id(DISPID_IHTMLDOCUMENT2_FORMS)]
    HRESULT forms([retval, out] IHTMLElementCollection **p);

    [propget, id(DISPID_IHTMLDOCUMENT2_ANCHORS)]
    HRESULT anchors([retval, out] IHTMLElementCollection **p);

    [propput, id(DISPID_IHTMLDOCUMENT2_TITLE)]
    HRESULT title([in] BSTR v);

    [propget, id(DISPID_IHTMLDOCUMENT2_TITLE)]
    HRESULT title([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLDOCUMENT2_SCRIPTS)]
    HRESULT scripts([retval, out] IHTMLElementCollection **p);

    [propput, id(DISPID_IHTMLDOCUMENT2_DESIGNMODE)]
    HRESULT designMode([in] BSTR v);

    [propget, id(DISPID_IHTMLDOCUMENT2_DESIGNMODE)]
    HRESULT designMode([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLDOCUMENT2_SELECTION)]
    HRESULT selection([retval, out] IHTMLSelectionObject **p);

    [propget, id(DISPID_IHTMLDOCUMENT2_READYSTATE)]
     HRESULT readyState([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLDOCUMENT2_FRAMES)]
    HRESULT frames([retval, out] IHTMLFramesCollection2 **p);

    [propget, id(DISPID_IHTMLDOCUMENT2_EMBEDS)]
    HRESULT embeds([retval, out] IHTMLElementCollection **p);

    [propget, id(DISPID_IHTMLDOCUMENT2_PLUGINS)]
    HRESULT plugins([retval, out] IHTMLElementCollection **p);

    [propput, id(DISPID_IHTMLDOCUMENT2_ALINKCOLOR)]
    HRESULT alinkColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ALINKCOLOR)]
    HRESULT alinkColor([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_BGCOLOR)]
    HRESULT bgColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_BGCOLOR)]
    HRESULT bgColor([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_FGCOLOR)]
    HRESULT fgColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_FGCOLOR)]
    HRESULT fgColor([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_LINKCOLOR)]
    HRESULT linkColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_LINKCOLOR)]
    HRESULT linkColor([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_VLINKCOLOR)]
    HRESULT vlinkColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_VLINKCOLOR)]
    HRESULT vlinkColor([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLDOCUMENT2_REFERRER)]
    HRESULT referrer([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLDOCUMENT2_LOCATION)]
    HRESULT location([retval, out] IHTMLLocation **p);

    [propget, id(DISPID_IHTMLDOCUMENT2_LASTMODIFIED)]
    HRESULT lastModified([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_URL)]
    HRESULT URL([in] BSTR v);

    [propget, id(DISPID_IHTMLDOCUMENT2_URL)]
    HRESULT URL([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_DOMAIN)]
    HRESULT domain([in] BSTR v);

    [propget, id(DISPID_IHTMLDOCUMENT2_DOMAIN)]
    HRESULT domain([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_COOKIE)]
    HRESULT cookie([in] BSTR v);

    [propget, id(DISPID_IHTMLDOCUMENT2_COOKIE)]
    HRESULT cookie([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_EXPANDO)]
    HRESULT expando([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLDOCUMENT2_EXPANDO)]
    HRESULT expando([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_CHARSET)]
     HRESULT charset([in] BSTR v);

    [propget, id(DISPID_IHTMLDOCUMENT2_CHARSET)]
    HRESULT charset([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_DEFAULTCHARSET)]
    HRESULT defaultCharset([in] BSTR v);

    [propget, id(DISPID_IHTMLDOCUMENT2_DEFAULTCHARSET)]
    HRESULT defaultCharset([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLDOCUMENT2_MIMETYPE)]
    HRESULT mimeType([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLDOCUMENT2_FILESIZE)]
    HRESULT fileSize([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLDOCUMENT2_FILECREATEDDATE)]
    HRESULT fileCreatedDate([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLDOCUMENT2_FILEMODIFIEDDATE)]
    HRESULT fileModifiedDate([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLDOCUMENT2_FILEUPDATEDDATE)]
    HRESULT fileUpdatedDate([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLDOCUMENT2_SECURITY)]
    HRESULT security([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLDOCUMENT2_PROTOCOL)]
    HRESULT protocol([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLDOCUMENT2_NAMEPROP)]
     HRESULT nameProp([retval, out] BSTR *p);

    [vararg, id(DISPID_IHTMLDOCUMENT2_WRITE)]
    HRESULT write([in] SAFEARRAY(VARIANT) psarray);

    [vararg, id(DISPID_IHTMLDOCUMENT2_WRITELN)]
    HRESULT writeln([in] SAFEARRAY(VARIANT) psarray);

    [id(DISPID_IHTMLDOCUMENT2_OPEN)]
    HRESULT open(
        [defaultvalue("text/html"), in] BSTR url,
        [optional, in] VARIANT name,
        [optional, in] VARIANT features,
        [optional, in] VARIANT replace,
        [retval, out]  IDispatch **pomWindowResult);

    [id(DISPID_IHTMLDOCUMENT2_CLOSE)]
    HRESULT close();

    [id(DISPID_IHTMLDOCUMENT2_CLEAR)]
    HRESULT clear();

    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDSUPPORTED)]
    HRESULT queryCommandSupported(
        [in] BSTR cmdID,
        [retval, out] VARIANT_BOOL *pfRet);

    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDENABLED)]
    HRESULT queryCommandEnabled(
        [in] BSTR cmdID,
        [retval, out] VARIANT_BOOL *pfRet);

    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDSTATE)]
    HRESULT queryCommandState(
        [in] BSTR cmdID,
        [retval, out] VARIANT_BOOL *pfRet);

    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDINDETERM)]
    HRESULT queryCommandIndeterm(
        [in] BSTR cmdID,
        [retval, out] VARIANT_BOOL *pfRet);

    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDTEXT)]
    HRESULT queryCommandText(
        [in] BSTR cmdID,
        [retval, out] BSTR *pcmdText);

    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDVALUE)]
    HRESULT queryCommandValue(
        [in] BSTR cmdID,
        [retval, out] VARIANT *pcmdValue);

    [id(DISPID_IHTMLDOCUMENT2_EXECCOMMAND)]
    HRESULT execCommand(
        [in] BSTR cmdID,
        [defaultvalue(0), in] VARIANT_BOOL showUI,
        [optional, in] VARIANT value,
        [retval, out] VARIANT_BOOL *pfRet);

    [id(DISPID_IHTMLDOCUMENT2_EXECCOMMANDSHOWHELP)]
    HRESULT execCommandShowHelp(
        [in] BSTR cmdID,
        [retval, out] VARIANT_BOOL *pfRet);

    [id(DISPID_IHTMLDOCUMENT2_CREATEELEMENT)]
     HRESULT createElement(
        [in] BSTR eTag,
        [retval, out] IHTMLElement **newElem);

    [propput, id(DISPID_IHTMLDOCUMENT2_ONHELP)]
    HRESULT onhelp([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONHELP)]
    HRESULT onhelp([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_ONCLICK)]
    HRESULT onclick([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONCLICK)]
    HRESULT onclick([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_ONDBLCLICK)]
    HRESULT ondblclick([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONDBLCLICK)]
    HRESULT ondblclick([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_ONKEYUP)]
    HRESULT onkeyup([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONKEYUP)]
    HRESULT onkeyup([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_ONKEYDOWN)]
    HRESULT onkeydown([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONKEYDOWN)]
    HRESULT onkeydown([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_ONKEYPRESS)]
     HRESULT onkeypress([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONKEYPRESS)]
    HRESULT onkeypress([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEUP)]
    HRESULT onmouseup([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEUP)]
    HRESULT onmouseup([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEDOWN)]
    HRESULT onmousedown([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEDOWN)]
    HRESULT onmousedown([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEMOVE)]
    HRESULT onmousemove([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEMOVE)]
    HRESULT onmousemove([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOUT)]
    HRESULT onmouseout([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOUT)]
    HRESULT onmouseout([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOVER)]
    HRESULT onmouseover([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOVER)]
    HRESULT onmouseover([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_ONREADYSTATECHANGE)]
    HRESULT onreadystatechange([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONREADYSTATECHANGE)]
    HRESULT onreadystatechange([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_ONAFTERUPDATE)]
    HRESULT onafterupdate([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONAFTERUPDATE)]
    HRESULT onafterupdate([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_ONROWEXIT)]
    HRESULT onrowexit([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONROWEXIT)]
    HRESULT onrowexit([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_ONROWENTER)]
    HRESULT onrowenter([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONROWENTER)]
    HRESULT onrowenter([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_ONDRAGSTART)]
    HRESULT ondragstart([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONDRAGSTART)]
    HRESULT ondragstart([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_ONSELECTSTART)]
    HRESULT onselectstart([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONSELECTSTART)]
    HRESULT onselectstart([retval, out] VARIANT *p);

    [id(DISPID_IHTMLDOCUMENT2_ELEMENTFROMPOINT)]
    HRESULT elementFromPoint(
        [in] LONG x,
        [in] LONG y,
        [retval, out] IHTMLElement **elementHit);

    [propget, id(DISPID_IHTMLDOCUMENT2_PARENTWINDOW)]
    HRESULT parentWindow([retval, out] IHTMLWindow2 **p);

    [propget, id(DISPID_IHTMLDOCUMENT2_STYLESHEETS)]
    HRESULT styleSheets([retval, out] IHTMLStyleSheetsCollection **p);

    [propput, id(DISPID_IHTMLDOCUMENT2_ONBEFOREUPDATE)]
    HRESULT onbeforeupdate([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONBEFOREUPDATE)]
    HRESULT onbeforeupdate([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT2_ONERRORUPDATE)]
    HRESULT onerrorupdate([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONERRORUPDATE)]
    HRESULT onerrorupdate([retval, out] VARIANT *p);

    [id(DISPID_IHTMLDOCUMENT2_TOSTRING)]
    HRESULT toString([retval, out] BSTR *String);

    [id(DISPID_IHTMLDOCUMENT2_CREATESTYLESHEET)]
    HRESULT createStyleSheet(
        [defaultvalue(""), in] BSTR bstrHref,
        [defaultvalue(-1), in] LONG lIndex,
        [retval, out] IHTMLStyleSheet **ppnewStyleSheet);
}

/*****************************************************************************
 *    IHTMLDocument3 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f485-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLDocument3 : IDispatch
{
    [id(DISPID_IHTMLDOCUMENT3_RELEASECAPTURE)]
    HRESULT releaseCapture();

    [id(DISPID_IHTMLDOCUMENT3_RECALC)]
    HRESULT recalc([defaultvalue(0), in] VARIANT_BOOL fForce);

    [id(DISPID_IHTMLDOCUMENT3_CREATETEXTNODE)]
    HRESULT createTextNode(
        [in] BSTR text,
        [retval, out] IHTMLDOMNode **newTextNode);

    [propget, id(DISPID_IHTMLDOCUMENT3_DOCUMENTELEMENT)]
    HRESULT documentElement([retval, out] IHTMLElement **p);

    [propget, id(DISPID_IHTMLDOCUMENT3_UNIQUEID), hidden]
    HRESULT uniqueID([retval, out] BSTR *p);

    [id(DISPID_IHTMLDOCUMENT3_ATTACHEVENT)]
    HRESULT attachEvent(
        [in] BSTR event,
        [in] IDispatch* pDisp,
        [retval, out] VARIANT_BOOL *pfResult);

    [id(DISPID_IHTMLDOCUMENT3_DETACHEVENT)]
    HRESULT detachEvent(
        [in] BSTR event,
        [in] IDispatch *pDisp);

    [propput, id(DISPID_IHTMLDOCUMENT3_ONROWSDELETE), displaybind, bindable]
    HRESULT onrowsdelete([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT3_ONROWSDELETE), displaybind, bindable]
    HRESULT onrowsdelete([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT3_ONROWSINSERTED), displaybind, bindable]
    HRESULT onrowsinserted([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT3_ONROWSINSERTED), displaybind, bindable]
    HRESULT onrowsinserted([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT3_ONCELLCHANGE), displaybind, bindable]
    HRESULT oncellchange([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT3_ONCELLCHANGE), displaybind, bindable]
    HRESULT oncellchange([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT3_ONDATASETCHANGED), displaybind, bindable]
    HRESULT ondatasetchanged([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT3_ONDATASETCHANGED), displaybind, bindable]
    HRESULT ondatasetchanged([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT3_ONDATAAVAILABLE), displaybind, bindable]
    HRESULT ondataavailable([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT3_ONDATAAVAILABLE), displaybind, bindable]
    HRESULT ondataavailable([retval, out] VARIANT * p);

    [propput, id(DISPID_IHTMLDOCUMENT3_ONDATASETCOMPLETE), displaybind, bindable]
    HRESULT ondatasetcomplete([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT3_ONDATASETCOMPLETE), displaybind, bindable]
    HRESULT ondatasetcomplete([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT3_ONPROPERTYCHANGE), displaybind, bindable]
    HRESULT onpropertychange([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT3_ONPROPERTYCHANGE), displaybind, bindable]
    HRESULT onpropertychange([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT3_DIR)]
    HRESULT dir([in] BSTR v);

    [propget, id(DISPID_IHTMLDOCUMENT3_DIR)]
    HRESULT dir([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLDOCUMENT3_ONCONTEXTMENU), displaybind, bindable]
    HRESULT oncontextmenu([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT3_ONCONTEXTMENU), displaybind, bindable]
    HRESULT oncontextmenu([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT3_ONSTOP), displaybind, bindable]
    HRESULT onstop([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT3_ONSTOP), displaybind, bindable]
    HRESULT onstop([retval, out] VARIANT *p);

    [id(DISPID_IHTMLDOCUMENT3_CREATEDOCUMENTFRAGMENT)]
    HRESULT createDocumentFragment([retval, out] IHTMLDocument2 **pNewDoc);

    [propget, id(DISPID_IHTMLDOCUMENT3_PARENTDOCUMENT), hidden, restricted]
    HRESULT parentDocument([retval, out] IHTMLDocument2 **p);

    [propput, id(DISPID_IHTMLDOCUMENT3_ENABLEDOWNLOAD), hidden, restricted]
    HRESULT enableDownload([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLDOCUMENT3_ENABLEDOWNLOAD), hidden, restricted]
    HRESULT enableDownload([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLDOCUMENT3_BASEURL), hidden, restricted]
    HRESULT baseUrl([in] BSTR v);

    [propget, id(DISPID_IHTMLDOCUMENT3_BASEURL), hidden, restricted]
    HRESULT baseUrl([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLDOCUMENT3_CHILDNODES)]
    HRESULT childNodes([retval, out] IDispatch **p);

    [propput, id(DISPID_IHTMLDOCUMENT3_INHERITSTYLESHEETS), hidden, restricted]
    HRESULT inheritStyleSheets([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLDOCUMENT3_INHERITSTYLESHEETS), hidden, restricted]
    HRESULT inheritStyleSheets([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLDOCUMENT3_ONBEFOREEDITFOCUS), displaybind, bindable]
    HRESULT onbeforeeditfocus([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT3_ONBEFOREEDITFOCUS), displaybind, bindable]
    HRESULT onbeforeeditfocus([retval, out] VARIANT *p);

    [id(DISPID_IHTMLDOCUMENT3_GETELEMENTSBYNAME)]
    HRESULT getElementsByName(
        [in] BSTR v,
        [retval, out] IHTMLElementCollection **pelColl);

    [id(DISPID_IHTMLDOCUMENT3_GETELEMENTBYID)]
    HRESULT getElementById(
        [in] BSTR v,
        [retval, out] IHTMLElement **pel);

    [id(DISPID_IHTMLDOCUMENT3_GETELEMENTSBYTAGNAME)]
    HRESULT getElementsByTagName(
        [in] BSTR v,
        [retval, out] IHTMLElementCollection **pelColl);
}

/*****************************************************************************
 *    IHTMLDocument4 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f69a-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLDocument4 : IDispatch
{
    [id(DISPID_IHTMLDOCUMENT4_FOCUS)]
    HRESULT focus();

    [id(DISPID_IHTMLDOCUMENT4_HASFOCUS)]
    HRESULT hasFocus([retval, out] VARIANT_BOOL *pfFocus);

    [propput, id(DISPID_IHTMLDOCUMENT4_ONSELECTIONCHANGE), displaybind, bindable]
    HRESULT onselectionchange([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT4_ONSELECTIONCHANGE), displaybind, bindable]
    HRESULT onselectionchange([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLDOCUMENT4_NAMESPACES)]
    HRESULT namespaces([retval, out] IDispatch **p);

    [id(DISPID_IHTMLDOCUMENT4_CREATEDOCUMENTFROMURL)]
    HRESULT createDocumentFromUrl(
        [in] BSTR bstrUrl,
        [in] BSTR bstrOptions,
        [retval, out] IHTMLDocument2 **newDoc);

    [propput, id(DISPID_IHTMLDOCUMENT4_MEDIA)]
    HRESULT media([in] BSTR v);

    [propget, id(DISPID_IHTMLDOCUMENT4_MEDIA)]
    HRESULT media([retval, out] BSTR *p);

    [id(DISPID_IHTMLDOCUMENT4_CREATEEVENTOBJECT)]
    HRESULT createEventObject(
        [optional, in] VARIANT *pvarEventObject,
        [retval, out] IHTMLEventObj **ppEventObj);

    [id(DISPID_IHTMLDOCUMENT4_FIREEVENT)]
    HRESULT fireEvent(
        [in] BSTR bstrEventName,
        [optional, in] VARIANT *pvarEventObject,
        [retval, out] VARIANT_BOOL *pfCancelled);

    [id(DISPID_IHTMLDOCUMENT4_CREATERENDERSTYLE)]
    HRESULT createRenderStyle(
        [in] BSTR v,
        [retval, out] IHTMLRenderStyle **ppIHTMLRenderStyle);

    [propput, id(DISPID_IHTMLDOCUMENT4_ONCONTROLSELECT), displaybind, bindable]
    HRESULT oncontrolselect([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT4_ONCONTROLSELECT), displaybind, bindable]
    HRESULT oncontrolselect([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLDOCUMENT4_URLUNENCODED)]
    HRESULT URLUnencoded([retval, out] BSTR *p);
}

/*****************************************************************************
 *    IHTMLDocument5 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f80c-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLDocument5 : IDispatch
{
    [propput, id(DISPID_IHTMLDOCUMENT5_ONMOUSEWHEEL), displaybind, bindable]
    HRESULT onmousewheel([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT5_ONMOUSEWHEEL), displaybind, bindable]
    HRESULT onmousewheel([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLDOCUMENT5_DOCTYPE)]
    HRESULT doctype([retval, out] IHTMLDOMNode **p);

    [propget, id(DISPID_IHTMLDOCUMENT5_IMPLEMENTATION)]
    HRESULT implementation([retval, out] IHTMLDOMImplementation **p);

    [id(DISPID_IHTMLDOCUMENT5_CREATEATTRIBUTE)]
    HRESULT createAttribute(
        [in] BSTR bstrattrName,
        [retval, out] IHTMLDOMAttribute **ppattribute);

    [id(DISPID_IHTMLDOCUMENT5_CREATECOMMENT)]
    HRESULT createComment(
        [in] BSTR bstrdata,
        [retval, out] IHTMLDOMNode **ppRetNode);

    [propput, id(DISPID_IHTMLDOCUMENT5_ONFOCUSIN), displaybind, bindable]
    HRESULT onfocusin([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT5_ONFOCUSIN), displaybind, bindable]
    HRESULT onfocusin([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT5_ONFOCUSOUT), displaybind, bindable]
    HRESULT onfocusout([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT5_ONFOCUSOUT), displaybind, bindable]
    HRESULT onfocusout([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT5_ONACTIVATE), displaybind, bindable]
    HRESULT onactivate([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT5_ONACTIVATE), displaybind, bindable]
    HRESULT onactivate([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT5_ONDEACTIVATE), displaybind, bindable]
    HRESULT ondeactivate([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT5_ONDEACTIVATE), displaybind, bindable]
    HRESULT ondeactivate([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT5_ONBEFOREACTIVATE), displaybind, bindable]
    HRESULT onbeforeactivate([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT5_ONBEFOREACTIVATE), displaybind, bindable]
    HRESULT onbeforeactivate([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT5_ONBEFOREDEACTIVATE), displaybind, bindable]
    HRESULT onbeforedeactivate([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT5_ONBEFOREDEACTIVATE), displaybind, bindable]
    HRESULT onbeforedeactivate([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLDOCUMENT5_COMPATMODE)]
    HRESULT compatMode([retval, out] BSTR *p);
}

/*****************************************************************************
 *    IHTMLDocument6 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(30510417-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLDocument6 : IDispatch
{
    [propget, id(DISPID_IHTMLDOCUMENT6_COMPATIBLE)]
    HRESULT compatible([retval, out] IHTMLDocumentCompatibleInfoCollection **p);

    [propget, id(DISPID_IHTMLDOCUMENT6_DOCUMENTMODE)]
    HRESULT documentMode([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT6_ONSTORAGE), displaybind, bindable]
    HRESULT onstorage([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT6_ONSTORAGE), displaybind, bindable]
    HRESULT onstorage([out] VARIANT *p);

    [propput, id(DISPID_IHTMLDOCUMENT6_ONSTORAGECOMMIT), displaybind, bindable]
    HRESULT onstoragecommit([in] VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT6_ONSTORAGECOMMIT), displaybind, bindable]
    HRESULT onstoragecommit([out] VARIANT *p);

    [id(DISPID_IHTMLDOCUMENT6_IE8_GETELEMENTBYID)]
    HRESULT getElementById(
        [in] BSTR bstrId,
        [retval, out] IHTMLElement2 **p);

    [id(DISPID_IHTMLDOCUMENT6_UPDATESETTINGS)]
    HRESULT updateSettings();
}

/*****************************************************************************
 *    DispHTMLDocument dispinterface
 */
[
    hidden,
    uuid(3050f55f-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLDocument
{
properties:
methods:
    [propget, id(DISPID_IHTMLDOCUMENT_SCRIPT), hidden, nonbrowsable]
    IDispatch *Script();

    [propget, id(DISPID_IHTMLDOCUMENT2_ALL)]
    IHTMLElementCollection *all();

    [propget, id(DISPID_IHTMLDOCUMENT2_BODY)]
    IHTMLElement *body();

    [propget, id(DISPID_IHTMLDOCUMENT2_ACTIVEELEMENT)]
    IHTMLElement *activeElement();

    [propget, id(DISPID_IHTMLDOCUMENT2_IMAGES)]
    IHTMLElementCollection *images();

    [propget, id(DISPID_IHTMLDOCUMENT2_APPLETS)]
    IHTMLElementCollection *applets();

    [propget, id(DISPID_IHTMLDOCUMENT2_LINKS)]
    IHTMLElementCollection *links();

    [propget, id(DISPID_IHTMLDOCUMENT2_FORMS)]
    IHTMLElementCollection *forms();

    [propget, id(DISPID_IHTMLDOCUMENT2_ANCHORS)]
    IHTMLElementCollection *anchors();

    [propput, id(DISPID_IHTMLDOCUMENT2_TITLE)]
    void title(BSTR v);

    [propget, id(DISPID_IHTMLDOCUMENT2_TITLE)]
    BSTR title();

    [propget, id(DISPID_IHTMLDOCUMENT2_SCRIPTS)]
    IHTMLElementCollection *scripts();

    [propput, id(DISPID_IHTMLDOCUMENT2_DESIGNMODE), hidden]
    void designMode(BSTR v);

    [propget, id(DISPID_IHTMLDOCUMENT2_DESIGNMODE), hidden]
    BSTR designMode();

    [propget, id(DISPID_IHTMLDOCUMENT2_SELECTION)]
    IHTMLSelectionObject *selection();

    [propget, id(DISPID_IHTMLDOCUMENT2_READYSTATE), bindable]
    BSTR readyState();

    [propget, id(DISPID_IHTMLDOCUMENT2_FRAMES)]
    IHTMLFramesCollection2 *frames();

    [propget, id(DISPID_IHTMLDOCUMENT2_EMBEDS)]
    IHTMLElementCollection *embeds();

    [propget, id(DISPID_IHTMLDOCUMENT2_PLUGINS)]
    IHTMLElementCollection *plugins();

    [propput, id(DISPID_IHTMLDOCUMENT2_ALINKCOLOR)]
    void alinkColor(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ALINKCOLOR)]
    VARIANT alinkColor();

    [propput, id(DISPID_IHTMLDOCUMENT2_BGCOLOR)]
    void bgColor(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_BGCOLOR)]
    VARIANT bgColor();

    [propput, id(DISPID_IHTMLDOCUMENT2_FGCOLOR)]
    void fgColor(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_FGCOLOR)]
    VARIANT fgColor();

    [propput, id(DISPID_IHTMLDOCUMENT2_LINKCOLOR)]
    void linkColor(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_LINKCOLOR)]
    VARIANT linkColor();

    [propput, id(DISPID_IHTMLDOCUMENT2_VLINKCOLOR)]
    void vlinkColor(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_VLINKCOLOR)]
    VARIANT vlinkColor();

    [propget, id(DISPID_IHTMLDOCUMENT2_REFERRER)]
    BSTR referrer();

    [propget, id(DISPID_IHTMLDOCUMENT2_LOCATION)]
    IHTMLLocation *location();

    [propget, id(DISPID_IHTMLDOCUMENT2_LASTMODIFIED)]
    BSTR lastModified();

    [propput, id(DISPID_IHTMLDOCUMENT2_URL)]
    void URL(BSTR v);

    [propget, id(DISPID_IHTMLDOCUMENT2_URL)]
    BSTR URL();

    [propput, id(DISPID_IHTMLDOCUMENT2_DOMAIN)]
    void domain(BSTR v);

    [propget, id(DISPID_IHTMLDOCUMENT2_DOMAIN)]
    BSTR domain();

    [propput, id(DISPID_IHTMLDOCUMENT2_COOKIE)]
    void cookie(BSTR v);

    [propget, id(DISPID_IHTMLDOCUMENT2_COOKIE)]
    BSTR cookie();

    [propput, id(DISPID_IHTMLDOCUMENT2_EXPANDO), bindable, hidden]
    void expando(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLDOCUMENT2_EXPANDO), bindable, hidden]
    VARIANT_BOOL expando();

    [propput, id(DISPID_IHTMLDOCUMENT2_CHARSET), hidden]
    void charset(BSTR v);

    [propget, id(DISPID_IHTMLDOCUMENT2_CHARSET), hidden]
    BSTR charset();

    [propput, id(DISPID_IHTMLDOCUMENT2_DEFAULTCHARSET)]
    void defaultCharset(BSTR v);

    [propget, id(DISPID_IHTMLDOCUMENT2_DEFAULTCHARSET)]
    BSTR defaultCharset();

    [propget, id(DISPID_IHTMLDOCUMENT2_MIMETYPE)]
    BSTR mimeType();

    [propget, id(DISPID_IHTMLDOCUMENT2_FILESIZE)]
    BSTR fileSize();

    [propget, id(DISPID_IHTMLDOCUMENT2_FILECREATEDDATE)]
    BSTR fileCreatedDate();

    [propget, id(DISPID_IHTMLDOCUMENT2_FILEMODIFIEDDATE)]
    BSTR fileModifiedDate();

    [propget, id(DISPID_IHTMLDOCUMENT2_FILEUPDATEDDATE)]
    BSTR fileUpdatedDate();

    [propget, id(DISPID_IHTMLDOCUMENT2_SECURITY)]
    BSTR security();

    [propget, id(DISPID_IHTMLDOCUMENT2_PROTOCOL)]
    BSTR protocol();

    [propget, id(DISPID_IHTMLDOCUMENT2_NAMEPROP)]
    BSTR nameProp();

    [vararg, id(DISPID_IHTMLDOCUMENT2_WRITE)]
    void write([in] SAFEARRAY(VARIANT) psarray);

    [vararg, id(DISPID_IHTMLDOCUMENT2_WRITELN)]
    void writeln([in] SAFEARRAY(VARIANT) psarray);

    [id(DISPID_IHTMLDOCUMENT2_OPEN)]
    IDispatch *open(
        [defaultvalue("text/html"), in] BSTR url,
        [optional, in] VARIANT name,
        [optional, in] VARIANT features,
        [optional, in] VARIANT replace);

    [id(DISPID_IHTMLDOCUMENT2_CLOSE)]
    void close();

    [id(DISPID_IHTMLDOCUMENT2_CLEAR)]
    void clear();

    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDSUPPORTED)]
    VARIANT_BOOL queryCommandSupported([in] BSTR cmdID);

    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDENABLED)]
    VARIANT_BOOL queryCommandEnabled([in] BSTR cmdID);

    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDSTATE)]
    VARIANT_BOOL queryCommandState([in] BSTR cmdID);

    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDINDETERM)]
    VARIANT_BOOL queryCommandIndeterm([in] BSTR cmdID);

    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDTEXT)]
    BSTR queryCommandText([in] BSTR cmdID);

    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDVALUE)]
    VARIANT queryCommandValue([in] BSTR cmdID);

    [id(DISPID_IHTMLDOCUMENT2_EXECCOMMAND)]
    VARIANT_BOOL execCommand(
        [in] BSTR cmdID,
        [defaultvalue(0), in] VARIANT_BOOL showUI,
        [optional, in] VARIANT value);

    [id(DISPID_IHTMLDOCUMENT2_EXECCOMMANDSHOWHELP)]
    VARIANT_BOOL execCommandShowHelp([in] BSTR cmdID);

    [id(DISPID_IHTMLDOCUMENT2_CREATEELEMENT)]
    IHTMLElement *createElement([in] BSTR eTag);

    [propput, id(DISPID_IHTMLDOCUMENT2_ONHELP), displaybind, bindable]
    void onhelp(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONHELP), displaybind, bindable]
    VARIANT onhelp();

    [propput, id(DISPID_IHTMLDOCUMENT2_ONCLICK), displaybind, bindable]
    void onclick(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONCLICK), displaybind, bindable]
    VARIANT onclick();

    [propput, id(DISPID_IHTMLDOCUMENT2_ONDBLCLICK), displaybind, bindable]
    void ondblclick(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONDBLCLICK), displaybind, bindable]
    VARIANT ondblclick();

    [propput, id(DISPID_IHTMLDOCUMENT2_ONKEYUP), displaybind, bindable]
    void onkeyup(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONKEYUP), displaybind, bindable]
    VARIANT onkeyup();

    [propput, id(DISPID_IHTMLDOCUMENT2_ONKEYDOWN), displaybind, bindable]
    void onkeydown(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONKEYDOWN), displaybind, bindable]
    VARIANT onkeydown();

    [propput, id(DISPID_IHTMLDOCUMENT2_ONKEYPRESS), displaybind, bindable]
    void onkeypress(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONKEYPRESS), displaybind, bindable]
    VARIANT onkeypress();

    [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEUP), displaybind, bindable]
    void onmouseup(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEUP), displaybind, bindable]
    VARIANT onmouseup();

    [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEDOWN), displaybind, bindable]
    void onmousedown(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEDOWN), displaybind, bindable]
    VARIANT onmousedown();

    [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEMOVE), displaybind, bindable]
    void onmousemove(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEMOVE), displaybind, bindable]
    VARIANT onmousemove();

    [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOUT), displaybind, bindable]
    void onmouseout(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOUT), displaybind, bindable]
    VARIANT onmouseout();

    [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOVER), displaybind, bindable]
    void onmouseover(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOVER), displaybind, bindable]
    VARIANT onmouseover();

    [propput, id(DISPID_IHTMLDOCUMENT2_ONREADYSTATECHANGE), displaybind, bindable]
    void onreadystatechange(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONREADYSTATECHANGE), displaybind, bindable]
    VARIANT onreadystatechange();

    [propput, id(DISPID_IHTMLDOCUMENT2_ONAFTERUPDATE), displaybind, bindable]
    void onafterupdate(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONAFTERUPDATE), displaybind, bindable]
    VARIANT onafterupdate();

    [propput, id(DISPID_IHTMLDOCUMENT2_ONROWEXIT), displaybind, bindable]
    void onrowexit(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONROWEXIT), displaybind, bindable]
    VARIANT onrowexit();

    [propput, id(DISPID_IHTMLDOCUMENT2_ONROWENTER), displaybind, bindable]
    void onrowenter(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONROWENTER), displaybind, bindable]
    VARIANT onrowenter();

    [propput, id(DISPID_IHTMLDOCUMENT2_ONDRAGSTART), displaybind, bindable]
    void ondragstart(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONDRAGSTART), displaybind, bindable]
    VARIANT ondragstart();

    [propput, id(DISPID_IHTMLDOCUMENT2_ONSELECTSTART), displaybind, bindable]
    void onselectstart(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONSELECTSTART), displaybind, bindable]
    VARIANT onselectstart();

    [id(DISPID_IHTMLDOCUMENT2_ELEMENTFROMPOINT)]
    IHTMLElement *elementFromPoint(
        [in] LONG x,
        [in] LONG y);

    [propget, id(DISPID_IHTMLDOCUMENT2_PARENTWINDOW)]
    IHTMLWindow2 *parentWindow();

    [propget, id(DISPID_IHTMLDOCUMENT2_STYLESHEETS)]
    IHTMLStyleSheetsCollection *styleSheets();

    [propput, id(DISPID_IHTMLDOCUMENT2_ONBEFOREUPDATE), displaybind, bindable]
    void onbeforeupdate(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONBEFOREUPDATE), displaybind, bindable]
    VARIANT onbeforeupdate();

    [propput, id(DISPID_IHTMLDOCUMENT2_ONERRORUPDATE), displaybind, bindable]
    void onerrorupdate(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT2_ONERRORUPDATE), displaybind, bindable]
    VARIANT onerrorupdate();

    [id(DISPID_IHTMLDOCUMENT2_TOSTRING)]
    BSTR toString();

    [id(DISPID_IHTMLDOCUMENT2_CREATESTYLESHEET)]
    IHTMLStyleSheet *createStyleSheet(
        [defaultvalue(""), in] BSTR bstrHref,
        [defaultvalue(-1), in] LONG lIndex);

    [id(DISPID_IHTMLDOCUMENT3_RELEASECAPTURE)]
    void releaseCapture();

    [id(DISPID_IHTMLDOCUMENT3_RECALC)]
    void recalc([defaultvalue(0), in] VARIANT_BOOL fForce);

    [id(DISPID_IHTMLDOCUMENT3_CREATETEXTNODE)]
    IHTMLDOMNode *createTextNode([in] BSTR text);

    [propget, id(DISPID_IHTMLDOCUMENT3_DOCUMENTELEMENT)]
    IHTMLElement *documentElement();

    [propget, id(DISPID_IHTMLDOCUMENT3_UNIQUEID), hidden]
    BSTR uniqueID();

    [id(DISPID_IHTMLDOCUMENT3_ATTACHEVENT)]
    VARIANT_BOOL attachEvent(
        [in] BSTR event,
        [in] IDispatch *pDisp);

    [id(DISPID_IHTMLDOCUMENT3_DETACHEVENT)]
    void detachEvent(
        [in] BSTR event,
        [in] IDispatch *pDisp);

    [propput, id(DISPID_IHTMLDOCUMENT3_ONROWSDELETE), displaybind, bindable]
    void onrowsdelete(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT3_ONROWSDELETE), displaybind, bindable]
    VARIANT onrowsdelete();

    [propput, id(DISPID_IHTMLDOCUMENT3_ONROWSINSERTED), displaybind, bindable]
    void onrowsinserted(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT3_ONROWSINSERTED), displaybind, bindable]
    VARIANT onrowsinserted();

    [propput, id(DISPID_IHTMLDOCUMENT3_ONCELLCHANGE), displaybind, bindable]
    void oncellchange(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT3_ONCELLCHANGE), displaybind, bindable]
    VARIANT oncellchange();

    [propput, id(DISPID_IHTMLDOCUMENT3_ONDATASETCHANGED), displaybind, bindable]
    void ondatasetchanged(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT3_ONDATASETCHANGED), displaybind, bindable]
    VARIANT ondatasetchanged();

    [propput, id(DISPID_IHTMLDOCUMENT3_ONDATAAVAILABLE), displaybind, bindable]
    void ondataavailable(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT3_ONDATAAVAILABLE), displaybind, bindable]
    VARIANT ondataavailable();

    [propput, id(DISPID_IHTMLDOCUMENT3_ONDATASETCOMPLETE), displaybind, bindable]
    void ondatasetcomplete(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT3_ONDATASETCOMPLETE), displaybind, bindable]
    VARIANT ondatasetcomplete();

    [propput, id(DISPID_IHTMLDOCUMENT3_ONPROPERTYCHANGE), displaybind, bindable]
    void onpropertychange(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT3_ONPROPERTYCHANGE), displaybind, bindable]
    VARIANT onpropertychange();

    [propput, id(DISPID_IHTMLDOCUMENT3_DIR)]
    void dir(BSTR v);

    [propget, id(DISPID_IHTMLDOCUMENT3_DIR)]
    BSTR dir();

    [propput, id(DISPID_IHTMLDOCUMENT3_ONCONTEXTMENU), displaybind, bindable]
    void oncontextmenu(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT3_ONCONTEXTMENU), displaybind, bindable]
    VARIANT oncontextmenu();

    [propput, id(DISPID_IHTMLDOCUMENT3_ONSTOP), displaybind, bindable]
    void onstop(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT3_ONSTOP), displaybind, bindable]
    VARIANT onstop();

    [id(DISPID_IHTMLDOCUMENT3_CREATEDOCUMENTFRAGMENT)]
    IHTMLDocument2 *createDocumentFragment();

    [propget, id(DISPID_IHTMLDOCUMENT3_PARENTDOCUMENT), hidden, restricted]
    IHTMLDocument2 *parentDocument();

    [propput, id(DISPID_IHTMLDOCUMENT3_ENABLEDOWNLOAD), hidden, restricted]
    void enableDownload(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLDOCUMENT3_ENABLEDOWNLOAD), hidden, restricted]
    VARIANT_BOOL enableDownload();

    [propput, id(DISPID_IHTMLDOCUMENT3_BASEURL), hidden, restricted]
    void baseUrl(BSTR v);

    [propget, id(DISPID_IHTMLDOCUMENT3_BASEURL), hidden, restricted]
    BSTR baseUrl();

    [propput, id(DISPID_IHTMLDOCUMENT3_INHERITSTYLESHEETS), hidden, restricted]
    void inheritStyleSheets(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLDOCUMENT3_INHERITSTYLESHEETS), hidden, restricted]
    VARIANT_BOOL inheritStyleSheets();

    [propput, id(DISPID_IHTMLDOCUMENT3_ONBEFOREEDITFOCUS), displaybind, bindable]
    void onbeforeeditfocus(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT3_ONBEFOREEDITFOCUS), displaybind, bindable]
    VARIANT onbeforeeditfocus();

    [id(DISPID_IHTMLDOCUMENT3_GETELEMENTSBYNAME)]
    IHTMLElementCollection *getElementsByName([in] BSTR v);

    [id(DISPID_IHTMLDOCUMENT3_GETELEMENTBYID)]
    IHTMLElement *getElementById([in] BSTR v);

    [id(DISPID_IHTMLDOCUMENT3_GETELEMENTSBYTAGNAME)]
    IHTMLElementCollection *getElementsByTagName([in] BSTR v);

    [id(DISPID_IHTMLDOCUMENT4_FOCUS)]
    void focus();

    [id(DISPID_IHTMLDOCUMENT4_HASFOCUS)]
    VARIANT_BOOL hasFocus();

    [propput, id(DISPID_IHTMLDOCUMENT4_ONSELECTIONCHANGE), displaybind, bindable]
    void onselectionchange(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT4_ONSELECTIONCHANGE), displaybind, bindable]
    VARIANT onselectionchange();

    [propget, id(DISPID_IHTMLDOCUMENT4_NAMESPACES)]
    IDispatch *namespaces();

    [id(DISPID_IHTMLDOCUMENT4_CREATEDOCUMENTFROMURL)]
    IHTMLDocument2 *createDocumentFromUrl(
        [in] BSTR bstrUrl,
        [in] BSTR bstrOptions);

    [propput, id(DISPID_IHTMLDOCUMENT4_MEDIA)]
    void media(BSTR v);

    [propget, id(DISPID_IHTMLDOCUMENT4_MEDIA)]
    BSTR media();

    [id(DISPID_IHTMLDOCUMENT4_CREATEEVENTOBJECT)]
    IHTMLEventObj *createEventObject([optional, in] VARIANT *pvarEventObject);

    [id(DISPID_IHTMLDOCUMENT4_FIREEVENT)]
    VARIANT_BOOL fireEvent(
        [in] BSTR bstrEventName,
        [optional, in] VARIANT *pvarEventObject);

    [id(DISPID_IHTMLDOCUMENT4_CREATERENDERSTYLE)]
    IHTMLRenderStyle *createRenderStyle([in] BSTR v);

    [propput, id(DISPID_IHTMLDOCUMENT4_ONCONTROLSELECT), displaybind, bindable]
    void oncontrolselect(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT4_ONCONTROLSELECT), displaybind, bindable]
    VARIANT oncontrolselect();

    [propget, id(DISPID_IHTMLDOCUMENT4_URLUNENCODED)]
    BSTR URLUnencoded();

    [propput, id(DISPID_IHTMLDOCUMENT5_ONMOUSEWHEEL), displaybind, bindable]
    void onmousewheel(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT5_ONMOUSEWHEEL), displaybind, bindable]
    VARIANT onmousewheel();

    [propget, id(DISPID_IHTMLDOCUMENT5_DOCTYPE)]
    IHTMLDOMNode *doctype();

    [propget, id(DISPID_IHTMLDOCUMENT5_IMPLEMENTATION)]
    IHTMLDOMImplementation *implementation();

    [id(DISPID_IHTMLDOCUMENT5_CREATEATTRIBUTE)]
    IHTMLDOMAttribute *createAttribute([in] BSTR bstrattrName);

    [id(DISPID_IHTMLDOCUMENT5_CREATECOMMENT)]
    IHTMLDOMNode *createComment([in] BSTR bstrdata);

    [propput, id(DISPID_IHTMLDOCUMENT5_ONFOCUSIN), displaybind, bindable]
    void onfocusin(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT5_ONFOCUSIN), displaybind, bindable]
    VARIANT onfocusin();

    [propput, id(DISPID_IHTMLDOCUMENT5_ONFOCUSOUT), displaybind, bindable]
    void onfocusout(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT5_ONFOCUSOUT), displaybind, bindable]
    VARIANT onfocusout();

    [propput, id(DISPID_IHTMLDOCUMENT5_ONACTIVATE), displaybind, bindable]
    void onactivate(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT5_ONACTIVATE), displaybind, bindable]
    VARIANT onactivate();

    [propput, id(DISPID_IHTMLDOCUMENT5_ONDEACTIVATE), displaybind, bindable]
    void ondeactivate(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT5_ONDEACTIVATE), displaybind, bindable]
    VARIANT ondeactivate();

    [propput, id(DISPID_IHTMLDOCUMENT5_ONBEFOREACTIVATE), displaybind, bindable]
    void onbeforeactivate(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT5_ONBEFOREACTIVATE), displaybind, bindable]
    VARIANT onbeforeactivate();

    [propput, id(DISPID_IHTMLDOCUMENT5_ONBEFOREDEACTIVATE), displaybind, bindable]
    void onbeforedeactivate(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT5_ONBEFOREDEACTIVATE), displaybind, bindable]
    VARIANT onbeforedeactivate();

    [propget, id(DISPID_IHTMLDOCUMENT5_COMPATMODE)]
    BSTR compatMode();

    [propget, id(DISPID_IHTMLDOCUMENT6_COMPATIBLE)]
    IHTMLDocumentCompatibleInfoCollection *compatible();

    [propget, id(DISPID_IHTMLDOCUMENT6_DOCUMENTMODE)]
    VARIANT documentMode();

    [propput, id(DISPID_IHTMLDOCUMENT6_ONSTORAGE), displaybind, bindable]
    void onstorage(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT6_ONSTORAGE), displaybind, bindable]
    VARIANT onstorage();

    [propput, id(DISPID_IHTMLDOCUMENT6_ONSTORAGECOMMIT), displaybind, bindable]
    void onstoragecommit(VARIANT v);

    [propget, id(DISPID_IHTMLDOCUMENT6_ONSTORAGECOMMIT), displaybind, bindable]
    VARIANT onstoragecommit();

    [id(DISPID_IHTMLDOCUMENT6_IE8_GETELEMENTBYID)]
    IHTMLElement2 *ie8_getElementById([in] BSTR bstrId);

    [id(DISPID_IHTMLDOCUMENT6_UPDATESETTINGS)]
    void updateSettings();

    WINE_HTMLDOMNODE_DISPINTERFACE_DECL;
}

/*****************************************************************************
 *    HTMLDocument coclass
 */
[
    uuid(25336920-03F9-11cf-8FD0-00AA00686F13)
]
coclass HTMLDocument
{
    [default]         dispinterface DispHTMLDocument;
    [source, default] dispinterface HTMLDocumentEvents;
    [source]          dispinterface HTMLDocumentEvents2;
                      interface IHTMLDocument2;
                      interface IHTMLDocument3;
                      interface IHTMLDocument4;
                      interface IHTMLDocument5;
                      interface IHTMLDocument6;
                      interface IHTMLDOMNode;
                      interface IHTMLDOMNode2;
}

/*****************************************************************************
 *    DWebBridgeEvents dispinterface
 */
[
    hidden,
    uuid(a6d897ff-0a95-11d1-b0ba-006008166e11)
]
dispinterface DWebBridgeEvents
{
properties:
methods:
    [id(DISPID_DWEBBRIDGEEVENTS_ONSCRIPTLETEVENT)]
    void onscriptletevent([in] BSTR name,[in] VARIANT eventData);

    [id(DISPID_DWEBBRIDGEEVENTS_ONREADYSTATECHANGE)]
    void onreadystatechange();

    [id(DISPID_DWEBBRIDGEEVENTS_ONCLICK)]
    VARIANT_BOOL onclick();

    [id(DISPID_DWEBBRIDGEEVENTS_ONDBLCLICK)]
    VARIANT_BOOL ondblclick();

    [id(DISPID_DWEBBRIDGEEVENTS_ONKEYDOWN)]
    void onkeydown();

    [id(DISPID_DWEBBRIDGEEVENTS_ONKEYUP)]
    void onkeyup();

    [id(DISPID_DWEBBRIDGEEVENTS_ONKEYPRESS)]
    VARIANT_BOOL onkeypress();

    [id(DISPID_DWEBBRIDGEEVENTS_ONMOUSEDOWN)]
    void onmousedown();

    [id(DISPID_DWEBBRIDGEEVENTS_ONMOUSEMOVE)]
    void onmousemove();

    [id(DISPID_DWEBBRIDGEEVENTS_ONMOUSEUP)]
    void onmouseup();
}

/*****************************************************************************
 *    IWebBridge interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(ae24fdad-03c6-11d1-8b76-0080c744f389)
]
interface IWebBridge : IDispatch
{
    [propput, id(DISPID_IWEBBRIDGE_URL)]
    HRESULT URL([in] BSTR v);

    [propget, id(DISPID_IWEBBRIDGE_URL)]
    HRESULT URL([retval, out] BSTR * p);

    [propput, id(DISPID_IWEBBRIDGE_SCROLLBAR)]
    HRESULT Scrollbar([in] VARIANT_BOOL v);

    [propget, id(DISPID_IWEBBRIDGE_SCROLLBAR)]
    HRESULT Scrollbar([retval, out] VARIANT_BOOL * p);

    [propput, id(DISPID_IWEBBRIDGE_EMBED)]
    HRESULT embed([in] VARIANT_BOOL v);

    [propget, id(DISPID_IWEBBRIDGE_EMBED)]
    HRESULT embed([retval, out] VARIANT_BOOL * p);

    [propget, id(DISPID_IWEBBRIDGE_EVENT)]
    HRESULT event([retval, out] IDispatch* * p);

    [propget, id(DISPID_IWEBBRIDGE_READYSTATE)]
    HRESULT readyState([retval, out] long * p);

    [id(DISPID_IWEBBRIDGE_ABOUTBOX)]
    HRESULT AboutBox();
}

/*****************************************************************************
 *    Scriptlet coclass
 */
[
    control,
    helpstring("Microsoft Scriptlet Component"),
    progid("ScriptBridge.ScriptBridge.1"),
    vi_progid("ScriptBridge.ScriptBridge"),
    uuid(ae24fdae-03c6-11d1-8b76-0080c744f389)
]
coclass Scriptlet
{
    [default]           interface IWebBridge;
    [source, default]   dispinterface DWebBridgeEvents;
}

/*****************************************************************************
 *    IHTMLEmbedElement interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f25f-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLEmbedElement : IDispatch
{
    [propput, id(DISPID_IHTMLEMBEDELEMENT_HIDDEN)]
    HRESULT hidden([in] BSTR v);

    [propget, id(DISPID_IHTMLEMBEDELEMENT_HIDDEN)]
    HRESULT hidden([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLEMBEDELEMENT_PALETTE)]
    HRESULT palette([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLEMBEDELEMENT_PLUGINSPAGE)]
    HRESULT pluginspage([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLEMBEDELEMENT_SRC)]
    HRESULT src([in] BSTR v);

    [propget, id(DISPID_IHTMLEMBEDELEMENT_SRC)]
    HRESULT src([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLEMBEDELEMENT_UNITS)]
    HRESULT units([in] BSTR v);

    [propget, id(DISPID_IHTMLEMBEDELEMENT_UNITS)]
    HRESULT units([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLEMBEDELEMENT_NAME), displaybind, bindable]
    HRESULT name([in] BSTR v);

    [propget, id(DISPID_IHTMLEMBEDELEMENT_NAME), displaybind, bindable]
    HRESULT name([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLEMBEDELEMENT_WIDTH)]
    HRESULT width([in] VARIANT v);

    [propget, id(DISPID_IHTMLEMBEDELEMENT_WIDTH)]
    HRESULT width([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLEMBEDELEMENT_HEIGHT)]
    HRESULT height([in] VARIANT v);

    [propget, id(DISPID_IHTMLEMBEDELEMENT_HEIGHT)]
    HRESULT height([retval, out] VARIANT *p);
}

/*****************************************************************************
 *    DispHTMLEmbedElement dispinterface
 */
[
    hidden,
    uuid(3050f52e-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLEmbed
{
properties:
methods:
    WINE_HTMLELEMENT_DISPINTERFACE_DECL;

    [propput, id(DISPID_IHTMLEMBEDELEMENT_HIDDEN)]
    void hidden(BSTR v);

    [propget, id(DISPID_IHTMLEMBEDELEMENT_HIDDEN)]
    BSTR hidden();

    [propget, id(DISPID_IHTMLEMBEDELEMENT_PALETTE)]
    BSTR palette();

    [propget, id(DISPID_IHTMLEMBEDELEMENT_PLUGINSPAGE)]
    BSTR pluginspage();

    [propput, id(DISPID_IHTMLEMBEDELEMENT_SRC)]
    void src(BSTR v);

    [propget, id(DISPID_IHTMLEMBEDELEMENT_SRC)]
    BSTR src();

    [propput, id(DISPID_IHTMLEMBEDELEMENT_UNITS)]
    void units(BSTR v);

    [propget, id(DISPID_IHTMLEMBEDELEMENT_UNITS)]
    BSTR units();

    [propput, id(DISPID_IHTMLEMBEDELEMENT_NAME), displaybind, bindable]
    void name(BSTR v);

    [propget, id(DISPID_IHTMLEMBEDELEMENT_NAME), displaybind, bindable]
    BSTR name();

    [propput, id(DISPID_IHTMLEMBEDELEMENT_WIDTH)]
    void width(VARIANT v);

    [propget, id(DISPID_IHTMLEMBEDELEMENT_WIDTH)]
    VARIANT width();

    [propput, id(DISPID_IHTMLEMBEDELEMENT_HEIGHT)]
    void height(VARIANT v);

    [propget, id(DISPID_IHTMLEMBEDELEMENT_HEIGHT)]
    VARIANT height();

    [propput, id(DISPID_IHTMLEMBEDELEMENT2_IE8_SRC)]
    void ie8_src(BSTR v);

    [propget, id(DISPID_IHTMLEMBEDELEMENT2_IE8_SRC)]
    BSTR ie8_src();

    [propget, id(DISPID_IHTMLEMBEDELEMENT2_IE8_PLUGINSPAGE)]
    BSTR ie8_pluginspage();
}

/*****************************************************************************
 *    IHTMLCommentElement interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f20c-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLCommentElement : IDispatch
{
    [propput, id(DISPID_IHTMLCOMMENTELEMENT_TEXT), displaybind, bindable]
    HRESULT text([in] BSTR v);

    [propget, id(DISPID_IHTMLCOMMENTELEMENT_TEXT), displaybind, bindable]
    HRESULT text([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLCOMMENTELEMENT_ATOMIC), displaybind, bindable]
    HRESULT atomic([in] LONG v);

    [propget, id(DISPID_IHTMLCOMMENTELEMENT_ATOMIC), displaybind, bindable]
    HRESULT atomic([out, retval] LONG *p);
}

/*****************************************************************************
 *    IHTMLCommentElement2 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f813-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLCommentElement2 : IDispatch
{
    [propput, id(DISPID_IHTMLCOMMENTELEMENT2_DATA)]
    HRESULT data([in] BSTR v);

    [propget, id(DISPID_IHTMLCOMMENTELEMENT2_DATA)]
    HRESULT data([out, retval] BSTR *p);

    [propget, id(DISPID_IHTMLCOMMENTELEMENT2_LENGTH)]
    HRESULT length([out, retval] LONG *p);

    [id(DISPID_IHTMLCOMMENTELEMENT2_SUBSTRINGDATA)]
    HRESULT substringData(
            [in] LONG offset,
            [in] LONG Count,
            [out, retval] BSTR *pbstrsubString);

    [id(DISPID_IHTMLCOMMENTELEMENT2_APPENDDATA)]
    HRESULT appendData([in] BSTR bstrstring);

    [id(DISPID_IHTMLCOMMENTELEMENT2_INSERTDATA)]
    HRESULT insertData(
            [in] LONG offset,
            [in] BSTR bstrstring);

    [id(DISPID_IHTMLCOMMENTELEMENT2_DELETEDATA)]
    HRESULT deleteData(
            [in] LONG offset,
            [in] LONG Count);

    [id(DISPID_IHTMLCOMMENTELEMENT2_REPLACEDATA)]
    HRESULT replaceData(
            [in] LONG offset,
            [in] LONG Count,
            [in] BSTR bstrstring);
}

/*****************************************************************************
 *    DispHTMLCommentElement dispinterface
 */
[
    hidden,
    uuid(3050f50a-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLCommentElement
{
properties:
methods:
    WINE_HTMLELEMENT_DISPINTERFACE_DECL;

    [propput, id(DISPID_IHTMLCOMMENTELEMENT_TEXT), displaybind, bindable]
    void text(BSTR v);

    [propget, id(DISPID_IHTMLCOMMENTELEMENT_TEXT), displaybind, bindable]
    BSTR text();

    [propput, id(DISPID_IHTMLCOMMENTELEMENT_ATOMIC), displaybind, bindable]
    void atomic(LONG v);

    [propget, id(DISPID_IHTMLCOMMENTELEMENT_ATOMIC), displaybind, bindable]
    LONG atomic();

    [propput, id(DISPID_IHTMLCOMMENTELEMENT2_DATA)]
    void data(BSTR v);

    [propget, id(DISPID_IHTMLCOMMENTELEMENT2_DATA)]
    BSTR data();

    [propget, id(DISPID_IHTMLCOMMENTELEMENT2_LENGTH)]
    LONG length();

    [id(DISPID_IHTMLCOMMENTELEMENT2_SUBSTRINGDATA)]
    BSTR substringData(
            [in] LONG offset,
            [in] LONG Count);

    [id(DISPID_IHTMLCOMMENTELEMENT2_APPENDDATA)]
    void appendData([in] BSTR bstrstring);

    [id(DISPID_IHTMLCOMMENTELEMENT2_INSERTDATA)]
     void insertData(
            [in] LONG offset,
            [in] BSTR bstrstring);

    [id(DISPID_IHTMLCOMMENTELEMENT2_DELETEDATA)]
    void deleteData(
            [in] LONG offset,
            [in] LONG Count);

    [id(DISPID_IHTMLCOMMENTELEMENT2_REPLACEDATA)]
    void replaceData(
            [in] LONG offset,
            [in] LONG Count,
            [in] BSTR bstrstring);
}

[
    hidden,
    uuid(3050f60f-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface HTMLElementEvents2
{
properties:
methods:
    [id(DISPID_HTMLELEMENTEVENTS2_ONHELP)]
    VARIANT_BOOL onhelp([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONCLICK)]
    VARIANT_BOOL onclick([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDBLCLICK)]
    VARIANT_BOOL ondblclick([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONKEYPRESS)]
    VARIANT_BOOL onkeypress([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONKEYDOWN)]
    void onkeydown([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONKEYUP)]
    void onkeyup([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEOUT)]
    void onmouseout([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEOVER)]
    void onmouseover([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEMOVE)]
    void onmousemove([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEDOWN)]
    void onmousedown([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEUP)]
    void onmouseup([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONSELECTSTART)]
    VARIANT_BOOL onselectstart([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONFILTERCHANGE)]
    void onfilterchange([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGSTART)]
    VARIANT_BOOL ondragstart([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREUPDATE)]
    VARIANT_BOOL onbeforeupdate([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONAFTERUPDATE)]
    void onafterupdate([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONERRORUPDATE)]
    VARIANT_BOOL onerrorupdate([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONROWEXIT)]
    VARIANT_BOOL onrowexit([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONROWENTER)]
    void onrowenter([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDATASETCHANGED)]
    void ondatasetchanged([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDATAAVAILABLE)]
    void ondataavailable([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDATASETCOMPLETE)]
    void ondatasetcomplete([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONLOSECAPTURE)]
    void onlosecapture([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONPROPERTYCHANGE)]
    void onpropertychange([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONSCROLL)]
    void onscroll([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUS)]
    void onfocus([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONBLUR)]
    void onblur([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZE)]
    void onresize([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAG)]
    VARIANT_BOOL ondrag([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGEND)]
    void ondragend([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGENTER)]
    VARIANT_BOOL ondragenter([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGOVER)]
    VARIANT_BOOL ondragover([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGLEAVE)]
    void ondragleave([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDROP)]
    VARIANT_BOOL ondrop([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFORECUT)]
    VARIANT_BOOL onbeforecut([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONCUT)]
    VARIANT_BOOL oncut([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFORECOPY)]
    VARIANT_BOOL onbeforecopy([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONCOPY)]
    VARIANT_BOOL oncopy([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREPASTE)]
    VARIANT_BOOL onbeforepaste([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONPASTE)]
    VARIANT_BOOL onpaste([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONCONTEXTMENU)]
    VARIANT_BOOL oncontextmenu([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONROWSDELETE)]
    void onrowsdelete([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONROWSINSERTED)]
    void onrowsinserted([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONCELLCHANGE)]
    void oncellchange([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONREADYSTATECHANGE)]
    void onreadystatechange([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONLAYOUTCOMPLETE)]
    void onlayoutcomplete([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONPAGE)]
    void onpage([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEENTER)]
    void onmouseenter([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSELEAVE)]
    void onmouseleave([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONACTIVATE)]
    void onactivate([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDEACTIVATE)]
    void ondeactivate([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREDEACTIVATE)]
    VARIANT_BOOL onbeforedeactivate([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREACTIVATE)]
    VARIANT_BOOL onbeforeactivate([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUSIN)]
    void onfocusin([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUSOUT)]
    void onfocusout([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOVE)]
    void onmove([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONCONTROLSELECT)]
    VARIANT_BOOL oncontrolselect([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOVESTART)]
    VARIANT_BOOL onmovestart([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOVEEND)]
    void onmoveend([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZESTART)]
    VARIANT_BOOL onresizestart([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZEEND)]
    void onresizeend([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEWHEEL)]
    VARIANT_BOOL onmousewheel([in] IHTMLEventObj* pEvtObj);
}

[
    hidden,
    uuid(3050f33c-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface HTMLElementEvents
{
properties:
methods:
    [id(DISPID_HTMLELEMENTEVENTS_ONHELP)]
    VARIANT_BOOL onhelp();

    [id(DISPID_HTMLELEMENTEVENTS_ONCLICK)]
    VARIANT_BOOL onclick();

    [id(DISPID_HTMLELEMENTEVENTS_ONDBLCLICK)]
    VARIANT_BOOL ondblclick();

    [id(DISPID_HTMLELEMENTEVENTS_ONKEYPRESS)]
    VARIANT_BOOL onkeypress();

    [id(DISPID_HTMLELEMENTEVENTS_ONKEYDOWN)]
    void onkeydown();

    [id(DISPID_HTMLELEMENTEVENTS_ONKEYUP)]
    void onkeyup();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEOUT)]
    void onmouseout();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEOVER)]
    void onmouseover();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEMOVE)]
    void onmousemove();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEDOWN)]
    void onmousedown();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEUP)]
    void onmouseup();

    [id(DISPID_HTMLELEMENTEVENTS_ONSELECTSTART)]
    VARIANT_BOOL onselectstart();

    [id(DISPID_HTMLELEMENTEVENTS_ONFILTERCHANGE)]
    void onfilterchange();

    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGSTART)]
    VARIANT_BOOL ondragstart();

    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREUPDATE)]
    VARIANT_BOOL onbeforeupdate();

    [id(DISPID_HTMLELEMENTEVENTS_ONAFTERUPDATE)]
    void onafterupdate();

    [id(DISPID_HTMLELEMENTEVENTS_ONERRORUPDATE)]
    VARIANT_BOOL onerrorupdate();

    [id(DISPID_HTMLELEMENTEVENTS_ONROWEXIT)]
    VARIANT_BOOL onrowexit();

    [id(DISPID_HTMLELEMENTEVENTS_ONROWENTER)]
    void onrowenter();

    [id(DISPID_HTMLELEMENTEVENTS_ONDATASETCHANGED)]
    void ondatasetchanged();

    [id(DISPID_HTMLELEMENTEVENTS_ONDATAAVAILABLE)]
    void ondataavailable();

    [id(DISPID_HTMLELEMENTEVENTS_ONDATASETCOMPLETE)]
    void ondatasetcomplete();

    [id(DISPID_HTMLELEMENTEVENTS_ONLOSECAPTURE)]
    void onlosecapture();

    [id(DISPID_HTMLELEMENTEVENTS_ONPROPERTYCHANGE)]
    void onpropertychange();

    [id(DISPID_HTMLELEMENTEVENTS_ONSCROLL)]
    void onscroll();

    [id(DISPID_HTMLELEMENTEVENTS_ONFOCUS)]
    void onfocus();

    [id(DISPID_HTMLELEMENTEVENTS_ONBLUR)]
    void onblur();

    [id(DISPID_HTMLELEMENTEVENTS_ONRESIZE)]
    void onresize();

    [id(DISPID_HTMLELEMENTEVENTS_ONDRAG)]
    VARIANT_BOOL ondrag();

    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGEND)]
    void ondragend();

    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGENTER)]
    VARIANT_BOOL ondragenter();

    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGOVER)]
    VARIANT_BOOL ondragover();

    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGLEAVE)]
    void ondragleave();

    [id(DISPID_HTMLELEMENTEVENTS_ONDROP)]
    VARIANT_BOOL ondrop();

    [id(DISPID_HTMLELEMENTEVENTS_ONBEFORECUT)]
    VARIANT_BOOL onbeforecut();

    [id(DISPID_HTMLELEMENTEVENTS_ONCUT)]
    VARIANT_BOOL oncut();

    [id(DISPID_HTMLELEMENTEVENTS_ONBEFORECOPY)]
    VARIANT_BOOL onbeforecopy();

    [id(DISPID_HTMLELEMENTEVENTS_ONCOPY)]
    VARIANT_BOOL oncopy();

    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREPASTE)]
    VARIANT_BOOL onbeforepaste();

    [id(DISPID_HTMLELEMENTEVENTS_ONPASTE)]
    VARIANT_BOOL onpaste();

    [id(DISPID_HTMLELEMENTEVENTS_ONCONTEXTMENU)]
    VARIANT_BOOL oncontextmenu();

    [id(DISPID_HTMLELEMENTEVENTS_ONROWSDELETE)]
    void onrowsdelete();

    [id(DISPID_HTMLELEMENTEVENTS_ONROWSINSERTED)]
    void onrowsinserted();

    [id(DISPID_HTMLELEMENTEVENTS_ONCELLCHANGE)]
    void oncellchange();

    [id(DISPID_HTMLELEMENTEVENTS_ONREADYSTATECHANGE)]
    void onreadystatechange();

    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREEDITFOCUS)]
    void onbeforeeditfocus();

    [id(DISPID_HTMLELEMENTEVENTS_ONLAYOUTCOMPLETE)]
    void onlayoutcomplete();

    [id(DISPID_HTMLELEMENTEVENTS_ONPAGE)]
    void onpage();

    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREDEACTIVATE)]
    VARIANT_BOOL onbeforedeactivate();

    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREACTIVATE)]
    VARIANT_BOOL onbeforeactivate();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOVE)]
    void onmove();

    [id(DISPID_HTMLELEMENTEVENTS_ONCONTROLSELECT)]
    VARIANT_BOOL oncontrolselect();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOVESTART)]
    VARIANT_BOOL onmovestart();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOVEEND)]
    void onmoveend();

    [id(DISPID_HTMLELEMENTEVENTS_ONRESIZESTART)]
    VARIANT_BOOL onresizestart();

    [id(DISPID_HTMLELEMENTEVENTS_ONRESIZEEND)]
    void onresizeend();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEENTER)]
    void onmouseenter();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSELEAVE)]
    void onmouseleave();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEWHEEL)]
    VARIANT_BOOL onmousewheel();

    [id(DISPID_HTMLELEMENTEVENTS_ONACTIVATE)]
    void onactivate();

    [id(DISPID_HTMLELEMENTEVENTS_ONDEACTIVATE)]
    void ondeactivate();

    [id(DISPID_HTMLELEMENTEVENTS_ONFOCUSIN)]
    void onfocusin();

    [id(DISPID_HTMLELEMENTEVENTS_ONFOCUSOUT)]
    void onfocusout();
}

[
    noncreatable,
    uuid(3050f317-98b5-11cf-bb82-00aa00bdce0b)
]
coclass HTMLCommentElement
{
    [default]           dispinterface DispHTMLCommentElement;
    [source, default]   dispinterface HTMLElementEvents;
    [source]            dispinterface HTMLElementEvents2;
                        interface IHTMLElement;
                        interface IHTMLElement2;
                        interface IHTMLElement3;
                        interface IHTMLElement4;
                        interface IHTMLUniqueName;
                        interface IHTMLDOMNode;
                        interface IHTMLDOMNode2;
                        interface IHTMLCommentElement;
                        interface IHTMLCommentElement2;
}

/*****************************************************************************
 *    HTMLTableEvents dispinterface
 */
[
    hidden,
    uuid(3050f407-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface HTMLTableEvents
{
properties:
methods:
    [id(DISPID_HTMLELEMENTEVENTS_ONHELP)]
    VARIANT_BOOL onhelp();

    [id(DISPID_HTMLELEMENTEVENTS_ONCLICK)]
    VARIANT_BOOL onclick();

    [id(DISPID_HTMLELEMENTEVENTS_ONDBLCLICK)]
    VARIANT_BOOL ondblclick();

    [id(DISPID_HTMLELEMENTEVENTS_ONKEYPRESS)]
    VARIANT_BOOL onkeypress();

    [id(DISPID_HTMLELEMENTEVENTS_ONKEYDOWN)]
    void onkeydown();

    [id(DISPID_HTMLELEMENTEVENTS_ONKEYUP)]
    void onkeyup();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEOUT)]
    void onmouseout();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEOVER)]
    void onmouseover();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEMOVE)]
    void onmousemove();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEDOWN)]
    void onmousedown();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEUP)]
    void onmouseup();

    [id(DISPID_HTMLELEMENTEVENTS_ONSELECTSTART)]
    VARIANT_BOOL onselectstart();

    [id(DISPID_HTMLELEMENTEVENTS_ONFILTERCHANGE)]
    void onfilterchange();

    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGSTART)]
    VARIANT_BOOL ondragstart();

    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREUPDATE)]
    VARIANT_BOOL onbeforeupdate();

    [id(DISPID_HTMLELEMENTEVENTS_ONAFTERUPDATE)]
    void onafterupdate();

    [id(DISPID_HTMLELEMENTEVENTS_ONERRORUPDATE)]
    VARIANT_BOOL onerrorupdate();

    [id(DISPID_HTMLELEMENTEVENTS_ONROWEXIT)]
    VARIANT_BOOL onrowexit();

    [id(DISPID_HTMLELEMENTEVENTS_ONROWENTER)]
    void onrowenter();

    [id(DISPID_HTMLELEMENTEVENTS_ONDATASETCHANGED)]
    void ondatasetchanged();

    [id(DISPID_HTMLELEMENTEVENTS_ONDATAAVAILABLE)]
    void ondataavailable();

    [id(DISPID_HTMLELEMENTEVENTS_ONDATASETCOMPLETE)]
    void ondatasetcomplete();

    [id(DISPID_HTMLELEMENTEVENTS_ONLOSECAPTURE)]
    void onlosecapture();

    [id(DISPID_HTMLELEMENTEVENTS_ONPROPERTYCHANGE)]
    void onpropertychange();

    [id(DISPID_HTMLELEMENTEVENTS_ONSCROLL)]
    void onscroll();

    [id(DISPID_HTMLELEMENTEVENTS_ONFOCUS)]
    void onfocus();

    [id(DISPID_HTMLELEMENTEVENTS_ONBLUR)]
    void onblur();

    [id(DISPID_HTMLELEMENTEVENTS_ONRESIZE)]
    void onresize();

    [id(DISPID_HTMLELEMENTEVENTS_ONDRAG)]
    VARIANT_BOOL ondrag();

    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGEND)]
    void ondragend();

    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGENTER)]
    VARIANT_BOOL ondragenter();

    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGOVER)]
    VARIANT_BOOL ondragover();

    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGLEAVE)]
    void ondragleave();

    [id(DISPID_HTMLELEMENTEVENTS_ONDROP)]
    VARIANT_BOOL ondrop();

    [id(DISPID_HTMLELEMENTEVENTS_ONBEFORECUT)]
    VARIANT_BOOL onbeforecut();

    [id(DISPID_HTMLELEMENTEVENTS_ONCUT)]
    VARIANT_BOOL oncut();

    [id(DISPID_HTMLELEMENTEVENTS_ONBEFORECOPY)]
    VARIANT_BOOL onbeforecopy();

    [id(DISPID_HTMLELEMENTEVENTS_ONCOPY)]
    VARIANT_BOOL oncopy();

    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREPASTE)]
    VARIANT_BOOL onbeforepaste();

    [id(DISPID_HTMLELEMENTEVENTS_ONPASTE)]
    VARIANT_BOOL onpaste();

    [id(DISPID_HTMLELEMENTEVENTS_ONCONTEXTMENU)]
    VARIANT_BOOL oncontextmenu();

    [id(DISPID_HTMLELEMENTEVENTS_ONROWSDELETE)]
    void onrowsdelete();

    [id(DISPID_HTMLELEMENTEVENTS_ONROWSINSERTED)]
    void onrowsinserted();

    [id(DISPID_HTMLELEMENTEVENTS_ONCELLCHANGE)]
    void oncellchange();

    [id(DISPID_HTMLELEMENTEVENTS_ONREADYSTATECHANGE)]
    void onreadystatechange();

    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREEDITFOCUS)]
    void onbeforeeditfocus();

    [id(DISPID_HTMLELEMENTEVENTS_ONLAYOUTCOMPLETE)]
    void onlayoutcomplete();

    [id(DISPID_HTMLELEMENTEVENTS_ONPAGE)]
    void onpage();

    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREDEACTIVATE)]
    VARIANT_BOOL onbeforedeactivate();

    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREACTIVATE)]
    VARIANT_BOOL onbeforeactivate();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOVE)]
    void onmove();

    [id(DISPID_HTMLELEMENTEVENTS_ONCONTROLSELECT)]
    VARIANT_BOOL oncontrolselect();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOVESTART)]
    VARIANT_BOOL onmovestart();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOVEEND)]
    void onmoveend();

    [id(DISPID_HTMLELEMENTEVENTS_ONRESIZESTART)]
    VARIANT_BOOL onresizestart();

    [id(DISPID_HTMLELEMENTEVENTS_ONRESIZEEND)]
    void onresizeend();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEENTER)]
    void onmouseenter();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSELEAVE)]
    void onmouseleave();

    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEWHEEL)]
    VARIANT_BOOL onmousewheel();

    [id(DISPID_HTMLELEMENTEVENTS_ONACTIVATE)]
    void onactivate();

    [id(DISPID_HTMLELEMENTEVENTS_ONDEACTIVATE)]
    void ondeactivate();

    [id(DISPID_HTMLELEMENTEVENTS_ONFOCUSIN)]
    void onfocusin();

    [id(DISPID_HTMLELEMENTEVENTS_ONFOCUSOUT)]
    void onfocusout();
}

[
    hidden,
    uuid(3050f623-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface HTMLTableEvents2
{
properties:
methods:
    [id(DISPID_HTMLELEMENTEVENTS2_ONHELP)]
    VARIANT_BOOL onhelp([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONCLICK)]
    VARIANT_BOOL onclick([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDBLCLICK)]
    VARIANT_BOOL ondblclick([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONKEYPRESS)]
    VARIANT_BOOL onkeypress([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONKEYDOWN)]
    void onkeydown([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONKEYUP)]
    void onkeyup([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEOUT)]
    void onmouseout([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEOVER)]
    void onmouseover([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEMOVE)]
    void onmousemove([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEDOWN)]
    void onmousedown([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEUP)]
    void onmouseup([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONSELECTSTART)]
    VARIANT_BOOL onselectstart([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONFILTERCHANGE)]
    void onfilterchange([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGSTART)]
    VARIANT_BOOL ondragstart([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREUPDATE)]
    VARIANT_BOOL onbeforeupdate([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONAFTERUPDATE)]
    void onafterupdate([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONERRORUPDATE)]
    VARIANT_BOOL onerrorupdate([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONROWEXIT)]
    VARIANT_BOOL onrowexit([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONROWENTER)]
    void onrowenter([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDATASETCHANGED)]
    void ondatasetchanged([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDATAAVAILABLE)]
    void ondataavailable([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDATASETCOMPLETE)]
    void ondatasetcomplete([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONLOSECAPTURE)]
    void onlosecapture([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONPROPERTYCHANGE)]
    void onpropertychange([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONSCROLL)]
    void onscroll([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUS)]
    void onfocus([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONBLUR)]
    void onblur([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZE)]
    void onresize([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAG)]
    VARIANT_BOOL ondrag([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGEND)]
    void ondragend([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGENTER)]
    VARIANT_BOOL ondragenter([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGOVER)]
    VARIANT_BOOL ondragover([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGLEAVE)]
    void ondragleave([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDROP)]
    VARIANT_BOOL ondrop([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFORECUT)]
    VARIANT_BOOL onbeforecut([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONCUT)]
    VARIANT_BOOL oncut([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFORECOPY)]
    VARIANT_BOOL onbeforecopy([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONCOPY)]
    VARIANT_BOOL oncopy([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREPASTE)]
    VARIANT_BOOL onbeforepaste([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONPASTE)]
    VARIANT_BOOL onpaste([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONCONTEXTMENU)]
    VARIANT_BOOL oncontextmenu([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONROWSDELETE)]
    void onrowsdelete([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONROWSINSERTED)]
    void onrowsinserted([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONCELLCHANGE)]
    void oncellchange([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONREADYSTATECHANGE)]
    void onreadystatechange([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONLAYOUTCOMPLETE)]
    void onlayoutcomplete([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONPAGE)]
    void onpage([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEENTER)]
    void onmouseenter([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSELEAVE)]
    void onmouseleave([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONACTIVATE)]
    void onactivate([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONDEACTIVATE)]
    void ondeactivate([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREDEACTIVATE)]
    VARIANT_BOOL onbeforedeactivate([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREACTIVATE)]
    VARIANT_BOOL onbeforeactivate([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUSIN)]
    void onfocusin([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUSOUT)]
    void onfocusout([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOVE)]
    void onmove([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONCONTROLSELECT)]
    VARIANT_BOOL oncontrolselect([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOVESTART)]
    VARIANT_BOOL onmovestart([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOVEEND)]
    void onmoveend([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZESTART)]
    VARIANT_BOOL onresizestart([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZEEND)]
    void onresizeend([in] IHTMLEventObj* pEvtObj);

    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEWHEEL)]
    VARIANT_BOOL onmousewheel([in] IHTMLEventObj* pEvtObj);
}

/*****************************************************************************
 *    IHTMLTableCaption interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f2eb-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLTableCaption : IDispatch
{
    [propput, id(DISPID_IHTMLTABLECAPTION_ALIGN)]
    HRESULT align([in] BSTR v);

    [propget, id(DISPID_IHTMLTABLECAPTION_ALIGN)]
    HRESULT align([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLTABLECAPTION_VALIGN)]
    HRESULT vAlign([in] BSTR v);

    [propget, id(DISPID_IHTMLTABLECAPTION_VALIGN)]
    HRESULT vAlign([retval, out] BSTR *p);
}

interface IHTMLTableSection;

/*****************************************************************************
 *    IHTMLTable interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f21e-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLTable : IDispatch
{
    [propput, id(DISPID_IHTMLTABLE_COLS)]
    HRESULT cols([in] LONG v);

    [propget, id(DISPID_IHTMLTABLE_COLS)]
    HRESULT cols([retval, out] LONG *p);

    [propput, id(DISPID_IHTMLTABLE_BORDER)]
    HRESULT border([in] VARIANT v);

    [propget, id(DISPID_IHTMLTABLE_BORDER)]
    HRESULT border([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLTABLE_FRAME)]
    HRESULT frame([in] BSTR v);

    [propget, id(DISPID_IHTMLTABLE_FRAME)]
    HRESULT frame([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLTABLE_RULES)]
    HRESULT rules([in] BSTR v);

    [propget, id(DISPID_IHTMLTABLE_RULES)]
    HRESULT rules([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLTABLE_CELLSPACING)]
    HRESULT cellSpacing([in] VARIANT v);

    [propget, id(DISPID_IHTMLTABLE_CELLSPACING)]
    HRESULT cellSpacing([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLTABLE_CELLPADDING)]
    HRESULT cellPadding([in] VARIANT v);

    [propget, id(DISPID_IHTMLTABLE_CELLPADDING)]
    HRESULT cellPadding([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLTABLE_BACKGROUND)]
    HRESULT background([in] BSTR v);

    [propget, id(DISPID_IHTMLTABLE_BACKGROUND)]
    HRESULT background([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLTABLE_BGCOLOR)]
    HRESULT bgColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLTABLE_BGCOLOR)]
    HRESULT bgColor([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLTABLE_BORDERCOLOR)]
    HRESULT borderColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLTABLE_BORDERCOLOR)]
    HRESULT borderColor([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLTABLE_BORDERCOLORLIGHT)]
    HRESULT borderColorLight([in] VARIANT v);

    [propget, id(DISPID_IHTMLTABLE_BORDERCOLORLIGHT)]
    HRESULT borderColorLight([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLTABLE_BORDERCOLORDARK)]
    HRESULT borderColorDark([in] VARIANT v);

    [propget, id(DISPID_IHTMLTABLE_BORDERCOLORDARK)]
    HRESULT borderColorDark([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLTABLE_ALIGN)]
    HRESULT align([in] BSTR v);

    [propget, id(DISPID_IHTMLTABLE_ALIGN)]
    HRESULT align([retval, out] BSTR * p);

    [id(DISPID_IHTMLTABLE_REFRESH)]
    HRESULT refresh();

    [propget, id(DISPID_IHTMLTABLE_ROWS)]
    HRESULT rows([retval, out] IHTMLElementCollection **p);

    [propput, id(DISPID_IHTMLTABLE_WIDTH)]
    HRESULT width([in] VARIANT v);

    [propget, id(DISPID_IHTMLTABLE_WIDTH)]
    HRESULT width([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLTABLE_HEIGHT)]
    HRESULT height([in] VARIANT v);

    [propget, id(DISPID_IHTMLTABLE_HEIGHT)]
    HRESULT height([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLTABLE_DATAPAGESIZE)]
    HRESULT dataPageSize([in] LONG v);

    [propget, id(DISPID_IHTMLTABLE_DATAPAGESIZE)]
    HRESULT dataPageSize([retval, out] LONG *p);

    [id(DISPID_IHTMLTABLE_NEXTPAGE)]
    HRESULT nextPage();

    [id(DISPID_IHTMLTABLE_PREVIOUSPAGE)]
    HRESULT previousPage();

    [propget, id(DISPID_IHTMLTABLE_THEAD)]
    HRESULT tHead([retval, out] IHTMLTableSection **p);

    [propget, id(DISPID_IHTMLTABLE_TFOOT)]
    HRESULT tFoot([retval, out] IHTMLTableSection **p);

    [propget, id(DISPID_IHTMLTABLE_TBODIES)]
    HRESULT tBodies([retval, out] IHTMLElementCollection **p);

    [propget, id(DISPID_IHTMLTABLE_CAPTION)]
    HRESULT caption([retval, out] IHTMLTableCaption **p);

    [id(DISPID_IHTMLTABLE_CREATETHEAD)]
    HRESULT createTHead([retval, out] IDispatch **head);

    [id(DISPID_IHTMLTABLE_DELETETHEAD)]
    HRESULT deleteTHead();

    [id(DISPID_IHTMLTABLE_CREATETFOOT)]
    HRESULT createTFoot([retval, out] IDispatch **foot);

    [id(DISPID_IHTMLTABLE_DELETETFOOT)]
    HRESULT deleteTFoot();

    [id(DISPID_IHTMLTABLE_CREATECAPTION)]
    HRESULT createCaption([retval, out] IHTMLTableCaption **caption);

    [id(DISPID_IHTMLTABLE_DELETECAPTION)]
    HRESULT deleteCaption();

    [id(DISPID_IHTMLTABLE_INSERTROW)]
    HRESULT insertRow(
            [defaultvalue(-1), in] LONG index,
            [retval, out] IDispatch **row);

    [id(DISPID_IHTMLTABLE_DELETEROW)]
    HRESULT deleteRow([defaultvalue(-1), in] LONG index);

    [propget, id(DISPID_IHTMLTABLE_READYSTATE)]
    HRESULT readyState([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLTABLE_ONREADYSTATECHANGE), displaybind, bindable]
    HRESULT onreadystatechange([in] VARIANT v);

    [propget, id(DISPID_IHTMLTABLE_ONREADYSTATECHANGE), displaybind, bindable]
    HRESULT onreadystatechange([retval, out] VARIANT *p);
}

[
    odl,
    oleautomation,
    dual,
    uuid(3050f4ad-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLTable2 : IDispatch
{
    [id(DISPID_IHTMLTABLE2_FIRSTPAGE)]
    HRESULT firstPage();

    [id(DISPID_IHTMLTABLE2_LASTPAGE)]
    HRESULT lastPage();

    [propget, id(DISPID_IHTMLTABLE2_CELLS)]
    HRESULT cells([retval, out] IHTMLElementCollection* * p);

    [id(DISPID_IHTMLTABLE2_MOVEROW)]
    HRESULT moveRow([defaultvalue(-1), in] LONG indexFrom,
        [defaultvalue(-1), in] LONG indexTo,
        [retval, out] IDispatch** row);
}

[
    odl,
    oleautomation,
    dual,
    uuid(3050f829-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLTable3 : IDispatch
{
    [propput, id(DISPID_IHTMLTABLE3_SUMMARY), displaybind, bindable]
    HRESULT summary([in] BSTR v);

    [propget, id(DISPID_IHTMLTABLE3_SUMMARY), displaybind, bindable]
    HRESULT summary([retval, out] BSTR * p);
}

[
    noncreatable,
    uuid(3050f26b-98b5-11cf-bb82-00aa00bdce0b)
]
coclass HTMLTable
{
    [default]           dispinterface DispHTMLTable;
    [source, default]   dispinterface HTMLTableEvents;
    [source]            dispinterface HTMLTableEvents2;
                        interface IHTMLElement;
                        interface IHTMLElement2;
                        interface IHTMLElement3;
                        interface IHTMLElement4;
                        interface IHTMLUniqueName;
                        interface IHTMLDOMNode;
                        interface IHTMLDOMNode2;
                        interface IHTMLDatabinding;
                        interface IHTMLControlElement;
                        interface IHTMLTable;
                        interface IHTMLTable2;
                        interface IHTMLTable3;
}

[
    odl,
    oleautomation,
    dual,
    uuid(3050f23b-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLTableSection : IDispatch
{
    [propput, id(DISPID_IHTMLTABLESECTION_ALIGN)]
    HRESULT align([in] BSTR v);

    [propget, id(DISPID_IHTMLTABLESECTION_ALIGN)]
    HRESULT align([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLTABLESECTION_VALIGN)]
    HRESULT vAlign([in] BSTR v);

    [propget, id(DISPID_IHTMLTABLESECTION_VALIGN)]
    HRESULT vAlign([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLTABLESECTION_BGCOLOR)]
    HRESULT bgColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLTABLESECTION_BGCOLOR)]
    HRESULT bgColor([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLTABLESECTION_ROWS)]
    HRESULT rows([retval, out] IHTMLElementCollection **p);

    [id(DISPID_IHTMLTABLESECTION_INSERTROW)]
    HRESULT insertRow(
            [defaultvalue(-1), in] LONG index,
            [retval, out] IDispatch **row);

    [id(DISPID_IHTMLTABLESECTION_DELETEROW)]
    HRESULT deleteRow([defaultvalue(-1), in] LONG index);
}

/*****************************************************************************
 *    IHTMLTableRow interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f23c-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLTableRow : IDispatch
{
    [propput, id(DISPID_IHTMLTABLEROW_ALIGN)]
    HRESULT align([in] BSTR v);

    [propget, id(DISPID_IHTMLTABLEROW_ALIGN)]
    HRESULT align([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLTABLEROW_VALIGN)]
    HRESULT vAlign([in] BSTR v);

    [propget, id(DISPID_IHTMLTABLEROW_VALIGN)]
    HRESULT vAlign([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLTABLEROW_BGCOLOR)]
    HRESULT bgColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLTABLEROW_BGCOLOR)]
    HRESULT bgColor([out, retval] VARIANT *p);

    [propput, id(DISPID_IHTMLTABLEROW_BORDERCOLOR)]
    HRESULT borderColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLTABLEROW_BORDERCOLOR)]
    HRESULT borderColor([out, retval] VARIANT *p);

    [propput, id(DISPID_IHTMLTABLEROW_BORDERCOLORLIGHT)]
    HRESULT borderColorLight([in] VARIANT v);

    [propget, id(DISPID_IHTMLTABLEROW_BORDERCOLORLIGHT)]
    HRESULT borderColorLight([out, retval] VARIANT *p);

    [propput, id(DISPID_IHTMLTABLEROW_BORDERCOLORDARK)]
    HRESULT borderColorDark([in] VARIANT v);

    [propget, id(DISPID_IHTMLTABLEROW_BORDERCOLORDARK)]
    HRESULT borderColorDark([out, retval] VARIANT *p);

    [propget, id(DISPID_IHTMLTABLEROW_ROWINDEX)]
    HRESULT rowIndex([out, retval] LONG *p);

    [propget, id(DISPID_IHTMLTABLEROW_SECTIONROWINDEX)]
    HRESULT sectionRowIndex([out, retval] LONG *p);

    [propget, id(DISPID_IHTMLTABLEROW_CELLS)]
    HRESULT cells([out, retval] IHTMLElementCollection **p);

    [id(DISPID_IHTMLTABLEROW_INSERTCELL)]
    HRESULT insertCell(
            [in, defaultvalue(-1)] LONG index,
            [out, retval] IDispatch **row);

    [id(DISPID_IHTMLTABLEROW_DELETECELL)]
    HRESULT deleteCell([in, defaultvalue(-1)] LONG index);
}

/*****************************************************************************
 *    DispHTMLTable interface
 */
[
    hidden,
    uuid(3050f532-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLTable
{
properties:
methods:
    WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;

    [propput, id(DISPID_IHTMLTABLE_COLS)]
    void cols(LONG v);

    [propget, id(DISPID_IHTMLTABLE_COLS)]
    LONG cols();

    [propput, id(DISPID_IHTMLTABLE_BORDER)]
    void border(VARIANT v);

    [propget, id(DISPID_IHTMLTABLE_BORDER)]
    VARIANT border();

    [propput, id(DISPID_IHTMLTABLE_FRAME)]
    void frame(BSTR v);

    [propget, id(DISPID_IHTMLTABLE_FRAME)]
    BSTR frame();

    [propput, id(DISPID_IHTMLTABLE_RULES)]
    void rules(BSTR v);

    [propget, id(DISPID_IHTMLTABLE_RULES)]
    BSTR rules();

    [propput, id(DISPID_IHTMLTABLE_CELLSPACING)]
    void cellSpacing(VARIANT v);

    [propget, id(DISPID_IHTMLTABLE_CELLSPACING)]
    VARIANT cellSpacing();

    [propput, id(DISPID_IHTMLTABLE_CELLPADDING)]
    void cellPadding(VARIANT v);

    [propget, id(DISPID_IHTMLTABLE_CELLPADDING)]
    VARIANT cellPadding();

    [propput, id(DISPID_IHTMLTABLE_BACKGROUND)]
    void background(BSTR v);

    [propget, id(DISPID_IHTMLTABLE_BACKGROUND)]
    BSTR background();

    [propput, id(DISPID_IHTMLTABLE_BGCOLOR)]
    void bgColor(VARIANT v);

    [propget, id(DISPID_IHTMLTABLE_BGCOLOR)]
    VARIANT bgColor();

    [propput, id(DISPID_IHTMLTABLE_BORDERCOLOR)]
    void borderColor(VARIANT v);

    [propget, id(DISPID_IHTMLTABLE_BORDERCOLOR)]
    VARIANT borderColor();

    [propput, id(DISPID_IHTMLTABLE_BORDERCOLORLIGHT)]
    void borderColorLight(VARIANT v);

    [propget, id(DISPID_IHTMLTABLE_BORDERCOLORLIGHT)]
    VARIANT borderColorLight();

    [propput, id(DISPID_IHTMLTABLE_BORDERCOLORDARK)]
    void borderColorDark(VARIANT v);

    [propget, id(DISPID_IHTMLTABLE_BORDERCOLORDARK)]
    VARIANT borderColorDark();

    [propput, id(DISPID_IHTMLTABLE_ALIGN)]
    void align(BSTR v);

    [propget, id(DISPID_IHTMLTABLE_ALIGN)]
    BSTR align();

    [id(DISPID_IHTMLTABLE_REFRESH)]
    void refresh();

    [propget, id(DISPID_IHTMLTABLE_ROWS)]
    IHTMLElementCollection *rows();

    [propput, id(DISPID_IHTMLTABLE_WIDTH)]
    void width(VARIANT v);

    [propget, id(DISPID_IHTMLTABLE_WIDTH)]
    VARIANT width();

    [propput, id(DISPID_IHTMLTABLE_HEIGHT)]
    void height(VARIANT v);

    [propget, id(DISPID_IHTMLTABLE_HEIGHT)]
    VARIANT height();

    [propput, id(DISPID_IHTMLTABLE_DATAPAGESIZE)]
    void dataPageSize(LONG v);

    [propget, id(DISPID_IHTMLTABLE_DATAPAGESIZE)]
    LONG dataPageSize();

    [id(DISPID_IHTMLTABLE_NEXTPAGE)]
    void nextPage();

    [id(DISPID_IHTMLTABLE_PREVIOUSPAGE)]
    void previousPage();

    [propget, id(DISPID_IHTMLTABLE_THEAD)]
    IHTMLTableSection *tHead();

    [propget, id(DISPID_IHTMLTABLE_TFOOT)]
    IHTMLTableSection *tFoot();

    [propget, id(DISPID_IHTMLTABLE_TBODIES)]
    IHTMLElementCollection *tBodies();

    [propget, id(DISPID_IHTMLTABLE_CAPTION)]
    IHTMLTableCaption *caption();

    [id(DISPID_IHTMLTABLE_CREATETHEAD)]
    IDispatch *createTHead();

    [id(DISPID_IHTMLTABLE_DELETETHEAD)]
    void deleteTHead();

    [id(DISPID_IHTMLTABLE_CREATETFOOT)]
    IDispatch *createTFoot();

    [id(DISPID_IHTMLTABLE_DELETETFOOT)]
    void deleteTFoot();

    [id(DISPID_IHTMLTABLE_CREATECAPTION)]
    IHTMLTableCaption *createCaption();

    [id(DISPID_IHTMLTABLE_DELETECAPTION)]
    void deleteCaption();

    [id(DISPID_IHTMLTABLE_INSERTROW)]
    IDispatch *insertRow([in, defaultvalue(-1)] LONG index);

    [id(DISPID_IHTMLTABLE_DELETEROW)]
    void deleteRow([in, defaultvalue(-1)] LONG index);

    [id(DISPID_IHTMLTABLE2_FIRSTPAGE)]
    void firstPage();

    [id(DISPID_IHTMLTABLE2_LASTPAGE)]
    void lastPage();

    [propget, id(DISPID_IHTMLTABLE2_CELLS)]
    IHTMLElementCollection *cells();

    [id(DISPID_IHTMLTABLE2_MOVEROW)]
    IDispatch *moveRow(
            [in, defaultvalue(-1)] LONG indexFrom,
            [in, defaultvalue(-1)] LONG indexTo);

    [propput, id(DISPID_IHTMLTABLE3_SUMMARY), displaybind, bindable]
    void summary(BSTR v);

    [propget, id(DISPID_IHTMLTABLE3_SUMMARY), displaybind, bindable]
    BSTR summary();
}

/*****************************************************************************
 *    DispHTMLTableRow dispinterface
 */
[
    hidden,
    uuid(3050f535-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLTableRow
{
properties:
methods:
    WINE_HTMLELEMENT_DISPINTERFACE_DECL;

    [propput, id(DISPID_IHTMLTABLEROW_ALIGN)]
    void align(BSTR v);

    [propget, id(DISPID_IHTMLTABLEROW_ALIGN)]
    BSTR align();

    [propput, id(DISPID_IHTMLTABLEROW_VALIGN)]
    void vAlign(BSTR v);

    [propget, id(DISPID_IHTMLTABLEROW_VALIGN)]
    BSTR vAlign();

    [propput, id(DISPID_IHTMLTABLEROW_BGCOLOR)]
    void bgColor(VARIANT v);

    [propget, id(DISPID_IHTMLTABLEROW_BGCOLOR)]
    VARIANT bgColor();

    [propput, id(DISPID_IHTMLTABLEROW_BORDERCOLOR)]
    void borderColor(VARIANT v);

    [propget, id(DISPID_IHTMLTABLEROW_BORDERCOLOR)]
    VARIANT borderColor();

    [propput, id(DISPID_IHTMLTABLEROW_BORDERCOLORLIGHT)]
    void borderColorLight(VARIANT v);

    [propget, id(DISPID_IHTMLTABLEROW_BORDERCOLORLIGHT)]
    VARIANT borderColorLight();

    [propput, id(DISPID_IHTMLTABLEROW_BORDERCOLORDARK)]
    void borderColorDark(VARIANT v);

    [propget, id(DISPID_IHTMLTABLEROW_BORDERCOLORDARK)]
    VARIANT borderColorDark();

    [propget, id(DISPID_IHTMLTABLEROW_ROWINDEX)]
    LONG rowIndex();

    [propget, id(DISPID_IHTMLTABLEROW_SECTIONROWINDEX)]
    LONG sectionRowIndex();

    [propget, id(DISPID_IHTMLTABLEROW_CELLS)]
    IHTMLElementCollection *cells();

    [id(DISPID_IHTMLTABLEROW_INSERTCELL)]
    IDispatch *insertCell([in, defaultvalue(-1)] LONG index);

    [id(DISPID_IHTMLTABLEROW_DELETECELL)]
    void deleteCell([in, defaultvalue(-1)] LONG index);

    [propput, id(DISPID_IHTMLTABLEROW2_HEIGHT)]
    void height(VARIANT v);

    [propget, id(DISPID_IHTMLTABLEROW2_HEIGHT)]
    VARIANT height();

    [propput, id(DISPID_IHTMLTABLEROW3_CH), displaybind, bindable]
    void ch(BSTR v);

    [propget, id(DISPID_IHTMLTABLEROW3_CH), displaybind, bindable]
    BSTR ch();

    [propput, id(DISPID_IHTMLTABLEROW3_CHOFF), displaybind, bindable]
    void chOff(BSTR v);

    [propget, id(DISPID_IHTMLTABLEROW3_CHOFF), displaybind, bindable]
    BSTR chOff();
}

/*****************************************************************************
 *    IHTMLScriptElement interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f28b-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLScriptElement : IDispatch
{
    [propput, id(DISPID_IHTMLSCRIPTELEMENT_SRC), displaybind, bindable]
    HRESULT src([in] BSTR v);

    [propget, id(DISPID_IHTMLSCRIPTELEMENT_SRC), displaybind, bindable]
    HRESULT src([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSCRIPTELEMENT_HTMLFOR), displaybind, bindable]
    HRESULT htmlFor([in] BSTR v);

    [propget, id(DISPID_IHTMLSCRIPTELEMENT_HTMLFOR), displaybind, bindable]
    HRESULT htmlFor([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSCRIPTELEMENT_EVENT), displaybind, bindable]
    HRESULT event([in] BSTR v);

    [propget, id(DISPID_IHTMLSCRIPTELEMENT_EVENT), displaybind, bindable]
    HRESULT event([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSCRIPTELEMENT_TEXT), displaybind, bindable]
    HRESULT text([in] BSTR v);

    [propget, id(DISPID_IHTMLSCRIPTELEMENT_TEXT), displaybind, bindable]
    HRESULT text([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSCRIPTELEMENT_DEFER), displaybind, bindable]
    HRESULT defer([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLSCRIPTELEMENT_DEFER), displaybind, bindable]
    HRESULT defer([retval, out] VARIANT_BOOL *p);

    [propget, id(DISPID_IHTMLSCRIPTELEMENT_READYSTATE)]
    HRESULT readyState([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSCRIPTELEMENT_ONERROR), displaybind, bindable]
    HRESULT onerror([in] VARIANT v);

    [propget, id(DISPID_IHTMLSCRIPTELEMENT_ONERROR), displaybind, bindable]
    HRESULT onerror([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSCRIPTELEMENT_TYPE), displaybind, bindable]
    HRESULT type([in] BSTR v);

    [propget, id(DISPID_IHTMLSCRIPTELEMENT_TYPE), displaybind, bindable]
    HRESULT type([retval, out] BSTR *p);
}

/*****************************************************************************
 *    IHTMLScriptElement2 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f828-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLScriptElement2 : IDispatch
{
    [propput, id(DISPID_IHTMLSCRIPTELEMENT2_CHARSET), displaybind, bindable]
    HRESULT charset([in] BSTR v);

    [propget, id(DISPID_IHTMLSCRIPTELEMENT2_CHARSET), displaybind, bindable]
    HRESULT charset([retval, out] BSTR *p);
}

/*****************************************************************************
 *    DispHTMLScriptElement dispinterface
 */
[
    hidden,
    uuid(3050f530-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLScriptElement
{
properties:
methods:
    WINE_HTMLELEMENT_DISPINTERFACE_DECL;

    [propput, id(DISPID_IHTMLSCRIPTELEMENT_SRC), displaybind, bindable]
    void src(BSTR v);

    [propget, id(DISPID_IHTMLSCRIPTELEMENT_SRC), displaybind, bindable]
    BSTR src();

    [propput, id(DISPID_IHTMLSCRIPTELEMENT_HTMLFOR), displaybind, bindable]
    void htmlFor(BSTR v);

    [propget, id(DISPID_IHTMLSCRIPTELEMENT_HTMLFOR), displaybind, bindable]
    BSTR htmlFor();

    [propput, id(DISPID_IHTMLSCRIPTELEMENT_EVENT), displaybind, bindable]
    void event(BSTR v);

    [propget, id(DISPID_IHTMLSCRIPTELEMENT_EVENT), displaybind, bindable]
    BSTR event();

    [propput, id(DISPID_IHTMLSCRIPTELEMENT_TEXT), displaybind, bindable]
    void text(BSTR v);

    [propget, id(DISPID_IHTMLSCRIPTELEMENT_TEXT), displaybind, bindable]
    BSTR text();

    [propput, id(DISPID_IHTMLSCRIPTELEMENT_DEFER), displaybind, bindable]
    void defer(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLSCRIPTELEMENT_DEFER), displaybind, bindable]
    VARIANT_BOOL defer();

    [propput, id(DISPID_IHTMLSCRIPTELEMENT_ONERROR), displaybind, bindable]
    void onerror(VARIANT v);

    [propget, id(DISPID_IHTMLSCRIPTELEMENT_ONERROR), displaybind, bindable]
    VARIANT onerror();

    [propput, id(DISPID_IHTMLSCRIPTELEMENT_TYPE), displaybind, bindable]
    void type(BSTR v);

    [propget, id(DISPID_IHTMLSCRIPTELEMENT_TYPE), displaybind, bindable]
    BSTR type();

    [propput, id(DISPID_IHTMLSCRIPTELEMENT2_CHARSET), displaybind, bindable]
    void charset(BSTR v);

    [propget, id(DISPID_IHTMLSCRIPTELEMENT2_CHARSET), displaybind, bindable]
    BSTR charset();

    [propput, id(DISPID_IHTMLSCRIPTELEMENT3_IE8_SRC)]
    void ie8_src(BSTR v);

    [propget, id(DISPID_IHTMLSCRIPTELEMENT3_IE8_SRC)]
    BSTR ie8_src();
}

/*****************************************************************************
 *    IHTMLObjectElement interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f24f-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLObjectElement : IDispatch
{
    [propget, id(DISPID_IHTMLOBJECTELEMENT_OBJECT), hidden]
    HRESULT object([retval, out] IDispatch **p);

    [propget, id(DISPID_IHTMLOBJECTELEMENT_CLASSID), hidden]
    HRESULT classid([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLOBJECTELEMENT_DATA), hidden]
    HRESULT data([retval, out] BSTR *p);

    [propputref, id(DISPID_IHTMLOBJECTELEMENT_RECORDSET), hidden]
    HRESULT recordset([in] IDispatch *v);

    [propget, id(DISPID_IHTMLOBJECTELEMENT_RECORDSET), hidden]
    HRESULT recordset([retval, out] IDispatch **p);

    [propput, id(DISPID_IHTMLOBJECTELEMENT_ALIGN), displaybind, bindable]
    HRESULT align([in] BSTR v);

    [propget, id(DISPID_IHTMLOBJECTELEMENT_ALIGN), displaybind, bindable]
    HRESULT align([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLOBJECTELEMENT_NAME), displaybind, bindable]
    HRESULT name([in] BSTR v);

    [propget, id(DISPID_IHTMLOBJECTELEMENT_NAME), displaybind, bindable]
    HRESULT name([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLOBJECTELEMENT_CODEBASE), displaybind, bindable]
    HRESULT codeBase([in] BSTR v);

    [propget, id(DISPID_IHTMLOBJECTELEMENT_CODEBASE), displaybind, bindable]
    HRESULT codeBase([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLOBJECTELEMENT_CODETYPE), displaybind, bindable]
    HRESULT codeType([in] BSTR v);

    [propget, id(DISPID_IHTMLOBJECTELEMENT_CODETYPE), displaybind, bindable]
    HRESULT codeType([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLOBJECTELEMENT_CODE), displaybind, bindable]
    HRESULT code([in] BSTR v);

    [propget, id(DISPID_IHTMLOBJECTELEMENT_CODE), displaybind, bindable]
    HRESULT code([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLOBJECTELEMENT_BASEHREF)]
    HRESULT BaseHref([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLOBJECTELEMENT_TYPE), displaybind, bindable]
    HRESULT type([in] BSTR v);

    [propget, id(DISPID_IHTMLOBJECTELEMENT_TYPE), displaybind, bindable]
    HRESULT type([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLOBJECTELEMENT_FORM)]
    HRESULT form([retval, out] IHTMLFormElement **p);

    [propput, id(DISPID_IHTMLOBJECTELEMENT_WIDTH)]
    HRESULT width([in] VARIANT v);

    [propget, id(DISPID_IHTMLOBJECTELEMENT_WIDTH)]
    HRESULT width([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLOBJECTELEMENT_HEIGHT)]
    HRESULT height([in] VARIANT v);

    [propget, id(DISPID_IHTMLOBJECTELEMENT_HEIGHT)]
    HRESULT height([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLOBJECTELEMENT_READYSTATE), hidden]
    HRESULT readyState([retval, out] long *p);

    [propput, id(DISPID_IHTMLOBJECTELEMENT_ONREADYSTATECHANGE), displaybind, bindable]
    HRESULT onreadystatechange([in] VARIANT v);

    [propget, id(DISPID_IHTMLOBJECTELEMENT_ONREADYSTATECHANGE), displaybind, bindable]
    HRESULT onreadystatechange([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLOBJECTELEMENT_ONERROR), displaybind, bindable]
    HRESULT onerror([in] VARIANT v);

    [propget, id(DISPID_IHTMLOBJECTELEMENT_ONERROR), displaybind, bindable]
    HRESULT onerror([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLOBJECTELEMENT_ALTHTML)]
    HRESULT altHtml([in] BSTR v);

    [propget, id(DISPID_IHTMLOBJECTELEMENT_ALTHTML)]
    HRESULT altHtml([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLOBJECTELEMENT_VSPACE)]
    HRESULT vspace([in] long v);

    [propget, id(DISPID_IHTMLOBJECTELEMENT_VSPACE)]
    HRESULT vspace([retval, out] long *p);

    [propput, id(DISPID_IHTMLOBJECTELEMENT_HSPACE)]
    HRESULT hspace([in] long v);

    [propget, id(DISPID_IHTMLOBJECTELEMENT_HSPACE)]
    HRESULT hspace([retval, out] long *p);
}

/*****************************************************************************
 *    IHTMLParamElement interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f83d-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLParamElement : IDispatch
{
    [propput, id(DISPID_IHTMLPARAMELEMENT_NAME), displaybind, bindable]
    HRESULT name([in] BSTR v);

    [propget, id(DISPID_IHTMLPARAMELEMENT_NAME), displaybind, bindable]
    HRESULT name([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLPARAMELEMENT_VALUE), displaybind, bindable]
    HRESULT value([in] BSTR v);

    [propget, id(DISPID_IHTMLPARAMELEMENT_VALUE), displaybind, bindable]
    HRESULT value([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLPARAMELEMENT_TYPE), displaybind, bindable]
    HRESULT type([in] BSTR v);

    [propget, id(DISPID_IHTMLPARAMELEMENT_TYPE), displaybind, bindable]
    HRESULT type([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLPARAMELEMENT_VALUETYPE), displaybind, bindable]
    HRESULT valueType([in] BSTR v);

    [propget, id(DISPID_IHTMLPARAMELEMENT_VALUETYPE), displaybind, bindable]
    HRESULT valueType([retval, out] BSTR *p);
}

/*****************************************************************************
 *    IHTMLParamElement2 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(30510444-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLParamElement2 : IDispatch
{
    [propput, id(DISPID_IHTMLPARAMELEMENT2_NAME), displaybind, bindable]
    HRESULT name([in] BSTR v);

    [propget, id(DISPID_IHTMLPARAMELEMENT2_NAME), displaybind, bindable]
    HRESULT name([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLPARAMELEMENT2_TYPE), displaybind, bindable]
    HRESULT type([in] BSTR v);

    [propget, id(DISPID_IHTMLPARAMELEMENT2_TYPE), displaybind, bindable]
    HRESULT type([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLPARAMELEMENT2_VALUE), displaybind, bindable]
    HRESULT value([in] BSTR v);

    [propget, id(DISPID_IHTMLPARAMELEMENT2_VALUE), displaybind, bindable]
    HRESULT value([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLPARAMELEMENT2_IE8_VALUETYPE)]
    HRESULT valueType([in] BSTR v);

    [propget, id(DISPID_IHTMLPARAMELEMENT2_IE8_VALUETYPE)]
    HRESULT valueType([retval, out] BSTR *p);
}

/*****************************************************************************
 *    DispHTMLObjectElement dispinterface
 */
[
    hidden,
    uuid(3050f529-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLObjectElement
{
properties:
methods:
    WINE_HTMLELEMENT_DISPINTERFACE_DECL;

    [propget, id(DISPID_IHTMLOBJECTELEMENT_OBJECT), hidden]
    IDispatch *object();

    [propputref, id(DISPID_IHTMLOBJECTELEMENT_RECORDSET), hidden]
    void recordset(IDispatch *v);

    [propget, id(DISPID_IHTMLOBJECTELEMENT_RECORDSET), hidden]
    IDispatch *recordset();

    [propput, id(DISPID_IHTMLOBJECTELEMENT_ALIGN), displaybind, bindable]
    void align(BSTR v);

    [propget, id(DISPID_IHTMLOBJECTELEMENT_ALIGN), displaybind, bindable]
    BSTR align();

    [propput, id(DISPID_IHTMLOBJECTELEMENT_NAME), displaybind, bindable]
    void name(BSTR v);

    [propget, id(DISPID_IHTMLOBJECTELEMENT_NAME), displaybind, bindable]
    BSTR name();

    [propput, id(DISPID_IHTMLOBJECTELEMENT_CODEBASE), displaybind, bindable]
    void codeBase(BSTR v);

    [propget, id(DISPID_IHTMLOBJECTELEMENT_CODEBASE), displaybind, bindable]
    BSTR codeBase();

    [propput, id(DISPID_IHTMLOBJECTELEMENT_CODETYPE), displaybind, bindable]
    void codeType(BSTR v);

    [propget, id(DISPID_IHTMLOBJECTELEMENT_CODETYPE), displaybind, bindable]
    BSTR codeType();

    [propput, id(DISPID_IHTMLOBJECTELEMENT_CODE), displaybind, bindable]
    void code(BSTR v);

    [propget, id(DISPID_IHTMLOBJECTELEMENT_CODE), displaybind, bindable]
    BSTR code();

    [propget, id(DISPID_IHTMLOBJECTELEMENT_BASEHREF)]
    BSTR BaseHref();

    [propput, id(DISPID_IHTMLOBJECTELEMENT_TYPE), displaybind, bindable]
    void type(BSTR v);

    [propget, id(DISPID_IHTMLOBJECTELEMENT_TYPE), displaybind, bindable]
    BSTR type();

    [propget, id(DISPID_IHTMLOBJECTELEMENT_FORM)]
    IHTMLFormElement *form();

    [propput, id(DISPID_IHTMLOBJECTELEMENT_WIDTH)]
    void width(VARIANT v);

    [propget, id(DISPID_IHTMLOBJECTELEMENT_WIDTH)]
    VARIANT width();

    [propput, id(DISPID_IHTMLOBJECTELEMENT_HEIGHT)]
    void height(VARIANT v);

    [propget, id(DISPID_IHTMLOBJECTELEMENT_HEIGHT)]
    VARIANT height();

    [propput, id(DISPID_IHTMLOBJECTELEMENT_ONERROR), displaybind, bindable]
    void onerror(VARIANT v);

    [propget, id(DISPID_IHTMLOBJECTELEMENT_ONERROR), displaybind, bindable]
    VARIANT onerror();

    [propput, id(DISPID_IHTMLOBJECTELEMENT_ALTHTML)]
    void altHtml(BSTR v);

    [propget, id(DISPID_IHTMLOBJECTELEMENT_ALTHTML)]
    BSTR altHtml();

    [propput, id(DISPID_IHTMLOBJECTELEMENT_VSPACE)]
    void vspace(long v);

    [propget, id(DISPID_IHTMLOBJECTELEMENT_VSPACE)]
    long vspace();

    [propput, id(DISPID_IHTMLOBJECTELEMENT_HSPACE)]
    void hspace(long v);

    [propget, id(DISPID_IHTMLOBJECTELEMENT_HSPACE)]
    long hspace();

    [id(DISPID_IHTMLOBJECTELEMENT2_NAMEDRECORDSET)]
    IDispatch *namedRecordset(
            [in] BSTR dataMember,
            [optional, in] VARIANT *hierarchy);

    [propput, id(DISPID_IHTMLOBJECTELEMENT2_CLASSID), hidden]
    void classid(BSTR v);

    [propget, id(DISPID_IHTMLOBJECTELEMENT2_CLASSID), hidden]
    BSTR classid();

    [propput, id(DISPID_IHTMLOBJECTELEMENT2_DATA), hidden]
    void data(BSTR v);

    [propget, id(DISPID_IHTMLOBJECTELEMENT2_DATA), hidden]
    BSTR data();

    [propput, id(DISPID_IHTMLOBJECTELEMENT3_ARCHIVE), displaybind, bindable]
    void archive(BSTR v);

    [propget, id(DISPID_IHTMLOBJECTELEMENT3_ARCHIVE), displaybind, bindable]
    BSTR archive();

    [propput, id(DISPID_IHTMLOBJECTELEMENT3_ALT), displaybind, bindable]
    void alt(BSTR v);

    [propget, id(DISPID_IHTMLOBJECTELEMENT3_ALT), displaybind, bindable]
    BSTR alt();

    [propput, id(DISPID_IHTMLOBJECTELEMENT3_DECLARE), displaybind, bindable]
    void declare(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLOBJECTELEMENT3_DECLARE), displaybind, bindable]
    VARIANT_BOOL declare();

    [propput, id(DISPID_IHTMLOBJECTELEMENT3_STANDBY), displaybind, bindable]
    void standby(BSTR v);

    [propget, id(DISPID_IHTMLOBJECTELEMENT3_STANDBY), displaybind, bindable]
    BSTR standby();

    [propput, id(DISPID_IHTMLOBJECTELEMENT3_BORDER)]
    void border(VARIANT v);

    [propget, id(DISPID_IHTMLOBJECTELEMENT3_BORDER)]
    VARIANT border();

    [propput, id(DISPID_IHTMLOBJECTELEMENT3_USEMAP), displaybind, bindable]
    void useMap(BSTR v);

    [propget, id(DISPID_IHTMLOBJECTELEMENT3_USEMAP), displaybind, bindable]
    BSTR useMap();

    [propget, id(DISPID_IHTMLOBJECTELEMENT4_CONTENTDOCUMENT)]
    IDispatch *contentDocument();

    [propput, id(DISPID_IHTMLOBJECTELEMENT4_IE8_CODEBASE)]
    void ie8_codeBase(BSTR v);

    [propget, id(DISPID_IHTMLOBJECTELEMENT4_IE8_CODEBASE)]
    BSTR ie8_codeBase();

    [propput, id(DISPID_IHTMLOBJECTELEMENT4_IE8_DATA)]
    void ie8_data(BSTR v);

    [propget, id(DISPID_IHTMLOBJECTELEMENT4_IE8_DATA)]
    BSTR ie8_data();
}

/*****************************************************************************
 *    DispHTMLParamElement dispinterface
 */
[
    hidden,
    uuid(3050f590-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLParamElement
{
properties:
methods:
    WINE_HTMLELEMENT_DISPINTERFACE_DECL;

    [propput, id(DISPID_IHTMLPARAMELEMENT_NAME), displaybind, bindable]
    void name(BSTR v);

    [propget, id(DISPID_IHTMLPARAMELEMENT_NAME), displaybind, bindable]
    BSTR name();

    [propput, id(DISPID_IHTMLPARAMELEMENT_VALUE), displaybind, bindable]
    void value(BSTR v);

    [propget, id(DISPID_IHTMLPARAMELEMENT_VALUE), displaybind, bindable]
    BSTR value();

    [propput, id(DISPID_IHTMLPARAMELEMENT_TYPE), displaybind, bindable]
    void type(BSTR v);

    [propget, id(DISPID_IHTMLPARAMELEMENT_TYPE), displaybind, bindable]
    BSTR type();

    [propput, id(DISPID_IHTMLPARAMELEMENT_VALUETYPE), displaybind, bindable]
    void valueType(BSTR v);

    [propget, id(DISPID_IHTMLPARAMELEMENT_VALUETYPE), displaybind, bindable]
    BSTR valueType();

    [propput, id(DISPID_IHTMLPARAMELEMENT2_IE8_VALUETYPE)]
    void ie8_valueType(BSTR v);

    [propget, id(DISPID_IHTMLPARAMELEMENT2_IE8_VALUETYPE)]
    BSTR ie8_valueType();
}

/*****************************************************************************
 *    IHTMLFrameBase interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f311-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLFrameBase : IDispatch
{
    [propput, id(DISPID_IHTMLFRAMEBASE_SRC)]
    HRESULT src([in] BSTR v);

    [propget, id(DISPID_IHTMLFRAMEBASE_SRC)]
    HRESULT src([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLFRAMEBASE_NAME)]
    HRESULT name([in] BSTR v);

    [propget, id(DISPID_IHTMLFRAMEBASE_NAME)]
    HRESULT name([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLFRAMEBASE_BORDER)]
    HRESULT border([in] VARIANT v);

    [propget, id(DISPID_IHTMLFRAMEBASE_BORDER)]
    HRESULT border([out, retval] VARIANT *p);

    [propput, id(DISPID_IHTMLFRAMEBASE_FRAMEBORDER)]
    HRESULT frameBorder([in] BSTR v);

    [propget, id(DISPID_IHTMLFRAMEBASE_FRAMEBORDER)]
    HRESULT frameBorder([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLFRAMEBASE_FRAMESPACING)]
    HRESULT frameSpacing([in] VARIANT v);

    [propget, id(DISPID_IHTMLFRAMEBASE_FRAMESPACING)]
    HRESULT frameSpacing([out, retval] VARIANT *p);

    [propput, id(DISPID_IHTMLFRAMEBASE_MARGINWIDTH)]
    HRESULT marginWidth([in] VARIANT v);

    [propget, id(DISPID_IHTMLFRAMEBASE_MARGINWIDTH)]
    HRESULT marginWidth([out, retval] VARIANT *p);

    [propput, id(DISPID_IHTMLFRAMEBASE_MARGINHEIGHT)]
    HRESULT marginHeight([in] VARIANT v);

    [propget, id(DISPID_IHTMLFRAMEBASE_MARGINHEIGHT)]
    HRESULT marginHeight([out, retval] VARIANT *p);

    [propput, id(DISPID_IHTMLFRAMEBASE_NORESIZE)]
    HRESULT noResize([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLFRAMEBASE_NORESIZE)]
    HRESULT noResize([out, retval] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLFRAMEBASE_SCROLLING)]
    HRESULT scrolling([in] BSTR v);

    [propget, id(DISPID_IHTMLFRAMEBASE_SCROLLING)]
    HRESULT scrolling([out, retval] BSTR *p);
}

#define WINE_IHTMLFRAMEBASE_DISPINTERFACE_DECL          \
    [propput, id(DISPID_IHTMLFRAMEBASE_SRC)]            \
    void src(BSTR v);                                   \
                                                        \
    [propget, id(DISPID_IHTMLFRAMEBASE_SRC)]            \
    BSTR src();                                         \
                                                        \
    [propput, id(DISPID_IHTMLFRAMEBASE_NAME)]           \
    void name(BSTR v);                                  \
                                                        \
    [propget, id(DISPID_IHTMLFRAMEBASE_NAME)]           \
    BSTR name();                                        \
                                                        \
    [propput, id(DISPID_IHTMLFRAMEBASE_BORDER)]         \
    void border(VARIANT v);                             \
                                                        \
    [propget, id(DISPID_IHTMLFRAMEBASE_BORDER)]         \
    VARIANT border();                                   \
                                                        \
    [propput, id(DISPID_IHTMLFRAMEBASE_FRAMEBORDER)]    \
    void frameBorder(BSTR v);                           \
                                                        \
    [propget, id(DISPID_IHTMLFRAMEBASE_FRAMEBORDER)]    \
    BSTR frameBorder();                                 \
                                                        \
    [propput, id(DISPID_IHTMLFRAMEBASE_FRAMESPACING)]   \
    void frameSpacing(VARIANT v);                       \
                                                        \
    [propget, id(DISPID_IHTMLFRAMEBASE_FRAMESPACING)]   \
    VARIANT frameSpacing();                             \
                                                        \
    [propput, id(DISPID_IHTMLFRAMEBASE_MARGINWIDTH)]    \
    void marginWidth(VARIANT v);                        \
                                                        \
    [propget, id(DISPID_IHTMLFRAMEBASE_MARGINWIDTH)]    \
    VARIANT marginWidth();                              \
                                                        \
    [propput, id(DISPID_IHTMLFRAMEBASE_MARGINHEIGHT)]   \
    void marginHeight(VARIANT v);                       \
                                                        \
    [propget, id(DISPID_IHTMLFRAMEBASE_MARGINHEIGHT)]   \
    VARIANT marginHeight();                             \
                                                        \
    [propput, id(DISPID_IHTMLFRAMEBASE_NORESIZE)]       \
    void noResize(VARIANT_BOOL v);                      \
                                                        \
    [propget, id(DISPID_IHTMLFRAMEBASE_NORESIZE)]       \
    VARIANT_BOOL noResize();                            \
                                                        \
    [propput, id(DISPID_IHTMLFRAMEBASE_SCROLLING)]      \
    void scrolling(BSTR v);                             \
                                                        \
    [propget, id(DISPID_IHTMLFRAMEBASE_SCROLLING)]      \
    BSTR scrolling()

/*****************************************************************************
 *    IHTMLFrameBase2 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f6db-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLFrameBase2 : IDispatch
{
    [propget, id(DISPID_IHTMLFRAMEBASE2_CONTENTWINDOW)]
    HRESULT contentWindow([retval, out] IHTMLWindow2 **p);

    [propput, id(DISPID_IHTMLFRAMEBASE2_ONLOAD), displaybind, bindable]
    HRESULT onload([in] VARIANT v);

    [propget, id(DISPID_IHTMLFRAMEBASE2_ONLOAD), displaybind, bindable]
    HRESULT onload([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLFRAMEBASE2_ONREADYSTATECHANGE), displaybind, bindable]
    HRESULT onreadystatechange([in] VARIANT v);

    [propget, id(DISPID_IHTMLFRAMEBASE2_ONREADYSTATECHANGE), displaybind, bindable]
    HRESULT onreadystatechange([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLFRAMEBASE2_READYSTATE)]
    HRESULT readyState([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLFRAMEBASE2_ALLOWTRANSPARENCY)]
    HRESULT allowTransparency([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLFRAMEBASE2_ALLOWTRANSPARENCY)]
    HRESULT allowTransparency([retval, out] VARIANT_BOOL *p);
}

#define WINE_IHTMLFRAMEBASE2_DISPINTERFACE_DECL                         \
    [propget, id(DISPID_IHTMLFRAMEBASE2_CONTENTWINDOW)]                 \
    IHTMLWindow2 *contentWindow();                                      \
                                                                        \
    [propput, id(DISPID_IHTMLFRAMEBASE2_ONLOAD), displaybind, bindable] \
    void onload(VARIANT v);                                             \
                                                                        \
    [propget, id(DISPID_IHTMLFRAMEBASE2_ONLOAD), displaybind, bindable] \
    VARIANT onload();                                                   \
                                                                        \
    [propput, id(DISPID_IHTMLFRAMEBASE2_ALLOWTRANSPARENCY)]             \
    void allowTransparency(VARIANT_BOOL v);                             \
                                                                        \
    [propget, id(DISPID_IHTMLFRAMEBASE2_ALLOWTRANSPARENCY)]             \
    VARIANT_BOOL allowTransparency()

#define WINE_IHTMLFRAMEBASE3_DISPINTERFACE_DECL                           \
    [propput, id(DISPID_IHTMLFRAMEBASE3_LONGDESC), displaybind, bindable] \
    void longDesc(BSTR v);                                                \
                                                                          \
    [propget, id(DISPID_IHTMLFRAMEBASE3_LONGDESC), displaybind, bindable] \
    BSTR longDesc()


#define WINE_HTMLFRAMEBASE_DISPINTERFACE_DECL \
    WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;  \
    WINE_IHTMLFRAMEBASE_DISPINTERFACE_DECL;   \
    WINE_IHTMLFRAMEBASE2_DISPINTERFACE_DECL;  \
    WINE_IHTMLFRAMEBASE3_DISPINTERFACE_DECL

/*****************************************************************************
 *    IHTMLFrameElement3 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3051042d-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLFrameElement3 : IDispatch
{
    [propget, id(DISPID_IHTMLFRAMEELEMENT3_CONTENTDOCUMENT)]
    HRESULT contentDocument([out, retval] IDispatch **p);

    [propput, id(DISPID_IHTMLFRAMEELEMENT3_IE8_SRC)]
    HRESULT src([in] BSTR v);

    [propget, id(DISPID_IHTMLFRAMEELEMENT3_IE8_SRC)]
    HRESULT src([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLFRAMEELEMENT3_IE8_LONGDESC)]
    HRESULT longDesc([in] BSTR v);

    [propget, id(DISPID_IHTMLFRAMEELEMENT3_IE8_LONGDESC)]
    HRESULT longDesc([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLFRAMEELEMENT3_IE8_FRAMEBORDER)]
    HRESULT frameBorder([in] BSTR v);

    [propget, id(DISPID_IHTMLFRAMEELEMENT3_IE8_FRAMEBORDER)]
    HRESULT frameBorder([out, retval] BSTR * p);
}

/*****************************************************************************
 *    DispHTMLFrameElement dispinterface
 */
[
    hidden,
    uuid(3050f513-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLFrameElement
{
properties:
methods:
    WINE_HTMLFRAMEBASE_DISPINTERFACE_DECL;

    [propput, id(DISPID_IHTMLFRAMEELEMENT_BORDERCOLOR)]
    void borderColor(VARIANT v);

    [propget, id(DISPID_IHTMLFRAMEELEMENT_BORDERCOLOR)]
    VARIANT borderColor();

    [propput, id(DISPID_IHTMLFRAMEELEMENT2_HEIGHT)]
    void height(VARIANT v);

    [propget, id(DISPID_IHTMLFRAMEELEMENT2_HEIGHT)]
    VARIANT height();

    [propput, id(DISPID_IHTMLFRAMEELEMENT2_WIDTH)]
    void width(VARIANT v);

    [propget, id(DISPID_IHTMLFRAMEELEMENT2_WIDTH)]
    VARIANT width();

    [propget, id(DISPID_IHTMLFRAMEELEMENT3_CONTENTDOCUMENT)]
    IDispatch *contentDocument();

    [propput, id(DISPID_IHTMLFRAMEELEMENT3_IE8_SRC)]
    void ie8_src(BSTR v);

    [propget, id(DISPID_IHTMLFRAMEELEMENT3_IE8_SRC)]
    BSTR ie8_src();

    [propput, id(DISPID_IHTMLFRAMEELEMENT3_IE8_LONGDESC)]
    void ie8_longDesc(BSTR v);

    [propget, id(DISPID_IHTMLFRAMEELEMENT3_IE8_LONGDESC)]
    BSTR ie8_longDesc();

    [propput, id(DISPID_IHTMLFRAMEELEMENT3_IE8_FRAMEBORDER)]
    void ie8_frameBorder(BSTR v);

    [propget, id(DISPID_IHTMLFRAMEELEMENT3_IE8_FRAMEBORDER)]
    BSTR ie8_frameBorder();
}

/*****************************************************************************
 *    IHTMLIFrameElement interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f315-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLIFrameElement : IDispatch
{
    [propput, id(DISPID_IHTMLIFRAMEELEMENT_VSPACE)]
    HRESULT vspace([in] LONG v);

    [propget, id(DISPID_IHTMLIFRAMEELEMENT_VSPACE)]
    HRESULT vspace([retval, out] LONG *p);

    [propput, id(DISPID_IHTMLIFRAMEELEMENT_HSPACE)]
    HRESULT hspace([in] LONG v);

    [propget, id(DISPID_IHTMLIFRAMEELEMENT_HSPACE)]
    HRESULT hspace([retval, out] LONG *p);

    [propput, id(DISPID_IHTMLIFRAMEELEMENT_ALIGN), displaybind, bindable]
    HRESULT align([in] BSTR v);

    [propget, id(DISPID_IHTMLIFRAMEELEMENT_ALIGN), displaybind, bindable]
    HRESULT align([retval, out] BSTR *p);
}

/*****************************************************************************
 *    DispHTMLIFrame dispinterface
 */
[
    hidden,
    uuid(3050f51b-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLIFrame
{
properties:
methods:
    WINE_HTMLFRAMEBASE_DISPINTERFACE_DECL;

    [propput, id(DISPID_IHTMLIFRAMEELEMENT_VSPACE)]
    void vspace(LONG v);

    [propget, id(DISPID_IHTMLIFRAMEELEMENT_VSPACE)]
    LONG vspace();

    [propput, id(DISPID_IHTMLIFRAMEELEMENT_HSPACE)]
    void hspace(LONG v);

    [propget, id(DISPID_IHTMLIFRAMEELEMENT_HSPACE)]
    LONG hspace();

    [propput, id(DISPID_IHTMLIFRAMEELEMENT_ALIGN), displaybind, bindable]
    void align(BSTR v);

    [propget, id(DISPID_IHTMLIFRAMEELEMENT_ALIGN), displaybind, bindable]
    BSTR align();

    [propput, id(DISPID_IHTMLIFRAMEELEMENT2_HEIGHT)]
    void height(VARIANT v);

    [propget, id(DISPID_IHTMLIFRAMEELEMENT2_HEIGHT)]
    VARIANT height();

    [propput, id(DISPID_IHTMLIFRAMEELEMENT2_WIDTH)]
    void width(VARIANT v);

    [propget, id(DISPID_IHTMLIFRAMEELEMENT2_WIDTH)]
    VARIANT width();
}

/*****************************************************************************
 *    IHTMLStyleElement interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f375-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLStyleElement : IDispatch
{
    [propput, id(DISPID_IHTMLSTYLEELEMENT_TYPE), displaybind, bindable]
    HRESULT type([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLEELEMENT_TYPE), displaybind, bindable]
    HRESULT type([retval, out] BSTR *p);

    [propget, id(DISPID_IHTMLSTYLEELEMENT_READYSTATE)]
    HRESULT readyState([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLSTYLEELEMENT_ONREADYSTATECHANGE), displaybind, bindable]
    HRESULT onreadystatechange([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLEELEMENT_ONREADYSTATECHANGE), displaybind, bindable]
    HRESULT onreadystatechange([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLEELEMENT_ONLOAD), displaybind, bindable]
    HRESULT onload([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLEELEMENT_ONLOAD), displaybind, bindable]
    HRESULT onload([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLSTYLEELEMENT_ONERROR), displaybind, bindable]
    HRESULT onerror([in] VARIANT v);

    [propget, id(DISPID_IHTMLSTYLEELEMENT_ONERROR), displaybind, bindable]
    HRESULT onerror([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLSTYLEELEMENT_STYLESHEET)]
    HRESULT styleSheet([retval, out] IHTMLStyleSheet **p);

    [propput, id(DISPID_IHTMLSTYLEELEMENT_DISABLED), displaybind, bindable]
    HRESULT disabled([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLSTYLEELEMENT_DISABLED), displaybind, bindable]
    HRESULT disabled([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLSTYLEELEMENT_MEDIA), displaybind, bindable]
    HRESULT media([in] BSTR v);

    [propget, id(DISPID_IHTMLSTYLEELEMENT_MEDIA), displaybind, bindable]
    HRESULT media([retval, out] BSTR *p);
}

/*****************************************************************************
 *    DispHTMLStyleElement dispinterface
 */
[
    hidden,
    uuid(3050f511-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLStyleElement
{
properties:
methods:
    WINE_HTMLELEMENT_DISPINTERFACE_DECL;

    [propput, id(DISPID_IHTMLSTYLEELEMENT_TYPE), displaybind, bindable]
    void type(BSTR v);

    [propget, id(DISPID_IHTMLSTYLEELEMENT_TYPE), displaybind, bindable]
    BSTR type();

    [propput, id(DISPID_IHTMLSTYLEELEMENT_ONLOAD), displaybind, bindable]
    void onload(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLEELEMENT_ONLOAD), displaybind, bindable]
    VARIANT onload();

    [propput, id(DISPID_IHTMLSTYLEELEMENT_ONERROR), displaybind, bindable]
    void onerror(VARIANT v);

    [propget, id(DISPID_IHTMLSTYLEELEMENT_ONERROR), displaybind, bindable]
    VARIANT onerror();

    [propget, id(DISPID_IHTMLSTYLEELEMENT_STYLESHEET)]
    IHTMLStyleSheet *styleSheet();

    [propput, id(DISPID_IHTMLSTYLEELEMENT_MEDIA), displaybind, bindable]
    void media(BSTR v);

    [propget, id(DISPID_IHTMLSTYLEELEMENT_MEDIA), displaybind, bindable]
    BSTR media();
}

/*****************************************************************************
 *    IMarkupContainer interface
 */
[
    object,
    pointer_default(unique),
    uuid(3050f5f9-98b5-11cf-bb82-00aa00bdce0B)
]
interface IMarkupContainer : IUnknown
{
    HRESULT OwningDoc([out] IHTMLDocument2 **ppDoc);
}

/*****************************************************************************
 *    IMarkupPointer interface
 */
[
    object,
    pointer_default(unique),
    uuid(3050f49f-98b5-11cf-bb82-00aa00bdce0b)
]
interface IMarkupPointer : IUnknown
{
    HRESULT OwningDoc([out] IHTMLDocument2 **ppDoc);

    HRESULT Gravity([out] POINTER_GRAVITY *pGravity);

    HRESULT SetGravity([in] POINTER_GRAVITY Gravity);

    HRESULT Cling([out] BOOL *pfCling);

    HRESULT SetCling([in] BOOL fCLing);

    HRESULT UnPosition();

    HRESULT IsPositioned([out] BOOL *pfPositioned);

    HRESULT GetContainer([out] IMarkupContainer **ppContainer);

    HRESULT MoveAdjacentToElement(
        [in] IHTMLElement *pElement,
        [in] ELEMENT_ADJACENCY eAdj);

    HRESULT MoveToPointer([in] IMarkupPointer *pPointer);

    HRESULT MoveToContainer(
        [in] IMarkupContainer *pContainer,
        [in] BOOL fAtStart);

    HRESULT Left(
        [in] BOOL fMove,
        [out] MARKUP_CONTEXT_TYPE *pContext,
        [out] IHTMLElement **ppElement,
        [in, out] LONG *pcch,
        [out, size_is(*pcch)] OLECHAR *pchText);

    HRESULT Right(
        [in] BOOL fMove,
        [out] MARKUP_CONTEXT_TYPE *pContext,
        [out] IHTMLElement **ppElement,
        [in, out] LONG *pcch,
        [out, size_is(*pcch)] OLECHAR *pchText);

    HRESULT CurrentScope([out] IHTMLElement **ppElemCurrent);

    HRESULT IsLeftOf(
        [in] IMarkupPointer *pPointerThat,
        [out] BOOL *pfResult);

    HRESULT IsLeftOfOrEqualTo(
        [in] IMarkupPointer *pPointerThat,
        [out] BOOL *pfResult);

    HRESULT IsRightOf(
        [in] IMarkupPointer *pPointerThat,
        [out] BOOL *pfResult);

    HRESULT IsRightOfOrEqualTo(
        [in] IMarkupPointer *pPointerThat,
        [out] BOOL *pfResult);

    HRESULT IsEqualTo(
        [in] IMarkupPointer *pPointerThat,
        [out] BOOL *pfAreEqual);

    HRESULT MoveUnit([in] MOVEUNIT_ACTION muAction);

    HRESULT FindText(
        [in] OLECHAR *pchFindText,
        [in] DWORD dwFlags,
        [in] IMarkupPointer *pIEndMatch,
        [in] IMarkupPointer *pIEndSearch);
}

/*****************************************************************************
 *    ISegment interface
 */
[
    object,
    pointer_default(unique),
    uuid(3050f683-98b5-11cf-bb82-00aa00bdce0b)
]
interface ISegment : IUnknown
{
    HRESULT GetPointers(
        [in] IMarkupPointer *pIStart,
        [in] IMarkupPointer *pIEnd);
}

/*****************************************************************************
 *    IElementSegment interface
 */
[
    object,
    pointer_default(unique),
    uuid(3050f68f-98b5-11cf-bb82-00aa00bdce0b)
]
interface IElementSegment : ISegment
{
    HRESULT GetElement([out] IHTMLElement **ppIElement);

    HRESULT SetPrimary([in] BOOL fPrimary);

    HRESULT IsPrimary([out] BOOL *pfPrimary);
}

/*****************************************************************************
 *    ISelectionServicesListener interface
 */
[
    object,
    pointer_default(unique),
    uuid(3050f699-98b5-11cf-bb82-00aa00bdce0b)
]
interface ISelectionServicesListener : IUnknown
{
    HRESULT BeginSelectionUndo();

    HRESULT EndSelectionUndo();

    HRESULT OnSelectedElementExit(
        [in] IMarkupPointer *pIElementStart,
        [in] IMarkupPointer *pIElementEnd,
        [in] IMarkupPointer *pIElementContentStart,
        [in] IMarkupPointer *pIElementContentEnd);

    HRESULT OnChangeType(
        [in] SELECTION_TYPE eType,
        [in] ISelectionServicesListener *pIListener);

    HRESULT GetTypeDetail([out] BSTR *pTypeDetail);
}

/*****************************************************************************
 *    ISelectionServices interface
 */
[
    object,
    pointer_default(unique),
    uuid(3050f684-98b5-11cf-bb82-00aa00bdce0b)
]
interface ISelectionServices : IUnknown
{
    HRESULT SetSelectionType(
        [in] SELECTION_TYPE eType,
        [in] ISelectionServicesListener *pIListener);

    HRESULT GetMarkupContainer([out] IMarkupContainer **ppIContainer);

    HRESULT AddSegment(
        [in] IMarkupPointer *pIStart,
        [in] IMarkupPointer *pIEnd,
        [out] ISegment **ppISegmentAdded);

    HRESULT AddElementSegment(
        [in] IHTMLElement *pIElement,
        [out] IElementSegment **ppISegmentAdded);

    HRESULT RemoveSegment([in] ISegment *pISegment);

    HRESULT GetSelectionServicesListener([out] ISelectionServicesListener **ppISelectionServicesListener);
}

/*****************************************************************************
 *    IHTMLEditDesigner interface
 */
[
    object,
    pointer_default(unique),
    uuid(3050f662-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLEditDesigner : IUnknown
{
    HRESULT PreHandleEvent(
        [in] DISPID inEvtDispId,
        [in] IHTMLEventObj *pIEventObj);

    HRESULT PostHandleEvent(
        [in] DISPID inEvtDispId,
        [in] IHTMLEventObj *pIEventObj);

    HRESULT TranslateAccelerator(
        [in] DISPID inEvtDispId,
        [in] IHTMLEventObj *pIEventObj);

    HRESULT PostEditorEventNotify(
        [in] DISPID inEvtDispId,
        [in] IHTMLEventObj *pIEventObj);
}

/*****************************************************************************
 *    IHTMLEditServices interface
 */
[
    object,
    pointer_default(unique),
    uuid(3050f663-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLEditServices : IUnknown
{
    HRESULT AddDesigner([in] IHTMLEditDesigner *pIDesigner);

    HRESULT RemoveDesigner([in] IHTMLEditDesigner *pIDesigner);

    HRESULT GetSelectionServices(
        [in] IMarkupContainer *pIContainer,
        [out] ISelectionServices **ppSelSvc);

    HRESULT MoveToSelectionAnchor([in] IMarkupPointer *pIStartAnchor);

    HRESULT MoveToSelectionEnd([in] IMarkupPointer *pIEndAnchor);

    HRESULT SelectRange(
        [in] IMarkupPointer* pStart,
        [in] IMarkupPointer* pEnd,
        [in] SELECTION_TYPE eType);
}

/*****************************************************************************
 *    IElementBehaviorSite interface
 */
[
    odl,
    uuid(3050F427-98B5-11CF-BB82-00AA00BDCE0B)
]
interface IElementBehaviorSite : IUnknown {
    HRESULT GetElement([out, retval] IHTMLElement **ppElement);
    HRESULT RegisterNotification([in] long lEvent);
}

/*****************************************************************************
 *    IElementBehavior interface
 */
[
    odl,
    uuid(3050F425-98B5-11CF-BB82-00AA00BDCE0B)
]
interface IElementBehavior : IUnknown {
    HRESULT Init([in] IElementBehaviorSite *pBehaviorSite);
    HRESULT Notify([in] long lEvent,  [in, out] VARIANT *pVar);
    HRESULT Detach();
}

/*****************************************************************************
 *    IElementBehaviorFactory interface
 */
[
    odl,
    uuid(3050f429-98b5-11cf-bb82-00aa00bdce0b)
]
interface IElementBehaviorFactory : IUnknown
{
    HRESULT FindBehavior(
        [in] BSTR bstrBehavior,
        [in] BSTR bstrBehaviorUrl,
        [in] IElementBehaviorSite *pSite,
        [out] IElementBehavior **ppBehavior);
}

} /* library MSHTML */

interface IOleCommandTarget;

/*****************************************************************************
 *    IHTMLPrivateWindow interface
 */
[
    object,
    uuid(3050f6dc-98b5-11cf-bb82-00aa00bdce0b),
    local
]
interface IHTMLPrivateWindow : IUnknown
{
    HRESULT SuperNavigate(BSTR url, BSTR arg2, BSTR arg3, BSTR arg4, VARIANT *post_data, VARIANT *headers, ULONG flags);
    HRESULT GetPendingUrl(BSTR *url);
    HRESULT SetPICSTarget(IOleCommandTarget *cmdtrg);
    HRESULT PICSComplete(int arg);
    HRESULT FindWindowByName(LPCWSTR name, IHTMLWindow2 **ret);
    HRESULT GetAddressBarUrl(BSTR *url);
}
