/*
 * 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";
import "dispex.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");

typedef enum _DomConstructor {
    DomConstructorObject                      = 0,
    DomConstructorAttr                        = 1,
    DomConstructorBehaviorUrnsCollection      = 2,
    DomConstructorBookmarkCollection          = 3,
    DomConstructorCompatibleInfo              = 4,
    DomConstructorCompatibleInfoCollection    = 5,
    DomConstructorControlRangeCollection      = 6,
    DomConstructorCSSCurrentStyleDeclaration  = 7,
    DomConstructorCSSRuleList                 = 8,
    DomConstructorCSSRuleStyleDeclaration     = 9,
    DomConstructorCSSStyleDeclaration         = 10,
    DomConstructorCSSStyleRule                = 11,
    DomConstructorCSSStyleSheet               = 12,
    DomConstructorDataTransfer                = 13,
    DomConstructorDOMImplementation           = 14,
    DomConstructorElement                     = 15,
    DomConstructorEvent                       = 16,
    DomConstructorHistory                     = 17,
    DomConstructorHTCElementBehaviorDefaults  = 18,
    DomConstructorHTMLAnchorElement           = 19,
    DomConstructorHTMLAreaElement             = 20,
    DomConstructorHTMLAreasCollection         = 21,
    DomConstructorHTMLBaseElement             = 22,
    DomConstructorHTMLBaseFontElement         = 23,
    DomConstructorHTMLBGSoundElement          = 24,
    DomConstructorHTMLBlockElement            = 25,
    DomConstructorHTMLBodyElement             = 26,
    DomConstructorHTMLBRElement               = 27,
    DomConstructorHTMLButtonElement           = 28,
    DomConstructorHTMLCollection              = 29,
    DomConstructorHTMLCommentElement          = 30,
    DomConstructorHTMLDDElement               = 31,
    DomConstructorHTMLDivElement              = 32,
    DomConstructorHTMLDocument                = 33,
    DomConstructorHTMLDListElement            = 34,
    DomConstructorHTMLDTElement               = 35,
    DomConstructorHTMLEmbedElement            = 36,
    DomConstructorHTMLFieldSetElement         = 37,
    DomConstructorHTMLFontElement             = 38,
    DomConstructorHTMLFormElement             = 39,
    DomConstructorHTMLFrameElement            = 40,
    DomConstructorHTMLFrameSetElement         = 41,
    DomConstructorHTMLGenericElement          = 42,
    DomConstructorHTMLHeadElement             = 43,
    DomConstructorHTMLHeadingElement          = 44,
    DomConstructorHTMLHRElement               = 45,
    DomConstructorHTMLHtmlElement             = 46,
    DomConstructorHTMLIFrameElement           = 47,
    DomConstructorHTMLImageElement            = 48,
    DomConstructorHTMLInputElement            = 49,
    DomConstructorHTMLIsIndexElement          = 50,
    DomConstructorHTMLLabelElement            = 51,
    DomConstructorHTMLLegendElement           = 52,
    DomConstructorHTMLLIElement               = 53,
    DomConstructorHTMLLinkElement             = 54,
    DomConstructorHTMLMapElement              = 55,
    DomConstructorHTMLMarqueeElement          = 56,
    DomConstructorHTMLMetaElement             = 57,
    DomConstructorHTMLModelessDialog          = 58,
    DomConstructorHTMLNamespaceInfo           = 59,
    DomConstructorHTMLNamespaceInfoCollection = 60,
    DomConstructorHTMLNextIdElement           = 61,
    DomConstructorHTMLNoShowElement           = 62,
    DomConstructorHTMLObjectElement           = 63,
    DomConstructorHTMLOListElement            = 64,
    DomConstructorHTMLOptionElement           = 65,
    DomConstructorHTMLParagraphElement        = 66,
    DomConstructorHTMLParamElement            = 67,
    DomConstructorHTMLPhraseElement           = 68,
    DomConstructorHTMLPluginsCollection       = 69,
    DomConstructorHTMLPopup                   = 70,
    DomConstructorHTMLScriptElement           = 71,
    DomConstructorHTMLSelectElement           = 72,
    DomConstructorHTMLSpanElement             = 73,
    DomConstructorHTMLStyleElement            = 74,
    DomConstructorHTMLTableCaptionElement     = 75,
    DomConstructorHTMLTableCellElement        = 76,
    DomConstructorHTMLTableColElement         = 77,
    DomConstructorHTMLTableElement            = 78,
    DomConstructorHTMLTableRowElement         = 79,
    DomConstructorHTMLTableSectionElement     = 80,
    DomConstructorHTMLTextAreaElement         = 81,
    DomConstructorHTMLTextElement             = 82,
    DomConstructorHTMLTitleElement            = 83,
    DomConstructorHTMLUListElement            = 84,
    DomConstructorHTMLUnknownElement          = 85,
    DomConstructorImage                       = 86,
    DomConstructorLocation                    = 87,
    DomConstructorNamedNodeMap                = 88,
    DomConstructorNavigator                   = 89,
    DomConstructorNodeList                    = 90,
    DomConstructorOption                      = 91,
    DomConstructorScreen                      = 92,
    DomConstructorSelection                   = 93,
    DomConstructorStaticNodeList              = 94,
    DomConstructorStorage                     = 95,
    DomConstructorStyleSheetList              = 96,
    DomConstructorStyleSheetPage              = 97,
    DomConstructorStyleSheetPageList          = 98,
    DomConstructorText                        = 99,
    DomConstructorTextRange                   = 100,
    DomConstructorTextRangeCollection         = 101,
    DomConstructorTextRectangle               = 102,
    DomConstructorTextRectangleList           = 103,
    DomConstructorWindow                      = 104,
    DomConstructorXDomainRequest              = 105,
    DomConstructorXMLHttpRequest              = 106,
    DomConstructorMax                         = 107,
    DomConstructor_Max                        = 2147483647L
} DomConstructor;

[
    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;
interface IHTMLStorage;
interface IDOMEvent;

/*****************************************************************************
 *    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();
}

/*****************************************************************************
 *    IHTMLXMLHttpRequest interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3051040a-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLXMLHttpRequest : IDispatch
{
    [propget, id(DISPID_IHTMLXMLHTTPREQUEST_READYSTATE)]
    HRESULT readyState([out, retval] long *p);

    [propget, id(DISPID_IHTMLXMLHTTPREQUEST_RESPONSEBODY)]
    HRESULT responseBody([out, retval] VARIANT *p);

    [propget, id(DISPID_IHTMLXMLHTTPREQUEST_RESPONSETEXT)]
    HRESULT responseText([out, retval] BSTR *p);

    [propget, id(DISPID_IHTMLXMLHTTPREQUEST_RESPONSEXML)]
    HRESULT responseXML([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLXMLHTTPREQUEST_STATUS)]
    HRESULT status([out, retval] long *p);

    [propget, id(DISPID_IHTMLXMLHTTPREQUEST_STATUSTEXT)]
    HRESULT statusText([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLXMLHTTPREQUEST_ONREADYSTATECHANGE), displaybind, bindable]
    HRESULT onreadystatechange([in] VARIANT v);

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

    [id(DISPID_IHTMLXMLHTTPREQUEST_ABORT)] HRESULT abort();

    [id(DISPID_IHTMLXMLHTTPREQUEST_OPEN)]
    HRESULT open(
            [in] BSTR bstrMethod,
            [in] BSTR bstrUrl,
            [in] VARIANT varAsync,
            [in, optional] VARIANT varUser,
            [in, optional] VARIANT varPassword);

    [id(DISPID_IHTMLXMLHTTPREQUEST_SEND)]
    HRESULT send([in, optional] VARIANT varBody);

    [id(DISPID_IHTMLXMLHTTPREQUEST_GETALLRESPONSEHEADERS)]
    HRESULT getAllResponseHeaders([out, retval] BSTR *p);

    [id(DISPID_IHTMLXMLHTTPREQUEST_GETRESPONSEHEADER)]
    HRESULT getResponseHeader(
            [in] BSTR bstrHeader,
            [out, retval] BSTR *p);

    [id(DISPID_IHTMLXMLHTTPREQUEST_SETREQUESTHEADER)]
    HRESULT setRequestHeader(
            [in] BSTR bstrHeader,
            [in] BSTR bstrValue);
}

/*****************************************************************************
 *    IHTMLXMLHttpRequest2 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(30510482-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLXMLHttpRequest2 : IDispatch
{
    [propput, id(DISPID_IHTMLXMLHTTPREQUEST2_TIMEOUT)]
    HRESULT timeout([in] long v);

    [propget, id(DISPID_IHTMLXMLHTTPREQUEST2_TIMEOUT)]
    HRESULT timeout([out, retval] long *p);

    [propput, id(DISPID_IHTMLXMLHTTPREQUEST2_ONTIMEOUT), displaybind, bindable]
    HRESULT ontimeout([in] VARIANT v);

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

/*****************************************************************************
 *    IHTMLXMLHttpRequestFactory interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3051040c-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLXMLHttpRequestFactory : IDispatch
{
    [id(DISPID_IHTMLXMLHTTPREQUESTFACTORY_CREATE)]
    HRESULT create([out, retval] IHTMLXMLHttpRequest **p);
}

/*****************************************************************************
 *    DispHTMLXMLHttpRequest dispinterface
 */
[
    hidden,
    uuid(3050f596-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLXMLHttpRequest
{
properties:
methods:
    [propget, id(DISPID_IHTMLXMLHTTPREQUEST_READYSTATE)]
    long readyState();

    [propget, id(DISPID_IHTMLXMLHTTPREQUEST_RESPONSEBODY)]
    VARIANT responseBody();

    [propget, id(DISPID_IHTMLXMLHTTPREQUEST_RESPONSETEXT)]
    BSTR responseText();

    [propget, id(DISPID_IHTMLXMLHTTPREQUEST_RESPONSEXML)]
    IDispatch *responseXML();

    [propget, id(DISPID_IHTMLXMLHTTPREQUEST_STATUS)]
    long status();

    [propget, id(DISPID_IHTMLXMLHTTPREQUEST_STATUSTEXT)]
    BSTR statusText();

    [propput, id(DISPID_IHTMLXMLHTTPREQUEST_ONREADYSTATECHANGE), displaybind, bindable]
    void onreadystatechange(VARIANT v);

    [propget, id(DISPID_IHTMLXMLHTTPREQUEST_ONREADYSTATECHANGE), displaybind, bindable]
    VARIANT onreadystatechange();

    [id(DISPID_IHTMLXMLHTTPREQUEST_ABORT)]
    void abort();

    [id(DISPID_IHTMLXMLHTTPREQUEST_OPEN)]
    void open(
            [in] BSTR bstrMethod,
            [in] BSTR bstrUrl,
            [in] VARIANT varAsync,
            [in, optional] VARIANT varUser,
            [in, optional] VARIANT varPassword);

    [id(DISPID_IHTMLXMLHTTPREQUEST_SEND)]
    void send([in, optional] VARIANT varBody);

    [id(DISPID_IHTMLXMLHTTPREQUEST_GETALLRESPONSEHEADERS)]
    BSTR getAllResponseHeaders();

    [id(DISPID_IHTMLXMLHTTPREQUEST_GETRESPONSEHEADER)]
    BSTR getResponseHeader([in] BSTR bstrHeader);

    [id(DISPID_IHTMLXMLHTTPREQUEST_SETREQUESTHEADER)]
    void setRequestHeader(
            [in] BSTR bstrHeader,
            [in] BSTR bstrValue);

    [propput, id(DISPID_IHTMLXMLHTTPREQUEST2_TIMEOUT)]
    void timeout(long v);

    [propget, id(DISPID_IHTMLXMLHTTPREQUEST2_TIMEOUT)]
    long timeout();

    [propput, id(DISPID_IHTMLXMLHTTPREQUEST2_ONTIMEOUT), displaybind, bindable]
    void ontimeout(VARIANT v);

    [propget, id(DISPID_IHTMLXMLHTTPREQUEST2_ONTIMEOUT), displaybind, bindable]
    VARIANT ontimeout();

    WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL;


    [id(DISPID_IEVENTTARGET_ADDEVENTLISTENER)]
    void addEventListener(
            [in] BSTR type,
            [in] IDispatch *listener,
            [in] VARIANT_BOOL useCapture);

    [id(DISPID_IEVENTTARGET_REMOVEEVENTLISTENER)]
    void removeEventListener(
            [in] BSTR type,
            [in] IDispatch *listener,
            [in] VARIANT_BOOL useCapture);

    [id(DISPID_IEVENTTARGET_DISPATCHEVENT)]
    VARIANT_BOOL dispatchEvent([in] IDOMEvent *evt);
}

/*****************************************************************************
 *    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);
}

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

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

    [propput, id(DISPID_IHTMLMETAELEMENT_CONTENT), displaybind, bindable]
    HRESULT content([in] BSTR v);

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

    [propput, id(DISPID_IHTMLMETAELEMENT_NAME), displaybind, bindable]
    HRESULT name([in] BSTR v);

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

    [propput, id(DISPID_IHTMLMETAELEMENT_URL), displaybind, bindable]
    HRESULT url([in] BSTR v);

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

    [propput, id(DISPID_IHTMLMETAELEMENT_CHARSET), displaybind, bindable]
    HRESULT charset([in] BSTR v);

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

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

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

/*****************************************************************************
 *    IHTMLMetaElement3 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(30510495-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLMetaElement3 : IDispatch
{
    [propput, id(DISPID_IHTMLMETAELEMENT3_IE8_URL)]
    HRESULT url([in] BSTR v);

    [propget, id(DISPID_IHTMLMETAELEMENT3_IE8_URL)]
    HRESULT url([out, retval] 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();
}

/*****************************************************************************
 *    DispHTMLMetaElement dispinterface
 */
[
    hidden,
    uuid(3050f517-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLMetaElement
{
properties:
methods:
    WINE_HTMLELEMENT_DISPINTERFACE_DECL;

    [propput, id(DISPID_IHTMLMETAELEMENT_HTTPEQUIV), displaybind, bindable]
    void httpEquiv(BSTR v);

    [propget, id(DISPID_IHTMLMETAELEMENT_HTTPEQUIV), displaybind, bindable]
    BSTR httpEquiv();

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

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

    [propput, id(DISPID_IHTMLMETAELEMENT_NAME), displaybind, bindable]
    void name(BSTR v);

    [propget, id(DISPID_IHTMLMETAELEMENT_NAME), displaybind, bindable]
    BSTR name();

    [propput, id(DISPID_IHTMLMETAELEMENT_URL), displaybind, bindable]
    void url(BSTR v);

    [propget, id(DISPID_IHTMLMETAELEMENT_URL), displaybind, bindable]
    BSTR url();

    [propput, id(DISPID_IHTMLMETAELEMENT_CHARSET), displaybind, bindable]
    void charset(BSTR v);

    [propget, id(DISPID_IHTMLMETAELEMENT_CHARSET), displaybind, bindable]
    BSTR charset();

    [propput, id(DISPID_IHTMLMETAELEMENT2_SCHEME), displaybind, bindable]
    void scheme(BSTR v);

    [propget, id(DISPID_IHTMLMETAELEMENT2_SCHEME), displaybind, bindable]
    BSTR scheme();

    [propput, id(DISPID_IHTMLMETAELEMENT3_IE8_URL)]
    void ie8_url(BSTR v);

    [propget, id(DISPID_IHTMLMETAELEMENT3_IE8_URL)]
    BSTR ie8_url();
}

/*****************************************************************************
 *    DispHTMLUnknownElement dispinterface
 */
[
    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);
}

/*****************************************************************************
 *    DispHTMLHistory dispinterface
 */
[
    hidden,
    uuid(3050f549-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLHistory
{
properties:
methods:
    [propget, id(DISPID_IOMHISTORY_LENGTH)]
    short length();

    [id(DISPID_IOMHISTORY_BACK)]
    void back([optional, in] VARIANT *pvargdistance);

    [id(DISPID_IOMHISTORY_FORWARD)]
    void forward([optional, in] VARIANT *pvargdistance);

    [id(DISPID_IOMHISTORY_GO)]
    void go([optional, in] VARIANT *pvargdistance);

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

/*****************************************************************************
 *    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);
}

/*****************************************************************************
 *    IHTMLWindow6 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(30510453-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLWindow6 : IDispatch
{
    [propput, id(DISPID_IHTMLWINDOW6_XDOMAINREQUEST)]
    HRESULT XDomainRequest([in] VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW6_XDOMAINREQUEST)]
    HRESULT XDomainRequest([out, retval] VARIANT *p);

    [propget, id(DISPID_IHTMLWINDOW6_SESSIONSTORAGE)]
    HRESULT sessionStorage([out, retval] IHTMLStorage **p);

    [propget, id(DISPID_IHTMLWINDOW6_LOCALSTORAGE)]
    HRESULT localStorage([out, retval] IHTMLStorage **p);

    [propput, id(DISPID_IHTMLWINDOW6_ONHASHCHANGE), displaybind, bindable]
    HRESULT onhashchange([in] VARIANT v);

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

    [propget, id(DISPID_IHTMLWINDOW6_MAXCONNECTIONSPERSERVER)]
    HRESULT maxConnectionsPerServer([out, retval] long *p);

    [id(DISPID_IHTMLWINDOW6_POSTMESSAGE)]
    HRESULT postMessage(
            [in] BSTR msg,
            [in, optional] VARIANT targetOrigin);

    [id(DISPID_IHTMLWINDOW6_TOSTATICHTML)]
    HRESULT toStaticHTML(
            [in] BSTR bstrHTML,
            [out, retval] BSTR *pbstrStaticHTML);

    [propput, id(DISPID_IHTMLWINDOW6_ONMESSAGE), displaybind, bindable]
    HRESULT onmessage([in] VARIANT v);

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

    [id(DISPID_IHTMLWINDOW6_MSWRITEPROFILERMARK)]
    HRESULT msWriteProfilerMark([in] BSTR bstrProfilerMarkName);
}

/*****************************************************************************
 *    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();

    [propget, id(DISPID_IHTMLWINDOW6_SESSIONSTORAGE)]
    IHTMLStorage *sessionStorage();

    [propget, id(DISPID_IHTMLWINDOW6_LOCALSTORAGE)]
    IHTMLStorage *localStorage();

    [propput, id(DISPID_IHTMLWINDOW6_ONHASHCHANGE), displaybind, bindable]
    void onhashchange(VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW6_ONHASHCHANGE), displaybind, bindable]
    VARIANT onhashchange();

    [propget, id(DISPID_IHTMLWINDOW6_MAXCONNECTIONSPERSERVER)]
    long maxConnectionsPerServer();

    [id(DISPID_IHTMLWINDOW6_POSTMESSAGE)]
    void postMessage(
            [in] BSTR msg,
            [in, optional] VARIANT targetOrigin);

    [id(DISPID_IHTMLWINDOW6_TOSTATICHTML)]
    BSTR toStaticHTML([in] BSTR bstrHTML);

    [propput, id(DISPID_IHTMLWINDOW6_ONMESSAGE), displaybind, bindable]
    void onmessage(VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW6_ONMESSAGE), displaybind, bindable]
    VARIANT onmessage();

    [id(DISPID_IHTMLWINDOW6_MSWRITEPROFILERMARK)]
    void msWriteProfilerMark([in] BSTR bstrProfilerMarkName);

    WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL;
}

/*****************************************************************************
 *    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();

    [propget, id(DISPID_IHTMLWINDOW6_SESSIONSTORAGE)]
    IHTMLStorage *sessionStorage();

    [propget, id(DISPID_IHTMLWINDOW6_LOCALSTORAGE)]
    IHTMLStorage *localStorage();

    [propput, id(DISPID_IHTMLWINDOW6_ONHASHCHANGE), displaybind, bindable]
    void onhashchange(VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW6_ONHASHCHANGE), displaybind, bindable]
    VARIANT onhashchange();

    [propget, id(DISPID_IHTMLWINDOW6_MAXCONNECTIONSPERSERVER)]
    long maxConnectionsPerServer();

    [id(DISPID_IHTMLWINDOW6_POSTMESSAGE)]
    void postMessage(
            [in] BSTR msg,
            [in, optional] VARIANT targetOrigin);

    [id(DISPID_IHTMLWINDOW6_TOSTATICHTML)]
    BSTR toStaticHTML([in] BSTR bstrHTML);

    [propput, id(DISPID_IHTMLWINDOW6_ONMESSAGE), displaybind, bindable]
    void onmessage(VARIANT v);

    [propget, id(DISPID_IHTMLWINDOW6_ONMESSAGE), displaybind, bindable]
    VARIANT onmessage();

    [id(DISPID_IHTMLWINDOW6_MSWRITEPROFILERMARK)]
    void msWriteProfilerMark([in] BSTR bstrProfilerMarkName);

    WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL;
}

/*****************************************************************************
 *    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);
}

/*****************************************************************************
 *    IHTMLTableCell interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f23d-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLTableCell : IDispatch
{
    [propput, id(DISPID_IHTMLTABLECELL_ROWSPAN)]
    HRESULT rowSpan([in] long v);

    [propget, id(DISPID_IHTMLTABLECELL_ROWSPAN)]
    HRESULT rowSpan([retval, out] long *p);

    [propput, id(DISPID_IHTMLTABLECELL_COLSPAN)]
    HRESULT colSpan([in] long v);

    [propget, id(DISPID_IHTMLTABLECELL_COLSPAN)]
    HRESULT colSpan([retval, out] long *p);

    [propput, id(DISPID_IHTMLTABLECELL_ALIGN)]
    HRESULT align([in] BSTR v);

    [propget, id(DISPID_IHTMLTABLECELL_ALIGN)]
    HRESULT align([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLTABLECELL_VALIGN)]
    HRESULT vAlign([in] BSTR v);

    [propget, id(DISPID_IHTMLTABLECELL_VALIGN)]
    HRESULT vAlign([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLTABLECELL_BGCOLOR)]
    HRESULT bgColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLTABLECELL_BGCOLOR)]
    HRESULT bgColor([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLTABLECELL_NOWRAP)]
    HRESULT noWrap([in] VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLTABLECELL_NOWRAP)]
    HRESULT noWrap([retval, out] VARIANT_BOOL *p);

    [propput, id(DISPID_IHTMLTABLECELL_BACKGROUND)]
    HRESULT background([in] BSTR v);

    [propget, id(DISPID_IHTMLTABLECELL_BACKGROUND)]
    HRESULT background([retval, out] BSTR *p);

    [propput, id(DISPID_IHTMLTABLECELL_BORDERCOLOR)]
    HRESULT borderColor([in] VARIANT v);

    [propget, id(DISPID_IHTMLTABLECELL_BORDERCOLOR)]
    HRESULT borderColor([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLTABLECELL_BORDERCOLORLIGHT)]
    HRESULT borderColorLight([in] VARIANT v);

    [propget, id(DISPID_IHTMLTABLECELL_BORDERCOLORLIGHT)]
    HRESULT borderColorLight([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLTABLECELL_BORDERCOLORDARK)]
    HRESULT borderColorDark([in] VARIANT v);

    [propget, id(DISPID_IHTMLTABLECELL_BORDERCOLORDARK)]
    HRESULT borderColorDark([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLTABLECELL_WIDTH)]
    HRESULT width([in] VARIANT v);

    [propget, id(DISPID_IHTMLTABLECELL_WIDTH)]
    HRESULT width([retval, out] VARIANT *p);

    [propput, id(DISPID_IHTMLTABLECELL_HEIGHT)]
    HRESULT height([in] VARIANT v);

    [propget, id(DISPID_IHTMLTABLECELL_HEIGHT)]
    HRESULT height([retval, out] VARIANT *p);

    [propget, id(DISPID_IHTMLTABLECELL_CELLINDEX)]
    HRESULT cellIndex([retval, out] long *p);
}

/*****************************************************************************
 *    DispHTMLTable dispinterface
 */
[
    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();
}

/*****************************************************************************
 *    DispHTMLTableCell dispinterface
 */
[
    hidden,
    uuid(3050f536-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface DispHTMLTableCell
{
properties:
methods:
    WINE_HTMLELEMENT_DISPINTERFACE_DECL;

    [propput, id(DISPID_IHTMLTABLECELL_ROWSPAN)]
    void rowSpan(long v);

    [propget, id(DISPID_IHTMLTABLECELL_ROWSPAN)]
    long rowSpan();

    [propput, id(DISPID_IHTMLTABLECELL_COLSPAN)]
    void colSpan(long v);

    [propget, id(DISPID_IHTMLTABLECELL_COLSPAN)]
    long colSpan();

    [propput, id(DISPID_IHTMLTABLECELL_ALIGN)]
    void align(BSTR v);

    [propget, id(DISPID_IHTMLTABLECELL_ALIGN)]
    BSTR align();

    [propput, id(DISPID_IHTMLTABLECELL_VALIGN)]
    void vAlign(BSTR v);

    [propget, id(DISPID_IHTMLTABLECELL_VALIGN)]
    BSTR vAlign();

    [propput, id(DISPID_IHTMLTABLECELL_BGCOLOR)]
    void bgColor(VARIANT v);

    [propget, id(DISPID_IHTMLTABLECELL_BGCOLOR)]
    VARIANT bgColor();

    [propput, id(DISPID_IHTMLTABLECELL_NOWRAP)]
    void noWrap(VARIANT_BOOL v);

    [propget, id(DISPID_IHTMLTABLECELL_NOWRAP)]
    VARIANT_BOOL noWrap();

    [propput, id(DISPID_IHTMLTABLECELL_BACKGROUND)]
    void background(BSTR v);

    [propget, id(DISPID_IHTMLTABLECELL_BACKGROUND)]
    BSTR background();

    [propput, id(DISPID_IHTMLTABLECELL_BORDERCOLOR)]
    void borderColor(VARIANT v);

    [propget, id(DISPID_IHTMLTABLECELL_BORDERCOLOR)]
    VARIANT borderColor();

    [propput, id(DISPID_IHTMLTABLECELL_BORDERCOLORLIGHT)]
    void borderColorLight(VARIANT v);

    [propget, id(DISPID_IHTMLTABLECELL_BORDERCOLORLIGHT)]
    VARIANT borderColorLight();

    [propput, id(DISPID_IHTMLTABLECELL_BORDERCOLORDARK)]
    void borderColorDark(VARIANT v);

    [propget, id(DISPID_IHTMLTABLECELL_BORDERCOLORDARK)]
    VARIANT borderColorDark();

    [propput, id(DISPID_IHTMLTABLECELL_WIDTH)]
    void width(VARIANT v);

    [propget, id(DISPID_IHTMLTABLECELL_WIDTH)]
    VARIANT width();

    [propput, id(DISPID_IHTMLTABLECELL_HEIGHT)]
    void height(VARIANT v);

    [propget, id(DISPID_IHTMLTABLECELL_HEIGHT)]
    VARIANT height();

    [propget, id(DISPID_IHTMLTABLECELL_CELLINDEX)]
    long cellIndex();

    [propput, id(DISPID_IHTMLTABLECELL2_ABBR), displaybind, bindable]
    void abbr(BSTR v);

    [propget, id(DISPID_IHTMLTABLECELL2_ABBR), displaybind, bindable]
    BSTR abbr();

    [propput, id(DISPID_IHTMLTABLECELL2_AXIS), displaybind, bindable]
    void axis(BSTR v);

    [propget, id(DISPID_IHTMLTABLECELL2_AXIS), displaybind, bindable]
    BSTR axis();

    [propput, id(DISPID_IHTMLTABLECELL2_CH), displaybind, bindable]
    void ch(BSTR v);

    [propget, id(DISPID_IHTMLTABLECELL2_CH), displaybind, bindable]
    BSTR ch();

    [propput, id(DISPID_IHTMLTABLECELL2_CHOFF), displaybind, bindable]
    void chOff(BSTR v);

    [propget, id(DISPID_IHTMLTABLECELL2_CHOFF), displaybind, bindable]
    BSTR chOff();

    [propput, id(DISPID_IHTMLTABLECELL2_HEADERS), displaybind, bindable]
    void headers(BSTR v);

    [propget, id(DISPID_IHTMLTABLECELL2_HEADERS), displaybind, bindable]
    BSTR headers();

    [propput, id(DISPID_IHTMLTABLECELL2_SCOPE), displaybind, bindable]
    void scope(BSTR v);

    [propget, id(DISPID_IHTMLTABLECELL2_SCOPE), displaybind, bindable]
    BSTR scope();

    [propput, id(DISPID_IHTMLTABLECELL3_IE9_CH), displaybind, bindable]
    void ie9_ch(BSTR v);

    [propget, id(DISPID_IHTMLTABLECELL3_IE9_CH), displaybind, bindable]
    BSTR ie9_ch();

    [propput, id(DISPID_IHTMLTABLECELL3_IE9_CHOFF), displaybind, bindable]
    void ie9_chOff(BSTR v);

    [propget, id(DISPID_IHTMLTABLECELL3_IE9_CHOFF), displaybind, bindable]
    BSTR ie9_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);
}

/*****************************************************************************
 *    IHTMLObjectElement2 interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3050f4cd-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLObjectElement2 : IDispatch
{
    [id(DISPID_IHTMLOBJECTELEMENT2_NAMEDRECORDSET)]
    HRESULT namedRecordset(
            [in] BSTR dataMember,
            [in, optional] VARIANT *hierarchy,
            [out, retval] IDispatch **ppRecordset);

    [propput, id(DISPID_IHTMLOBJECTELEMENT2_CLASSID), hidden]
    HRESULT classid([in] BSTR v);

    [propget, id(DISPID_IHTMLOBJECTELEMENT2_CLASSID), hidden]
    HRESULT classid([out, retval] BSTR *p);

    [propput, id(DISPID_IHTMLOBJECTELEMENT2_DATA), hidden]
    HRESULT data([in] BSTR v);

    [propget, id(DISPID_IHTMLOBJECTELEMENT2_DATA), hidden]
    HRESULT data([out, retval] BSTR *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();
}

/*****************************************************************************
 *    IHTMLStorage interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(30510474-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLStorage : IDispatch
{
    [propget, id(DISPID_IHTMLSTORAGE_LENGTH), hidden]
    HRESULT length([out, retval] long *p);

    [propget, id(DISPID_IHTMLSTORAGE_REMAININGSPACE), hidden]
    HRESULT remainingSpace([out, retval] long *p);

    [id(DISPID_IHTMLSTORAGE_KEY)]
    HRESULT key(
            [in] long lIndex,
            [out, retval] BSTR *);

    [id(DISPID_IHTMLSTORAGE_GETITEM)]
    HRESULT getItem(
            [in] BSTR bstrKey,
            [out, retval] VARIANT *);

    [id(DISPID_IHTMLSTORAGE_SETITEM)]
    HRESULT setItem(
            [in] BSTR bstrKey,
            [in] BSTR bstrValue);

    [id(DISPID_IHTMLSTORAGE_REMOVEITEM)]
    HRESULT removeItem([in] BSTR bstrKey);

    [id(DISPID_IHTMLSTORAGE_CLEAR)]
    HRESULT clear();
}

/*****************************************************************************
 *    IDOMEventTarget interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(305104b9-98b5-11cf-bb82-00aa00bdce0b)
]
interface IEventTarget : IDispatch
{
    [id(DISPID_IEVENTTARGET_ADDEVENTLISTENER)]
    HRESULT addEventListener(
            [in] BSTR type,
            [in] IDispatch *listener,
            [in] VARIANT_BOOL useCapture);

    [id(DISPID_IEVENTTARGET_REMOVEEVENTLISTENER)]
    HRESULT removeEventListener(
            [in] BSTR type,
            [in] IDispatch *listener,
            [in] VARIANT_BOOL useCapture);

    [id(DISPID_IEVENTTARGET_DISPATCHEVENT)]
    HRESULT dispatchEvent(
            [in] IDOMEvent *evt,
            [out, retval] VARIANT_BOOL *pfResult);
}

/*****************************************************************************
 *    IDOMEvent interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(305104ba-98b5-11cf-bb82-00aa00bdce0b)
]
interface IDOMEvent : IDispatch
{
    [propget, id(DISPID_IDOMEVENT_BUBBLES)]
    HRESULT bubbles([out, retval] VARIANT_BOOL *p);

    [propget, id(DISPID_IDOMEVENT_CANCELABLE)]
    HRESULT cancelable([out, retval] VARIANT_BOOL *p);

    [propget, id(DISPID_IDOMEVENT_CURRENTTARGET)]
    HRESULT currentTarget([out, retval] IEventTarget **p);

    [propget, id(DISPID_IDOMEVENT_DEFAULTPREVENTED)]
    HRESULT defaultPrevented([out, retval] VARIANT_BOOL *p);

    [propget, id(DISPID_IDOMEVENT_EVENTPHASE)]
    HRESULT eventPhase([out, retval] USHORT *p);

    [propget, id(DISPID_IDOMEVENT_TARGET)]
    HRESULT target([out, retval] IEventTarget **p);

    [propget, id(DISPID_IDOMEVENT_TIMESTAMP)]
    HRESULT timeStamp([out, retval] ULONGLONG *p);

    [propget, id(DISPID_IDOMEVENT_TYPE)]
    HRESULT type([out, retval] BSTR *p);

    [id(DISPID_IDOMEVENT_INITEVENT)]
    HRESULT initEvent(
            [in] BSTR eventType,
            [in] VARIANT_BOOL canBubble,
            [in] VARIANT_BOOL cancelable);

    [id(DISPID_IDOMEVENT_PREVENTDEFAULT)]
    HRESULT preventDefault();

    [id(DISPID_IDOMEVENT_STOPPROPAGATION)]
    HRESULT stopPropagation();

    [id(DISPID_IDOMEVENT_STOPIMMEDIATEPROPAGATION)]
    HRESULT stopImmediatePropagation();

    [propget, id(DISPID_IDOMEVENT_ISTRUSTED)]
    HRESULT isTrusted([out, retval] VARIANT_BOOL *p);

    [propput, id(DISPID_IDOMEVENT_CANCELBUBBLE)]
    HRESULT cancelBubble([in] VARIANT_BOOL v);

    [propget, id(DISPID_IDOMEVENT_CANCELBUBBLE)]
    HRESULT cancelBubble([out, retval] VARIANT_BOOL *p);

    [propget, id(DISPID_IDOMEVENT_SRCELEMENT)]
    HRESULT srcElement([out, retval] IHTMLElement **p);
}

/*****************************************************************************
 *    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);
}

/*****************************************************************************
 *    IHTMLDOMConstructorCollection interface
 */
[
    odl,
    oleautomation,
    dual,
    uuid(3051049c-98b5-11cf-bb82-00aa00bdce0b)
]
interface IHTMLDOMConstructorCollection : IDispatch
{
    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_ATTR)]
    HRESULT Attr([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_BEHAVIORURNSCOLLECTION)]
    HRESULT BehaviorUrnsCollection([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_BOOKMARKCOLLECTION)]
    HRESULT BookmarkCollection([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_COMPATIBLEINFO)]
    HRESULT CompatibleInfo([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_COMPATIBLEINFOCOLLECTION)]
    HRESULT CompatibleInfoCollection([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CONTROLRANGECOLLECTION)]
    HRESULT ControlRangeCollection([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSCURRENTSTYLEDECLARATION)]
    HRESULT CSSCurrentStyleDeclaration([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSRULELIST)]
    HRESULT CSSRuleList([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSRULESTYLEDECLARATION)]
    HRESULT CSSRuleStyleDeclaration([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSSTYLEDECLARATION)]
    HRESULT CSSStyleDeclaration([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSSTYLERULE)]
    HRESULT CSSStyleRule([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSSTYLESHEET)]
    HRESULT CSSStyleSheet([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_DATATRANSFER)]
    HRESULT DataTransfer([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_DOMIMPLEMENTATION)]
    HRESULT DOMImplementation([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_ELEMENT)]
    HRESULT Element([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_EVENT)]
    HRESULT Event([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HISTORY)]
    HRESULT History([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTCELEMENTBEHAVIORDEFAULTS)]
    HRESULT HTCElementBehaviorDefaults([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLANCHORELEMENT)]
    HRESULT HTMLAnchorElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLAREAELEMENT)]
    HRESULT HTMLAreaElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLAREASCOLLECTION)]
    HRESULT HTMLAreasCollection([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBASEELEMENT)]
    HRESULT HTMLBaseElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBASEFONTELEMENT)]
    HRESULT HTMLBaseFontElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBGSOUNDELEMENT)]
    HRESULT HTMLBGSoundElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBLOCKELEMENT)]
    HRESULT HTMLBlockElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBODYELEMENT)]
    HRESULT HTMLBodyElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBRELEMENT)]
    HRESULT HTMLBRElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBUTTONELEMENT)]
    HRESULT HTMLButtonElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLCOLLECTION)]
    HRESULT HTMLCollection([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLCOMMENTELEMENT)]
    HRESULT HTMLCommentElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLDDELEMENT)]
    HRESULT HTMLDDElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLDIVELEMENT)]
    HRESULT HTMLDivElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLDOCUMENT)]
    HRESULT HTMLDocument([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLDLISTELEMENT)]
    HRESULT HTMLDListElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLDTELEMENT)]
    HRESULT HTMLDTElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLEMBEDELEMENT)]
    HRESULT HTMLEmbedElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLFIELDSETELEMENT)]
    HRESULT HTMLFieldSetElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLFONTELEMENT)]
    HRESULT HTMLFontElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLFORMELEMENT)]
    HRESULT HTMLFormElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLFRAMEELEMENT)]
    HRESULT HTMLFrameElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLFRAMESETELEMENT)]
    HRESULT HTMLFrameSetElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLGENERICELEMENT)]
    HRESULT HTMLGenericElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLHEADELEMENT)]
    HRESULT HTMLHeadElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLHEADINGELEMENT)]
    HRESULT HTMLHeadingElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLHRELEMENT)]
    HRESULT HTMLHRElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLHTMLELEMENT)]
    HRESULT HTMLHtmlElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLIFRAMEELEMENT)]
    HRESULT HTMLIFrameElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLIMAGEELEMENT)]
    HRESULT HTMLImageElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLINPUTELEMENT)]
    HRESULT HTMLInputElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLISINDEXELEMENT)]
    HRESULT HTMLIsIndexElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLLABELELEMENT)]
    HRESULT HTMLLabelElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLLEGENDELEMENT)]
    HRESULT HTMLLegendElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLLIELEMENT)]
    HRESULT HTMLLIElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLLINKELEMENT)]
    HRESULT HTMLLinkElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLMAPELEMENT)]
    HRESULT HTMLMapElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLMARQUEEELEMENT)]
    HRESULT HTMLMarqueeElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLMETAELEMENT)]
    HRESULT HTMLMetaElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLMODELESSDIALOG)]
    HRESULT HTMLModelessDialog([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLNAMESPACEINFO)]
    HRESULT HTMLNamespaceInfo([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLNAMESPACEINFOCOLLECTION)]
    HRESULT HTMLNamespaceInfoCollection([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLNEXTIDELEMENT)]
    HRESULT HTMLNextIdElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLNOSHOWELEMENT)]
    HRESULT HTMLNoShowElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLOBJECTELEMENT)]
    HRESULT HTMLObjectElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLOLISTELEMENT)]
    HRESULT HTMLOListElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLOPTIONELEMENT)]
    HRESULT HTMLOptionElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLPARAGRAPHELEMENT)]
    HRESULT HTMLParagraphElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLPARAMELEMENT)]
    HRESULT HTMLParamElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLPHRASEELEMENT)]
    HRESULT HTMLPhraseElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLPLUGINSCOLLECTION)]
    HRESULT HTMLPluginsCollection([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLPOPUP)]
    HRESULT HTMLPopup([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLSCRIPTELEMENT)]
    HRESULT HTMLScriptElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLSELECTELEMENT)]
    HRESULT HTMLSelectElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLSPANELEMENT)]
    HRESULT HTMLSpanElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLSTYLEELEMENT)]
    HRESULT HTMLStyleElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLECAPTIONELEMENT)]
    HRESULT HTMLTableCaptionElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLECELLELEMENT)]
    HRESULT HTMLTableCellElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLECOLELEMENT)]
    HRESULT HTMLTableColElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLEELEMENT)]
    HRESULT HTMLTableElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLEROWELEMENT)]
    HRESULT HTMLTableRowElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLESECTIONELEMENT)]
    HRESULT HTMLTableSectionElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTEXTAREAELEMENT)]
    HRESULT HTMLTextAreaElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTEXTELEMENT)]
    HRESULT HTMLTextElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTITLEELEMENT)]
    HRESULT HTMLTitleElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLULISTELEMENT)]
    HRESULT HTMLUListElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLUNKNOWNELEMENT)]
    HRESULT HTMLUnknownElement([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_IMAGE)]
    HRESULT Image([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_LOCATION)]
    HRESULT Location([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_NAMEDNODEMAP)]
    HRESULT NamedNodeMap([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_NAVIGATOR)]
    HRESULT Navigator([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_NODELIST)]
    HRESULT NodeList([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_OPTION)]
    HRESULT Option([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_SCREEN)]
    HRESULT Screen([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_SELECTION)]
    HRESULT Selection([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_STATICNODELIST)]
    HRESULT StaticNodeList([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_STORAGE)]
    HRESULT Storage([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_STYLESHEETLIST)]
    HRESULT StyleSheetList([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_STYLESHEETPAGE)]
    HRESULT StyleSheetPage([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_STYLESHEETPAGELIST)]
    HRESULT StyleSheetPageList([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_TEXT)]
    HRESULT Text([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_TEXTRANGE)]
    HRESULT TextRange([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_TEXTRANGECOLLECTION)]
    HRESULT TextRangeCollection([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_TEXTRECTANGLE)]
    HRESULT TextRectangle([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_TEXTRECTANGLELIST)]
    HRESULT TextRectangleList([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_WINDOW)]
    HRESULT Window([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_XDOMAINREQUEST)]
    HRESULT XDomainRequest([out, retval] IDispatch **p);

    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_XMLHTTPREQUEST)]
    HRESULT XMLHttpRequest([out, retval] IDispatch **p);
}

/*****************************************************************************
 *    IXMLGenericParse interface
 */
[
    object,
    pointer_default(unique),
    uuid(E4E23071-4D07-11d2-AE76-0080C73BC199)
]
interface IXMLGenericParse : IUnknown
{
    HRESULT SetGenericParse(
        [in] VARIANT_BOOL fDoGeneric);
}

/*****************************************************************************
 *    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);
}
