/*
 * Copyright 2012 Google Inc.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
package $PACKAGE;
$IMPORTS
import elemental.events.*;
import elemental.util.*;
import elemental.dom.*;
import elemental.html.*;
import elemental.css.*;
import elemental.stylesheets.*;
import elemental.svg.*;

import java.util.Date;

/**
  * $CLASSJAVADOC
  */
public interface $ID$EXTENDS {

/**
 * Contains the set of standard values used with {@link #createEvent}.
 */
public interface Events {
  public static final String CUSTOM = "CustomEvent";
  public static final String KEYBOARD = "KeyboardEvent";
  public static final String MESSAGE = "MessageEvent";
  public static final String MOUSE = "MouseEvent";
  public static final String MUTATION = "MutationEvent";
  public static final String OVERFLOW = "OverflowEvent";
  public static final String PAGE_TRANSITION = "PageTransitionEvent";
  public static final String PROGRESS = "ProgressEvent";
  public static final String STORAGE = "StorageEvent";
  public static final String TEXT = "TextEvent";
  public static final String UI = "UIEvent";
  public static final String WEBKIT_ANIMATION = "WebKitAnimationEvent";
  public static final String WEBKIT_TRANSITION = "WebKitTransitionEvent";
  public static final String WHEEL = "WheelEvent";
  public static final String SVGS = "SVGEvents";
  public static final String SVG_ZOOMS = "SVGZoomEvents";
  public static final String TOUCH = "TouchEvent";
}

/**
 * Contains the set of standard values returned by {@link #readyState}.
 */
public interface ReadyState {

  /**
   * Indicates the document is still loading and parsing.
   */
  public static final String LOADING = "loading";

  /**
   * Indicates the document is finished parsing but is still loading
   * subresources.
   */
  public static final String INTERACTIVE = "interactive";

  /**
   * Indicates the document and all subresources have been loaded.
   */
  public static final String COMPLETE = "complete";
}
$!MEMBERS}
