/* -*- 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 "nsIDOMHTMLElement.idl"
#include "nsIDOMHTMLOptionsCollection.idl"

/**
 * The nsIDOMHTMLSelectElement interface is the interface to a [X]HTML
 * select element.
 *
 * This interface is trying to follow the DOM Level 2 HTML specification:
 * http://www.w3.org/TR/DOM-Level-2-HTML/
 *
 * with changes from the work-in-progress WHATWG HTML specification:
 * http://www.whatwg.org/specs/web-apps/current-work/
 */

interface nsIDOMValidityState;

[scriptable, uuid(e85194cf-56e6-44a6-92d9-0096c9d2536e)]
interface nsIDOMHTMLSelectElement : nsIDOMHTMLElement
{
           attribute boolean                     autofocus;
           attribute boolean                     disabled;
  readonly attribute nsIDOMHTMLFormElement       form;
           attribute boolean                     multiple;
           attribute DOMString                   name;
           attribute unsigned long               size;

  readonly attribute DOMString                   type;

  readonly attribute nsIDOMHTMLOptionsCollection options;
           attribute unsigned long               length;
  nsIDOMNode                item(in unsigned long index);
  nsIDOMNode                namedItem(in DOMString name);
  // This add method implementation means the following
  // since IDL doesn't support overfload.
  //   void add(in nsIDOMHTMLElement, [optional] in nsIDOMHTMLElement)
  //   void add(in nsIDOMHTMLElement, in long)
  void                      add(in nsIDOMHTMLElement element, 
                                [optional] in nsIVariant before)
                                                     raises(DOMException);   
  void                      remove(in long index);

           attribute long                  selectedIndex;
           attribute DOMString             value;

  // The following lines are part of the constraint validation API, see:
  // http://www.whatwg.org/specs/web-apps/current-work/#the-constraint-validation-api
  readonly attribute boolean             willValidate;
  readonly attribute nsIDOMValidityState validity;
  readonly attribute DOMString           validationMessage;
  boolean checkValidity();
  void setCustomValidity(in DOMString error);

  attribute boolean                      required;
};
