/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#include "domstubs.idl"

interface nsIVariant;
interface nsIDOMUserDataHandler;

/**
 * The nsIDOMNode interface is the primary datatype for the entire 
 * Document Object Model.
 * It represents a single node in the document tree.
 *
 * For more information on this interface please see 
 * http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html
 */

[scriptable, uuid(56545150-a001-484e-9ed4-cb319eebd7b3)]
interface nsIDOMNode : nsISupports
{
  const unsigned short      ELEMENT_NODE       = 1;
  const unsigned short      ATTRIBUTE_NODE     = 2;
  const unsigned short      TEXT_NODE          = 3;
  const unsigned short      CDATA_SECTION_NODE = 4;
  const unsigned short      ENTITY_REFERENCE_NODE = 5;
  const unsigned short      ENTITY_NODE        = 6;
  const unsigned short      PROCESSING_INSTRUCTION_NODE = 7;
  const unsigned short      COMMENT_NODE       = 8;
  const unsigned short      DOCUMENT_NODE      = 9;
  const unsigned short      DOCUMENT_TYPE_NODE = 10;
  const unsigned short      DOCUMENT_FRAGMENT_NODE = 11;
  const unsigned short      NOTATION_NODE      = 12;

  readonly attribute DOMString        nodeName;
           attribute DOMString        nodeValue;
                                          // raises(DOMException) on setting
                                          // raises(DOMException) on retrieval
  readonly attribute unsigned short   nodeType;
  readonly attribute nsIDOMNode       parentNode;
  readonly attribute nsIDOMElement    parentElement;
  readonly attribute nsIDOMNodeList   childNodes;
  readonly attribute nsIDOMNode       firstChild;
  readonly attribute nsIDOMNode       lastChild;
  readonly attribute nsIDOMNode       previousSibling;
  readonly attribute nsIDOMNode       nextSibling;
  // Modified in DOM Level 2:
  readonly attribute nsIDOMDocument   ownerDocument;
  nsIDOMNode                insertBefore(in nsIDOMNode newChild, 
                                         in nsIDOMNode refChild)
                                          raises(DOMException);
  nsIDOMNode                replaceChild(in nsIDOMNode newChild, 
                                         in nsIDOMNode oldChild)
                                          raises(DOMException);
  nsIDOMNode                removeChild(in nsIDOMNode oldChild)
                                         raises(DOMException);
  nsIDOMNode                appendChild(in nsIDOMNode newChild)
                                         raises(DOMException);
  boolean                   hasChildNodes();
  // Modified in DOM Level 4:
  [optional_argc] nsIDOMNode                cloneNode([optional] in boolean deep);
  // Modified in DOM Level 2:
  void                      normalize();
  // Introduced in DOM Level 2:
  readonly attribute DOMString        namespaceURI;
  // Modified in DOM Core
  readonly attribute DOMString        prefix;

  // Introduced in DOM Level 2:
  readonly attribute DOMString        localName;
  // Introduced in DOM Level 2:
  boolean            hasAttributes();

  // Introduced in DOM Level 3:
  // This uses a binaryname to avoid warnings due to name collision with
  // nsINode::GetBaseURI
  [binaryname(DOMBaseURI)] readonly attribute DOMString baseURI;

  // DocumentPosition
  const unsigned short      DOCUMENT_POSITION_DISCONNECTED = 0x01;
  const unsigned short      DOCUMENT_POSITION_PRECEDING    = 0x02;
  const unsigned short      DOCUMENT_POSITION_FOLLOWING    = 0x04;
  const unsigned short      DOCUMENT_POSITION_CONTAINS     = 0x08;
  const unsigned short      DOCUMENT_POSITION_CONTAINED_BY = 0x10;
  const unsigned short      DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 0x20;

  // Introduced in DOM Level 3:
  unsigned short     compareDocumentPosition(in nsIDOMNode other)
                                        raises(DOMException);
  // Introduced in DOM Level 3:
           attribute DOMString       textContent;
                                        // raises(DOMException) on setting
                                        // raises(DOMException) on retrieval

  // Introduced in DOM Level 3:
  DOMString          lookupPrefix(in DOMString namespaceURI);
  // Introduced in DOM Level 3:
  boolean            isDefaultNamespace(in DOMString namespaceURI);
  // Introduced in DOM Level 3:
  DOMString          lookupNamespaceURI(in DOMString prefix);
  // Introduced in DOM Level 3:
  boolean            isEqualNode(in nsIDOMNode arg);
  // Introduced in DOM Level 3:
  nsIVariant         setUserData(in DOMString key, 
                                 in nsIVariant data, 
                                 in nsIDOMUserDataHandler handler);
  // Introduced in DOM Level 3:
  nsIVariant         getUserData(in DOMString key);

  boolean            contains(in nsIDOMNode aOther);
};
