/*
 * Copyright (C) 2006, 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 html {

    interface HTMLAreaElement : HTMLElement {
        attribute [ConvertNullToNullString, Reflect=accesskey] DOMString accessKey;
        attribute [ConvertNullToNullString, Reflect] DOMString alt;
        attribute [ConvertNullToNullString, Reflect] DOMString coords;
        attribute [ConvertNullToNullString, ReflectURL] DOMString href;
        attribute boolean noHref;
        attribute [ConvertNullToNullString, Reflect] DOMString shape;
        attribute [ConvertNullToNullString, Reflect] DOMString target;

        // IE Extensions
        readonly attribute DOMString hash;
        readonly attribute DOMString host;
        readonly attribute DOMString hostname;
        readonly attribute DOMString pathname;
        readonly attribute DOMString port;
        readonly attribute DOMString protocol;
        readonly attribute DOMString search;

#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
        // Objective-C extension:
        readonly attribute URL absoluteLinkURL;
#endif
    };

}
