/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
 *
 * The contents of this file are subject to the Netscape Public License
 * Version 1.0 (the "NPL"); you may not use this file except in
 * compliance with the NPL.  You may obtain a copy of the NPL at
 * http://www.mozilla.org/NPL/
 *
 * Software distributed under the NPL is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
 * for the specific language governing rights and limitations under the
 * NPL.
 *
 * The Initial Developer of this code under the NPL is Netscape
 * Communications Corporation.  Portions created by Netscape are
 * Copyright (C) 1998 Netscape Communications Corporation.  All Rights
 * Reserved.
 */

#ifndef nsDOMIterator_h__
#define nsDOMIterator_h__

#include "nsIDOMIterators.h"
#include "nsIContent.h"
#include "nsIScriptObjectOwner.h"

class nsDOMIterator : public nsIDOMNodeIterator, public nsIScriptObjectOwner {
public:
  nsDOMIterator(nsIContent &aContent);
  virtual ~nsDOMIterator();

  NS_DECL_ISUPPORTS

  virtual nsresult            GetScriptObject(JSContext *aContext, void** aScriptObject);
  virtual nsresult            ResetScriptObject();

  // nsIDOMIterator interface
  virtual nsresult            SetFilter(PRInt32 aFilter, PRBool aFilterOn);
  virtual nsresult            GetLength(PRUint32 *aLength);
  virtual nsresult            GetCurrentNode(nsIDOMNode **aNode);
  virtual nsresult            GetNextNode(nsIDOMNode **aNode);
  virtual nsresult            GetPreviousNode(nsIDOMNode **aNode);
  virtual nsresult            ToFirst(nsIDOMNode **aNode);
  virtual nsresult            ToLast(nsIDOMNode **aNode);
  virtual nsresult            MoveTo(int aNth, nsIDOMNode **aNode);

private:
  nsIContent &mContent;
  PRInt32 mPosition;
  void *mScriptObject;
};


#endif

