/* -*- 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"

interface nsIControllers;
interface nsIDOMFileList;
interface nsIDOMValidityState;

 /**
  * The nsIDOMHTMLInputElement interface is the interface to a [X]HTML
  * input 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/
  */

[scriptable, uuid(83984fd0-b0b2-11e1-afa6-0800200c9a66)]
interface nsIDOMHTMLInputElement : nsIDOMHTMLElement
{
           attribute DOMString             accept;
           attribute DOMString             alt;

           attribute DOMString             autocomplete;
           attribute boolean               autofocus;
           attribute boolean               defaultChecked;
           attribute boolean               checked;
           attribute boolean               disabled;
  readonly attribute nsIDOMHTMLFormElement form;
           attribute DOMString             formAction;
           attribute DOMString             formEnctype;
           attribute DOMString             formMethod;
           attribute boolean               formNoValidate;
           attribute DOMString             formTarget;

  readonly attribute nsIDOMFileList        files;

           attribute unsigned long height;
           attribute boolean               indeterminate;

           attribute DOMString             inputmode;

  readonly attribute nsIDOMHTMLElement     list;
           attribute DOMString             max;
           attribute long                  maxLength;
           attribute DOMString             min;

           attribute boolean               multiple;
           attribute DOMString             name;

           attribute DOMString             pattern;
           attribute DOMString             placeholder;
           attribute boolean               readOnly;
           attribute boolean               required;
           attribute DOMString             step;

           attribute DOMString             align;

           attribute unsigned long         size;
           attribute unsigned long width;
           attribute DOMString             src;

           attribute DOMString             type;
           attribute DOMString             defaultValue;
           attribute DOMString             value;
           attribute double                valueAsNumber;
  [implicit_jscontext] attribute jsval     valueAsDate;

  [optional_argc] void stepDown([optional] in long n);
  [optional_argc] void stepUp([optional] in long n);

  // 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);

  void select();
           attribute long                  selectionStart;
           attribute long                  selectionEnd;
  void setSelectionRange(in long selectionStart, in long selectionEnd, [optional] in DOMString direction);
           attribute DOMString             selectionDirection;


           attribute DOMString             useMap;
  readonly attribute nsIControllers        controllers;	
	readonly attribute long                  textLength;

  void mozGetFileNameArray([optional] out unsigned long aLength,
                           [array,size_is(aLength), retval] out wstring aFileNames);
  void mozSetFileNameArray([array,size_is(aLength)] in wstring aFileNames,
                           in unsigned long aLength);

    /**
   * This non-standard method prevents to check types manually to know if the
   * element is a text field.
   */
  boolean mozIsTextField(in boolean aExcludePassword);
};
