/*
 * Copyright (C) 2006, 2007, 2009 Apple Inc. All rights reserved.
 * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Library General Public
 * License as published by the Free Software Foundation; either
 * version 2 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
 * Library General Public License for more details.
 *
 * You should have received a copy of the GNU Library General Public License
 * along with this library; see the file COPYING.LIB.  If not, write to
 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 * Boston, MA 02110-1301, USA.
 */

module core {

    interface [
        CustomMarkFunction,
        GenerateNativeConverter,
        InlineGetOwnPropertySlot
    ] Element : Node {

        // DOM Level 1 Core

        readonly attribute [ConvertNullStringTo=Null] DOMString tagName;

        [ConvertNullStringTo=Null] DOMString getAttribute(in DOMString name);
        [OldStyleObjC, Custom] void setAttribute(in DOMString name,
                                                 in DOMString value)
            raises(DOMException);
        void removeAttribute(in DOMString name)
            raises(DOMException);
        Attr getAttributeNode(in DOMString name);
        [Custom] Attr setAttributeNode(in Attr newAttr)
            raises(DOMException);
        Attr removeAttributeNode(in Attr oldAttr)
            raises(DOMException);
        NodeList getElementsByTagName(in DOMString name);

        // DOM Level 2 Core

        [OldStyleObjC] DOMString getAttributeNS(in [ConvertNullToNullString] DOMString namespaceURI,
                                                in DOMString localName);
        [OldStyleObjC, Custom] void setAttributeNS(in [ConvertNullToNullString] DOMString namespaceURI,
                                                   in DOMString qualifiedName, 
                                                   in DOMString value)
            raises(DOMException);
        [OldStyleObjC] void removeAttributeNS(in [ConvertNullToNullString] DOMString namespaceURI,
                                              in DOMString localName)
            raises(DOMException);
        [OldStyleObjC] NodeList getElementsByTagNameNS(in [ConvertNullToNullString] DOMString namespaceURI,
                                                       in DOMString localName);
        [OldStyleObjC] Attr getAttributeNodeNS(in [ConvertNullToNullString] DOMString namespaceURI,
                                               in DOMString localName);
        [Custom] Attr setAttributeNodeNS(in Attr newAttr)
            raises(DOMException);
        boolean hasAttribute(in DOMString name);
        [OldStyleObjC] boolean hasAttributeNS(in [ConvertNullToNullString] DOMString namespaceURI,
                                              in DOMString localName);

        readonly attribute CSSStyleDeclaration style;

        // Common extensions

        readonly attribute long offsetLeft;
        readonly attribute long offsetTop;
        readonly attribute long offsetWidth;
        readonly attribute long offsetHeight;
        readonly attribute Element offsetParent;
        readonly attribute long clientLeft;
        readonly attribute long clientTop;
        readonly attribute long clientWidth;
        readonly attribute long clientHeight;
                 attribute long scrollLeft;
                 attribute long scrollTop;
        readonly attribute long scrollWidth;
        readonly attribute long scrollHeight;

        void focus();
        void blur();
        void scrollIntoView(in [Optional] boolean alignWithTop);

        // IE extensions

        boolean contains(in Element element);

        // WebKit extensions

        void scrollIntoViewIfNeeded(in [Optional] boolean centerIfNeeded);
        void scrollByLines(in long lines);
        void scrollByPages(in long pages);

        // HTML 5
        NodeList getElementsByClassName(in DOMString name);

        // NodeSelector - Selector API
        Element querySelector(in DOMString selectors)
            raises(DOMException);
        NodeList querySelectorAll(in DOMString selectors)
            raises(DOMException);

        // WebKit extension, pending specification.
        boolean webkitMatchesSelector(in DOMString selectors)
            raises(DOMException);

        // ElementTraversal API
        readonly attribute Element firstElementChild;
        readonly attribute Element lastElementChild;
        readonly attribute Element previousElementSibling;
        readonly attribute Element nextElementSibling;
        readonly attribute unsigned long childElementCount;

#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
        // CSSOM View Module API
        ClientRectList getClientRects();
        ClientRect getBoundingClientRect();
#endif

#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
        // Objective-C extensions
        readonly attribute DOMString innerText;
#endif

#if !defined(LANGUAGE_OBJECTIVE_C) || !LANGUAGE_OBJECTIVE_C
        // Event handler DOM attributes
        attribute [DontEnum] EventListener onabort;
        attribute [DontEnum] EventListener onblur;
        attribute [DontEnum] EventListener onchange;
        attribute [DontEnum] EventListener onclick;
        attribute [DontEnum] EventListener oncontextmenu;
        attribute [DontEnum] EventListener ondblclick;
        attribute [DontEnum] EventListener ondrag;
        attribute [DontEnum] EventListener ondragend;
        attribute [DontEnum] EventListener ondragenter;
        attribute [DontEnum] EventListener ondragleave;
        attribute [DontEnum] EventListener ondragover;
        attribute [DontEnum] EventListener ondragstart;
        attribute [DontEnum] EventListener ondrop;
        attribute [DontEnum] EventListener onerror;
        attribute [DontEnum] EventListener onfocus;
        attribute [DontEnum] EventListener oninput;
        attribute [DontEnum] EventListener oninvalid;
        attribute [DontEnum] EventListener onkeydown;
        attribute [DontEnum] EventListener onkeypress;
        attribute [DontEnum] EventListener onkeyup;
        attribute [DontEnum] EventListener onload;
        attribute [DontEnum] EventListener onmousedown;
        attribute [DontEnum] EventListener onmousemove;
        attribute [DontEnum] EventListener onmouseout;
        attribute [DontEnum] EventListener onmouseover;
        attribute [DontEnum] EventListener onmouseup;
        attribute [DontEnum] EventListener onmousewheel;
        attribute [DontEnum] EventListener onscroll;
        attribute [DontEnum] EventListener onselect;
        attribute [DontEnum] EventListener onsubmit;

        // attribute [DontEnum] EventListener oncanplay;
        // attribute [DontEnum] EventListener oncanplaythrough;
        // attribute [DontEnum] EventListener ondurationchange;
        // attribute [DontEnum] EventListener onemptied;
        // attribute [DontEnum] EventListener onended;
        // attribute [DontEnum] EventListener onformchange;
        // attribute [DontEnum] EventListener onforminput;
        // attribute [DontEnum] EventListener onloadeddata;
        // attribute [DontEnum] EventListener onloadedmetadata;
        // attribute [DontEnum] EventListener onloadstart;
        // attribute [DontEnum] EventListener onpause;
        // attribute [DontEnum] EventListener onplay;
        // attribute [DontEnum] EventListener onplaying;
        // attribute [DontEnum] EventListener onprogress;
        // attribute [DontEnum] EventListener onratechange;
        // attribute [DontEnum] EventListener onreadystatechange;
        // attribute [DontEnum] EventListener onseeked;
        // attribute [DontEnum] EventListener onseeking;
        // attribute [DontEnum] EventListener onshow;
        // attribute [DontEnum] EventListener onstalled;
        // attribute [DontEnum] EventListener onsuspend;
        // attribute [DontEnum] EventListener ontimeupdate;
        // attribute [DontEnum] EventListener onvolumechange;
        // attribute [DontEnum] EventListener onwaiting;

        // WebKit extensions
        attribute [DontEnum] EventListener onbeforecut;
        attribute [DontEnum] EventListener oncut;
        attribute [DontEnum] EventListener onbeforecopy;
        attribute [DontEnum] EventListener oncopy;
        attribute [DontEnum] EventListener onbeforepaste;
        attribute [DontEnum] EventListener onpaste;
        attribute [DontEnum] EventListener onreset;
        attribute [DontEnum] EventListener onsearch;
        attribute [DontEnum] EventListener onselectstart;
        attribute [DontEnum,Conditional=TOUCH_EVENTS] EventListener ontouchstart;
        attribute [DontEnum,Conditional=TOUCH_EVENTS] EventListener ontouchmove;
        attribute [DontEnum,Conditional=TOUCH_EVENTS] EventListener ontouchend;
        attribute [DontEnum,Conditional=TOUCH_EVENTS] EventListener ontouchcancel;
#endif
    };

}
