<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/xsl' href='./rfc2629.xslt' ?>
<?rfc toc="yes"?>
<!DOCTYPE rfc PUBLIC "-//IETF//DTD RFC 2629//EN"
"http://xml.resource.org/authoring/rfc2629.dtd">
<rfc ipr="full3978"
     docName="opensocial-specification-v0_9">
 <front>
  <title abbrev="OpenSocial Specificaton">OpenSocial Specification v0.9</title>
  <author surname="OpenSocial and Gadgets Specification Group"
          fullname='OpenSocial and Gadgets Specification Group &lt;opensocial-and-gadgets-spec@googlegroups.com&gt;'>
   <address>
    <email>opensocial-and-gadgets-spec@googlegroups.com</email>
   </address>
  </author>
  <date month="April"
        year="2009" />
  <area>General</area>
  <keyword>OpenSocial</keyword>
  <keyword>social networking</keyword>
  <keyword>REST</keyword>
  <keyword>XML</keyword>
  <keyword>Extensible Markup Language</keyword>
  <keyword>JSON</keyword>
  <keyword>JavaScript Object Notation</keyword>
  <keyword>Atom</keyword>
 </front>
 <middle>
  <section title="Notation and Conventions">
   <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
   document are to be interpreted as described in 
   <xref target="RFC2119">RFC2119</xref>. Domain name examples use 
   <xref target="RFC2606">RFC2606</xref>.</t>
  </section>
  <section title="Overview">
   <t>OpenSocial is a set of APIs for building social applications that run on
   the web. OpenSocial's goal is to make more apps available to more users, by
   providing a common API that can be used in many different contexts.
   Developers can create applications, using standard JavaScript and HTML, that
   run on social websites that have implemented the OpenSocial APIs. These
   websites, known as OpenSocial containers, allow developers to access their
   social information; in return they receive a large suite of applications for
   their users.</t>
   <t>The OpenSocial APIs expose methods for accessing information about
   people, their friends, and their data, within the context of a container.
   This means that when running an application on Orkut, you'll be interacting
   with your Orkut friends, while running the same application on MySpace lets
   you interact with your MySpace friends. For more information on the types of
   information exposed by the OpenSocial API, see the Key concepts section.</t>
   <t>This document describes the concepts and principles behind the OpenSocial
   JavaScript APIs. It is a complement to the JavaScript API Reference, which
   covers the details of specific methods and parameters. This document does
   not describe any particular implementation of the API.</t>
  </section>
  <section title="Compliance"
           anchor="compliance">
   <t>So what does it mean to be an OpenSocial container? In a practical sense,
   it means that a site can run any application built on the OpenSocial APIs.
   This implies a number of things: 
   <list style="numbers">
    <t>The container must implement all methods in 
    <xref target="JavaScript API Reference" />. 
    <t>The OpenSocial JavaScript APIs include the methods in the 
    <xref target="LightweightJSAPI">Lightweight JavaScript APIs</xref> as well
    as methods from 
    <xref target="JavaScript API Reference" />. Methods may return the error
    code opensocial.ResponseItem.NOT_IMPLEMENTED for a specific method if the
    container does not support a specific request.</t></t>
    <t>The container must only use the specified extensibility mechanisms for
    any container-specific extensions. 
    <t>Extra person, activity or other object fields should be defined in an
    enum under the container's namespace, and the environment should allow
    applications to discover these fields. For example, if the field
    orkut.PersonField.SPECIAL_FIELD is defined as "orkut.specialPersonField",
    then opensocial.getEnvironment().supportsField("person",
    "orkut.specialPersonField") and
    opensocial.getEnvironment().supportsField(opensocial.Environment.ObjectType.PERSON,
    orkut.PersonField.SPECIAL_FIELD) should both return the same value.</t>
    <t>Any extra data request types should be available with a namespaced call
    like myspace.newFetchAlbumRequest. The gadget would then use
    batchRequest.add(myspace.newFetchAlbumRequest(...)).</t>
    <t>Any extra objects may be added to the container's own namespace. These
    objects can be returned from person.getField or other similar
    requests.</t></t>
    <t>The container must satisfy the 
    <xref target="Gadgets API Specification" />. 
    <t>In short, this requires handling three types of requests: the Gadget
    Rendering Request, the Gadget Metadata Request, and the JavaScript
    Request.</t>
    <t>For the JavaScript APIs, you must implement the 
    <xref target="Gadgets API Specification">gadgets core JavaScript
    API</xref>, as per the documentation.</t></t>
    <t>The container must support the 
    <xref target="RESTful Protocol Specification" />. 
    <t>Containers must provide JSON, XML, and AtomPub representations of data.
    OpenSocial uses HTTP GET to retrieve, PUT to update in place, POST to
    create new, and DELETE to remove. POST operates on collections and creates
    new activities, persons, or app data within those collections.</t></t>
    <t>The container may support the 
    <xref target="RPC Protocol Specification" />. 
    <t>Containers may optionally provide an RPC alternative to the RESTful
    protocol. This specification supports the same data and operations as the
    RESTful protocol, but in a form more suited to JSON.</t></t>
    <t>The container MUST support the OpenSocial Markup Language. 
    <t>The OpenSocial Markup language consists of 
    <xref target="OpenSocial Templating" /> and 
    <xref target="OpenSocial Markup Language Tags" />.</t></t>
    <t>The container MUST support Data Pipelining 
    <t>
    <xref target="OpenSocial Data Pipelining" /> is a declarative syntax for
    defining the data you want the container to provide to you for
    processing.</t></t>
    <t>Containers that support the creation of and updating AppData SHOULD
    provide at least 10KB of space per user per application for storage.</t>
   </list></t>
  </section>
  <section title="Background">
   <t>The rest of this document provides background information only and is not
   part of the OpenSocial specification. OpenSocial container compliance is
   determined solely based on 
   <xref target="compliance" />, Compliance.</t>
   <section title="Key Concepts">
    <t>Social applications revolve around people and their relationships.
    OpenSocial provides a standard way for websites to expose their social
    graph and more. Seeing the activities of other people helps you stay up to
    date with your friends, and allows everything from resumes to videos to
    spread virally through the graph. OpenSocial also provides a way for
    application data to persist on a social networking site, as well as
    specifying the different ways that an application can be viewed within an
    OpenSocial container. Finally, OpenSocial defines an API through which
    users of web services, mobile devices, and desktop applications may
    interact with social data.</t>
    <section title="People">
     <t>It's people! Social graphs are made out of people! People are a
     fundamental part of social networking software and the OpenSocial API. The
     Person object provides access to a user's information. Part of this
     information is stored in the user's profile and, depending on the site,
     can include anything from "favorite TV shows" to "5 things you'll find in
     my bedroom." The other important user information is the set of
     connections they have in the social graph and this is covered in the
     Relationships section.</t>
     <t>There are two Person objects that can be requested directly: the VIEWER
     and the OWNER. To understand the distinction, imagine you're checking out
     a coworker's profile on Orkut. In this case, you are the VIEWER and your
     coworker is the OWNER. It's also common to view your own profile, in which
     case you are both the VIEWER and the OWNER, and some applications may
     choose to handle this case differently. OpenSocial also provides for the
     case of anonymous viewing, where the gadget will not be able to access the
     VIEWER's information.</t>
     <t>The API Reference contains more detailed information about the 
     <xref target="opensocial.Person">Person class</xref>.</t>
     <section title="A note about user IDs">
      <t>One of the pieces of data that is always returned with a Person object
      is the user's ID. The user ID must only contain alphanumeric (A-Za-z0-9)
      characters, underscore(_), dot(.) or dash(-), and must uniquely identify
      the user in a container. This standardization is intended to allow for
      prefixing IDs with a domain name and separator to create globally unique
      IDs (e.g. "orkut.com:34KJDCSKJN2HHF0DW20394"). Note that there will
      likely be a size limit placed on user IDs to help manage storing IDs in a
      database.</t>
     </section>
    </section>
    <section title="Relationships">
     <t>The ability to create relationships is what turns a multi-user
     application into social software. Being able to share information and
     interact with friends changes the dynamic of user experience: you're
     engaging with people, not software.</t>
     <t>There are two representations of sets of people available to
     OpenSocial: VIEWER_FRIENDS and OWNER_FRIENDS. In the case where you're
     checking out a coworker's profile, requesting VIEWER_FRIENDS will return
     the set of users that are friends with you, while requesting OWNER_FRIENDS
     will return the set of users that are friends with your coworker.
     Logically, if you're viewing your own profile, VIEWER_FRIENDS and
     OWNER_FRIENDS will be the same set of users. Also, if the container
     support anonymous profile browsing, then the application won't be able to
     access the set of VIEWER_FRIENDS.</t>
     <t>Note that OpenSocial makes no assumptions about the relationship
     between VIEWER and OWNER. The VIEWER and OWNER could be friends, but if
     you're looking at a stranger's profile, there's no relationship between
     you, the VIEWER, and them, the OWNER.</t>
     <t>When an application wants to interact with or display data for "friends
     of friends", the OpenSocial specification supports extending a query for
     VIEWER_FRIENDS or OWNER_FRIENDS by a NETWORK_DISTANCE parameter.
     Containers can optionally support "friends of friends" queries, "friends
     of friends of friends" queries, and so on.</t>
    </section>
    <section title="Activities">
     <t>Since we can't be online all the time, it helps to have a record of
     what our friends have been up to, so long as your friends want to share
     that record. Seeing how other people are interacting with a social
     application also allows you to learn new features and uses of the
     application, so activity streams are one of the major drivers for organic
     growth of applications.</t>
     <t>OpenSocial exposes activity streams, which are a collection of actions
     a user has taken in the context of a given container. These activities can
     include interaction with the container itself, such as updating your
     profile or installing a new gadget, or interaction with an OpenSocial
     application, such as sending your friend a virtual gift or setting a new
     high score in a game.</t>
     <t>Activity templates allow application developers to define messages with
     placeholders for pieces of applicaton or user data. This separation of
     data and presentation allows multiple activities to be combined into
     activity summaries: consolidated bundles of activities that let users know
     what their friends are up to without having to wade through a flood of
     messages.</t>
     <t>The API Reference contains more detailed information about the 
     <xref target="opensocial.Activity">Activity class</xref>.</t>
    </section>
    <section title="Messaging">
     <t>Almost all Social networks offer a way of reading, posting, and
     deleting messages between users in the network. Opensocial defines a
     number message types including public messages (such as profile comments),
     private messages (messages restricted to certain individuals and groups.
     More information about messages is in the 
     <xref target="opensocial.Message">Message class</xref>. Messages are
     grouped into MessageCollections that include a unique id, name and sizing
     on the number of messages.</t>
     <t>A standard set of operations via REST and JavaScript is available to
     read, write and delete messages, message collections and comments.</t>
    </section>
    <section title="Persistence">
     <t>Applications can provide a richer user experience if they can save
     their state between sessions. OpenSocial defines a data store that
     applications can use to read and write user-specific data. This data store
     can be read by anyone who can see the gadget, but only the VIEWER's
     user-scoped data is writable.</t>
     <t>Clearly this free data store could be abused, so containers may
     implement quotas or rate limits to preserve their disk space. However,
     OpenSocial does not currently define these policies.</t>
     <t>The keys that developers specify to index this data must only contain
     alphanumeric (A-Za-z0-9) characters, underscore(_), dot(.) or dash(-).</t>
     <t>Since application data is often created based on user inputs,
     OpenSocial containers perform automatic HTML escaping of all application
     data. However, developers have the option of turning off this escaping by
     setting the escapeType parameter on newFetchPersonAppData and getField
     calls.</t>
    </section>
    <section title="Views">
     <t>Containers can support several different locations where gadgets may be
     rendered. Such locations are formally called views (formerly Surfaces in
     earlier versions of the API). All gadgets (not just OpenSocial
     applications) have become view-aware. A gadget can ask which view it is
     currently being rendered on, as well as what views the container
     supports.</t>
     <t>Containers may define their own views, but the specification defines
     the following standard views in the gadgets.views.View Type object: 
     <list style="symbols">
      <t>Profile - A gadget on the profile view is rendered alongside other
      applications in the user's profile, so it will be smaller and can't
      support passing URL parameters from the container to the gadget.</t>
      <t>Canvas - A gadget in the canvas view is rendered by itself, so it will
      have lots of real estate and URL parameters passed to the container page
      can be forwarded to the gadget.</t>
      <t>Home - A gadget in the home view is rendered on a private "homepage"
      where the OWNER is always the same person as the VIEWER. There may be
      multiple gadgets present in this view.</t>
      <t>Preview - A gadget in the preview view does not have access to either
      the OWNER or VIEWER objects. This view is intended to provide "test
      drive" functionality so that gadgets can demonstrate functionality for
      potential users</t>
     </list>In addition to requesting data about the current view, gadgets may
     also request that the container navigate the user to another view. Imagine
     a news gadget that normally runs in a small profile view that changes to a
     full canvas view if the user clicks on a headline to get more information.
     Gadgets can choose the best rendering context for their current state.</t>
     <t>When navigating to another view, a gadget may also request a change in
     OWNER. For example, imagine an application that places a survey on the
     user's profile view. This application may want to provide links to the
     user's friends' profiles, so that the user can see which surveys his or
     her friends are currently displaying.</t>
     <t>Containers can also specify a template that applications can use to
     generate URLs to a specific application canvas and user. Such URLs can be
     shared via activity updates and printed on external websites, so linking
     to applications from external sources is easy.</t>
    </section>
    <section title="Lifecycle Events">
     <t>Certain types of events may occur during the lifecycle of a gadget that
     are desirable yet difficult for developers to track. Such events include
     installs, uninstalls, rate limiting, directory listing changes, and
     blacklist/whitelist notifications. The gadget specification allows
     developers to specify URLs that the container will POST event data to when
     certain events are triggered.</t>
     <t>By tracking the data POSTed to the specified URL, gadget developers can
     accurately track number of installs, remove database entries upon
     uninstall, and get automatic notifications if their gadget exceeds a quota
     or is marked as spam by the container. A container may optionally support
     sending lifecycle events to an application developer's site by sending
     relevant query parameters to a URL endpoint. To receive these events, you
     can place one or more Link tags in your application's XML. Each Link tag
     has a rel and href attribute. The href attribute denotes the endpoint
     where event pings are sent. If the rel attribute is "opensocialevent",
     then all events are sent to that endpoint. If the rel attribute matches
     "opensocialevent.TYPE", then events of TYPE are sent to that endpoint. An
     optional method attribute can be set to POST or GET to specify how the
     request should be sent. The default is GET. 
     <figure>
      <preamble>Here are some examples:</preamble>
      <artwork xml:space="preserve">
&lt;Link rel="event" href="http://www.example.com/pingme" method="POST/&gt;
&lt;Link rel="event.addapp" href="http://www.example.com/add" /&gt;
&lt;Link rel="event.removeapp" href="http://www.example.com/remove" /&gt;
</artwork>
     </figure></t>
     <t>The following eventtype query parameter will always be sent to the
     endpoint. eventtype specifies the event type.</t>
     <t>Note that these requests will always be signed by the container, and
     your server should check that the signature is valid by using the OAuth
     algorithm for signature verification.</t>
     <t>Most events will have information about one or more OpenSocial ID
     values. These id values are passed as one or more id attributes. Note that
     a single ping may aggregate a number of events by specifying many id
     values.</t>
     <t>The following event types are defined. Container custom events should
     be designated with a domainname prefix to avoid namespace collisions. 
     <texttable>
      <ttcol align="left">Event</ttcol>
      <ttcol align="left">Description</ttcol>
      <c>addapp</c>
      <c>id attribute identifies users who have installed the app. from
      attribute designates how the user added this app. Values are "invite",
      "gallery", "external". Optional.</c>
      <c>removeapp</c>
      <c>id attribute identifies users who have removed the app.</c>
      <c>app</c>
      <c>action attribute designates the action performed on the app. Values
      are "enabled", "disabled", and "approved". reason attribute identifies
      the reason for the action. Values are "policy", "quota", "maintenance".
      Optional.</c>
      <c>title</c>
      <c>id attribute indicates users who have been invited. from_id attribute
      indicates the user who sent the invitation.</c>
     </texttable></t>
    </section>
    <section title="RESTful API">
     <t>When is an OpenSocial application not just a gadget? When it has a
     backend server that talks directly to the container, of course! The 
     <xref target="RESTful Protocol Specification" /> defines a way for servers,
     mobile devices, and desktop computers to interact with an OpenSocial
     container without requiring JavaScript or direct user interaction.
     Applications can update activities, send messages, and fetch OpenSocial
     data in the background using either an AtomPub, XML, or JSON REST
     service.</t>
    </section>
   </section>
   <section title="API Patterns">
    <t>This section describes several common patterns in the OpenSocial API.
    Understanding these concepts should help you wade through the API
    Reference.</t>
    <section title="Making Request">
     <t>The OpenSocial API queries the container asynchronously for most of its
     calls, which is why most OpenSocial methods don't directly return data,
     but rather allow you to specify a callback that will be executed when the
     server's response is ready. Of course, making lots of asynchronous
     requests isn't always ideal, so the API allows for batch requests to allow
     developers to ask for many pieces of information at once. A developer can
     create an opensocial.DataRequest and add several individual request
     objects to it. Upon receiving the DataRequest, the container can process
     each request optimally and return the results of each operation as a
     batched result object. Containers must preserve the semantics of executing
     requests in serial order, though. A request that contains a write and then
     a read must return the newly written data, while a request that contains a
     read and then a write must return the data that was present before the
     write took place.</t>
    </section>
    <section title="Capabilities Discovery"
             anchor="capabilities">
     <t>The gadgets and OpenSocial specifications determine the common APIs
     that all containers will support, but there are cases where a certain
     method or a profile field will be offered as an extension in some
     containers. To help developers write gadgets that can take advantage of
     these extensions, yet degrade gracefully in their absence, these APIs
     include gadgets.util.hasFeature and opensocial.Environment.supportsField
     methods to query the container at runtime and determine which features are
     available.</t>
     <t>Of course, OpenSocial has 
     <xref target="compliance">compliance rules</xref> that must be adhered to
     by containers wishing to extend the API.</t>
    </section>
    <section title="Action Requests and Permissions">
     <t>There are cases where a gadget may wish to perform an action that needs
     approval by the user or mediation by the container. OpenSocial supports
     "request" features that allow the container to decide how to handle the
     interaction with the user. Functions like
     opensocial.requestCreateActivity, and opensocial.requestPermission allow
     the container to inject its own policy decisions into the gadget execution
     flow and notify the gadget of the result. Under this specification, it is
     equally valid for a container to defer to the user, always approve, always
     deny, or use any other method to determine responses to request calls.
     Additionally, this allows the container to enforce UI flows in a safe and
     integrated way.</t>
    </section>
    <section title="Profile Fields">
     <t>User profiles are different from container to container. On
     consumer-oriented containers, applications may be interested in a user's
     idea of a perfect first date, but this may not be appropriate for
     business-oriented containers. This is why OpenSocial allows containers to
     extend Person objects with arbitrary fields: to match the feel and uses of
     each container site. Profile fields are therefore obtained through
     Person.getField calls rather than having hardcoded getters and setters for
     each property. See the Compliance and Capabilities discovery sections for
     more information about how containers can add additional data to the API,
     and how applications can determine which fields are available for use.</t>
    </section>
    <section title="Fetching Content From Remote Servers">
     <t>Gadgets can use the gadgets.io.makeRequest method to pull HTML, JSON,
     XML, and ATOM data from remote servers.</t>
     <t>The gadgets.io.makeRequest call can also be used to pass data from
     gadgets back to application servers in a way that cannot be spoofed. The
     container is expected to mediate communications from the gadget to the
     application server (e.g. ilike.com). Therefore trusted content fetching
     has two main steps: [1] the gadget contacts the container, and [2] the
     container contacts the application server. 
     <list style="numbers">
      <t>When the gadget contacts the container, the container needs to be able
      to validate any parameters it knows about: the viewer id, the owner id
      (if known), and the application id. Validating these parameters is an
      implementation detail that may vary between containers. For example,
      Orkut uses an encrypted token passed in the document fragment of the
      gadget URL.</t>
      <t>When the container contacts the app server, the app server needs to be
      able to validate that the parameters really came from the container (and
      were not forged by some other entity). OpenSocial uses OAuth's parameter
      signing algorithm Note that most of the functionality in the OAuth spec,
      including token exchange, is not required; OpenSocial only plans to use
      the parameter signing piece of the spec (including timestamp and nonce).
      OpenSocial permits the HMAC-SHA1 method (except that the key is a shared
      secret between container and app, not a concatenation of tokens as
      specified in section 9.2 of the OAuth spec) and the RSA-SHA1 method.
      HMAC-SHA1 is faster and easier to implement, but it requires more
      coordination than RSA-SHA1.</t>
     </list>If a user needs to fetch data from a protected resource, the
     makeRequest call supports full 
     <xref target="OAuth Core 1.0">OAuth authentication</xref> via a container
     proxy. Gadgets can now access protected web services without requiring the
     user to share their password with the gadget, allowing for sophisticated
     and secure integration with web APIs that support OAuth.</t>
    </section>
    <section title="Caching">
     <t>When gadgets call makeRequest, the calls may be cached. This is great
     for reducing the load that your servers have to be able to handle, since
     OpenSocial applications may have millions of users, each requesting data
     from your server. However, this caching of makeRequest calls can wind up
     displaying old data to users if the content returned by your server
     changes often.</t>
     <t>If you expect the content at the URL you are fetching to change
     frequently, you may want to work around the automatic caching with a more
     finely grained method. You can define a refreshInterval parameter, which
     should be specified as the number of seconds that should elapse before the
     makeRequest call requests content from your servers again. For example,
     specifying 10 will mean that the container would only query the supplied
     URL once every 10 seconds, no matter how many people are using the
     application. Specifying 0 will query the server each time the function is
     called, effectively bypassing the cached version.</t>
    </section>
   </section>
  </section>
  <section title="API Reference"
           anchor="JavaScript API Reference">
   <section title="Using the API Reference">
    <t>The JavaScript API reference is a complete listing of the methods and
    fields that OpenSocial requires, but some conventions are not immediately
    understandable. This section will explain some of the assumptions used in
    generating the API reference.</t>
    <section title="Virtual Typing">
     <t>JavaScript is not strongly typed, but in order to make the developer
     experience consistent, the APIs are defined as if JavaScript supported
     strongly typed data. Cases where a parameter or return value are defined
     as a certain type in the documentation indicate that this is the only type
     that can be provided or accepted for OpenSocial compatibility. Any
     exceptions to this rule will be directly documented in the reference.</t>
     <t>As an example, the getErrorCode method is defined in the JavaScript API
     reference as returning a value of the type opensocial.ResponseItem.Error,
     although in practice this value will be a normal JavaScript string.
     However, developers can be assured that in a compliant container, the
     string returned is one of the opensocial.ResponseItem.Error fields.</t>
     <t>Enumerations figure heavily into the OpenSocial API. Developers are
     permitted to reference an enum or use the enum's value directly. To avoid
     collisions related to extensibility, containers must ensure that the names
     and values for an enum match the ones defined in the spec and that custom
     values are namespaced appropriately. For example, an Orkut custom field
     named MY_PERSON_FIELD could have a name of
     Orkut.PersonField.MY_PERSON_FIELD and a value of "Orkut.myPersonField".
     See the 
     <xref target="compliance">Compliance</xref> and 
     <xref target="capabilities">Capabilities discovery</xref> sections for more
     information.</t>
    </section>
    <section title="Parameter Maps">
     <t>Many of the OpenSocial methods have a large number of optional
     parameters. JavaScript's lack of strong typing makes overloading difficult
     at best, and having functions with a large amount of parameters can be
     difficult to manage (especially for developers not using a nice IDE).
     OpenSocial uses the "object bag" approach to optional parameters: many
     methods take an additional opt_params parameter that takes the form of a
     map of parameter names to their corresponding values.</t>
     <t>For each method which uses an opt_params map the spec defines all of
     the valid fields that will be read out of the map by the container. These
     fields have defined types as discussed in the Virtual typing section. If a
     developer adds an invalid value for a field in the map the container
     should return the BAD_REQUEST error code.</t>
    </section>
   </section>
   <section title="Lightweight JavaScript API"
            anchor="LightweightJSAPI">
    <section title="Summary">
     <t>The Lightweight Javascript API, or OS Lite, is more natural to
     JavaScript developers and more succinct for creating OpenSocial gadgets
     than the existing JS APIs. It relies on the existing JSON-RPC protocol
     handlers, and is marked by the use of simple JSON objects as input and
     output. Note: this implementation follows the JSON-RPC spec 1:1, but could
     also be implemented over REST.</t>
     <t>For compatibility purposes, the existing JS APIs are still in place,
     and we may consider deprecating them in the 1.0 timeframe if developers
     move to these new APIs.</t>
     <section title="Highlights">
      <list style="symbols">
       <t>Introduces standard method signature for data requests - JSON in,
       JSON out</t>
       <t>Input and output parameters match JSON-RPC calls 1:1 and share
       documentation</t>
       <t>Data requests look like functions on "service" objects, e.g.,
       osapi.people.get(), instead of
       opensocial.DataRequest.newXXXRequest()</t>
       <t>Data requests can be called individually or as part of a batch</t>
       <t>Batch calls are designed for call chaining. The newBatch() call
       returns the batch, as does add, so that you can succinctly add more
       requests to the batch and execute it.</t>
       <t>Located in the osapi namespace</t>
      </list>
     </section>
     <section title="Examples">
      <figure>
       <preamble>A Person request, the most basic example:</preamble>
       <artwork xml:space="preserve">
osapi.people.getViewer().execute(function(result) {
  if (!result.error) {
    alert('Your name is ' + result.name + '!');
  }
});
</artwork>
      </figure>
      <figure>
       <preamble>A Person request with a JSON request parameter object
       specifying which fields to retrieve:</preamble>
       <artwork xml:space="preserve">
osapi.people.getViewer({fields: ['name', 'birthday']}).execute(function(result) {
  if (!result.error) {
    alert('Your name is ' + result.name + '!');
    alert('Your birthday is ' + result.birthday + '!');
  }
});
</artwork>
      </figure>
      <figure>
       <preamble>Batch request to retrieve a Person and Activities:</preamble>
       <artwork xml:space="preserve">
var batch = osapi.newBatch().
    add("viewer", osapi.people.getViewer()).
    add('activities', osapi.activities.get({ userId : '@viewer', groupId : '@self'})).
batch.execute(function(result) {
  if (!result.error) {
    alert('Hi, ' + result.viewer.name + '!');
    alert('You have ' + result.activities.length + ' activities.');
  }
});
</artwork>
      </figure>
     </section>
    </section>
    <section title="Detailed Description">
     <t>A container MUST emit the OS Lite JavaScript libraries and data files
     required by the libraries if an application includes &lt;Require
     feature="osapi"/&gt; in the ModulePrefs section of the gadget XML file.
     The container SHOULD emit the OS Lite JavaScript libraries and data files
     required by the libraries if an application optionally requests the
     feature by including &lt;Optional feature="osapi"/&gt; in the ModulePrefs
     of the gadget XML file.</t>
     <t>The services available on the client are determined by the server from
     which the JavaScript is delivered. The server SHOULD generate service
     methods for all available services. Developers wanting to write gadgets
     safely can test for the existence of a service and method before making
     their call.</t>
     <figure>
      <preamble>Example:</preamble>
      <artwork xml:space="preserve">
if (osapi.people &amp;&amp; osapi.people.getViewer) {
  osapi.people.getViewer().execute(function(result) {
    if (!result.error) {
      alert('Your name is ' + result.name + '!');
    }
  });
}
</artwork>
     </figure>
     <section title="Service Objects">
      <section title="osapi.people"
               anchor="osapi.people">
       <t>Service object with functions that map to the 
       <eref target="./RPC-Protocol.xml#People">JSON-RPC people
       endpoint</eref>.</t>
       <section title="Method Details">
        <section title="get"
                 anchor="osapi.people.get">
         <t>&lt;static&gt; Type: {
         <xref target="osapi.Request">osapi.Request</xref> }
         osapi.people.get(params)</t>
         <t>Description: Builds a request to retrieve information from the
         JSON-RPC People service. When no parameter is specified, the server
         defaults, { userId : @me, groupId : @self}, will be used and the
         viewer's information will be returned.</t>
         <t>Parameters: 
         <texttable>
          <ttcol>Name</ttcol>
          <ttcol>Type</ttcol>
          <ttcol>Description</ttcol>
          <c>params</c>
          <c>{ 
          <vspace blankLines='0' />AuthToken auth = HttpRequest.Authorization, 
          <vspace blankLines='0' />String or Array.&lt;String&gt; userId =
          "@me", 
          <vspace blankLines='0' />String groupId = "@self", 
          <vspace blankLines='0' />Array.&lt;String&gt; fields, 
          <vspace blankLines='0' />int count, 
          <vspace blankLines='0' />int startIndex, 
          <vspace blankLines='0' />int startPage 
          <vspace blankLines='0' />}</c>
          <c>An optional JSON object containing request parameters. See the get
          operation of the 
          <eref target="./RPC-Protocol.xml#People">JSON-RPC people
          endpoint</eref> for more details.</c>
         </texttable></t>
         <t>Returns: 
         <texttable>
          <ttcol>Type</ttcol>
          <ttcol>Description</ttcol>
          <c>
           <xref target="osapi.Request">osapi.Request</xref>
          </c>
          <c>A request to retrieve information from the 
          <eref target="./RPC-Protocol.xml#People">JSON-RPC People
          service</eref>.</c>
         </texttable></t>
        </section>
        <section title="getViewer"
                 anchor="osapi.people.getViewer">
         <t>&lt;static&gt; Type: {
         <xref target="osapi.Request">osapi.Request</xref> }
         osapi.people.getViewer(params)</t>
         <t>Description: A convenience over osapi.people.get() that builds a
         request to retrieve the viewer, as specified in the security token,
         from the people JSON-RPC service.</t>
         <t>Parameters: 
         <texttable>
          <ttcol>Name</ttcol>
          <ttcol>Type</ttcol>
          <ttcol>Description</ttcol>
          <c>params</c>
          <c>{ 
          <vspace blankLines='0' />AuthToken auth = HttpRequest.Authorization, 
          <vspace blankLines='0' />Array.&lt;String&gt; fields, 
          <vspace blankLines='0' />}</c>
          <c>An optional JSON object containing request parameters. See the get
          operation of the 
          <eref target="./RPC-Protocol.xml#People">JSON-RPC people
          endpoint</eref> for more details.</c>
         </texttable></t>
         <t>Returns: 
         <texttable>
          <ttcol>Type</ttcol>
          <ttcol>Description</ttcol>
          <c>
           <xref target="osapi.Request">osapi.Request</xref>
          </c>
          <c>A request to retrieve information from the 
          <eref target="./RPC-Protocol.xml#People">JSON-RPC People
          service</eref>.</c>
         </texttable></t>
        </section>
        <section title="getViewerFriends"
                 anchor="osapi.people.getViewerFriends">
         <t>&lt;static&gt; Type: {
         <xref target="osapi.Request">osapi.Request</xref> }
         osapi.people.getViewerFriends(params)</t>
         <t>Description: A convenience over osapi.people.get() that builds a
         request to retrieve the viewer's friends, as specified in the security
         token, from the people JSON-RPC service.</t>
         <t>Parameters: 
         <texttable>
          <ttcol>Name</ttcol>
          <ttcol>Type</ttcol>
          <ttcol>Description</ttcol>
          <c>params</c>
          <c>{ 
          <vspace blankLines='0' />AuthToken auth = HttpRequest.Authorization, 
          <vspace blankLines='0' />Array.&lt;String&gt; fields, 
          <vspace blankLines='0' />int count, 
          <vspace blankLines='0' />int startIndex, 
          <vspace blankLines='0' />int startPage 
          <vspace blankLines='0' />}</c>
          <c>An optional JSON object containing request parameters. See the get
          operation of the 
          <eref target="./RPC-Protocol.xml#People">JSON-RPC people
          endpoint</eref> for more details.</c>
         </texttable></t>
         <t>Returns: 
         <texttable>
          <ttcol>Type</ttcol>
          <ttcol>Description</ttcol>
          <c>
           <xref target="osapi.Request">osapi.Request</xref>
          </c>
          <c>A request to retrieve information from the 
          <eref target="./RPC-Protocol.xml#People">JSON-RPC People
          service</eref>.</c>
         </texttable></t>
        </section>
        <section title="getOwner"
                 anchor="osapi.people.getOwner">
         <t>&lt;static&gt; Type: {
         <xref target="osapi.Request">osapi.Request</xref> }
         osapi.people.get(params)</t>
         <t>Description: A convenience over osapi.people.get() that builds a
         request to retrieve the owner, as specified in the security token,
         from the people JSON-RPC service.</t>
         <t>Parameters: 
         <texttable>
          <ttcol>Name</ttcol>
          <ttcol>Type</ttcol>
          <ttcol>Description</ttcol>
          <c>params</c>
          <c>{ 
          <vspace blankLines='0' />AuthToken auth = HttpRequest.Authorization, 
          <vspace blankLines='0' />Array.&lt;String&gt; fields, 
          <vspace blankLines='0' />}</c>
          <c>An optional JSON object containing request parameters. See the get
          operation of the 
          <eref target="./RPC-Protocol.xml#People">JSON-RPC people
          endpoint</eref> for more details.</c>
         </texttable></t>
         <t>Returns: 
         <texttable>
          <ttcol>Type</ttcol>
          <ttcol>Description</ttcol>
          <c>
           <xref target="osapi.Request">osapi.Request</xref>
          </c>
          <c>A request to retrieve information from the 
          <eref target="./RPC-Protocol.xml#People">JSON-RPC People
          service</eref>.</c>
         </texttable></t>
        </section>
        <section title="getOwnerFriends"
                 anchor="osapi.people.getOwnerFriends">
         <t>&lt;static&gt; Type: {
         <xref target="osapi.Request">osapi.Request</xref> }
         osapi.people.get(params)</t>
         <t>Description: A convenience over osapi.people.get() that builds a
         request to retrieve the owner's friends, as specified in the security
         token, from the people JSON-RPC service.</t>
         <t>Parameters: 
         <texttable>
          <ttcol>Name</ttcol>
          <ttcol>Type</ttcol>
          <ttcol>Description</ttcol>
          <c>params</c>
          <c>{ 
          <vspace blankLines='0' />AuthToken auth = HttpRequest.Authorization, 
          <vspace blankLines='0' />Array.&lt;String&gt; fields, 
          <vspace blankLines='0' />int count, 
          <vspace blankLines='0' />int startIndex, 
          <vspace blankLines='0' />int startPage 
          <vspace blankLines='0' />}</c>
          <c>An optional JSON object containing request parameters. See the get
          operation of the 
          <eref target="./RPC-Protocol.xml#People">JSON-RPC people
          endpoint</eref> for more details.</c>
         </texttable></t>
         <t>Returns: 
         <texttable>
          <ttcol>Type</ttcol>
          <ttcol>Description</ttcol>
          <c>
           <xref target="osapi.Request">osapi.Request</xref>
          </c>
          <c>A request to retrieve information from the 
          <eref target="./RPC-Protocol.xml#People">JSON-RPC People
          service</eref>.</c>
         </texttable></t>
        </section>
       </section>
       <section title="Examples">
        <figure>
         <preamble>A simple example to request the owner's friends:</preamble>
         <artwork xml:space="preserve">
osapi.people.get({userId: '@owner', groupId: '@friends'}).execute(function(ownerFriends) {
  if (!result.error) {
    alert('You have ' + ownerFriends.length + ' friends');
  }
});
</artwork>
        </figure>
        <figure>
         <preamble>An example that illustrates all available request
         parameters:</preamble>
         <artwork xml:space="preserve">
var params = {
    auth: {"default" : null, "type" : "AuthToken"},
    userId: "@owner", 
    groupId: "@friends",
    fields: "@all",
    count: 10,
    startIndex: 0, 
    startPage: 0
};
osapi.people.get(params).execute(function(ownerFriends) {
  if (!result.error) {
    alert('You have ' + ownerFriends.length + ' friends');
  }
});
</artwork>
        </figure>
       </section>
      </section>
      <section title="osapi.activities"
               anchor="osapi.activities">
       <t>Service object with functions that map to the 
       <eref target="./RPC-Protocol.xml#Activities">JSON-RPC activities
       endpoint</eref>.</t>
       <section title="Method Details">
        <section title="get"
                 anchor="osapi.activities.get">
         <t>&lt;static&gt; Type: {
         <xref target="osapi.Request">osapi.Request</xref> }
         osapi.activities.get(params)</t>
         <t>Description: Builds a request to retrieve activities from the
         Activities JSON-RPC service.</t>
         <t>Parameters: 
         <texttable>
          <ttcol>Name</ttcol>
          <ttcol>Type</ttcol>
          <ttcol>Description</ttcol>
          <c>params</c>
          <c>{ 
          <vspace blankLines='0' />AuthToken auth = HttpRequest.Authorization, 
          <vspace blankLines='0' />String or Array.&lt;String&gt; userId =
          "@me", 
          <vspace blankLines='0' />String groupId = "@self", 
          <vspace blankLines='0' />String appId = auth.AppId, 
          <vspace blankLines='0' />Array.&lt;String&gt; activityIds = [], 
          <vspace blankLines='0' />Array.&lt;String&gt; fields, 
          <vspace blankLines='0' />int count, 
          <vspace blankLines='0' />int startIndex, 
          <vspace blankLines='0' />int startPage 
          <vspace blankLines='0' />}</c>
          <c>An optional JSON object containing request parameters. See the get
          operation of the 
          <eref target="./RPC-Protocol.xml#Activities">JSON-RPC Activities
          service</eref> for more details.</c>
         </texttable></t>
         <t>Returns: 
         <texttable>
          <ttcol>Type</ttcol>
          <ttcol>Description</ttcol>
          <c>
           <xref target="osapi.Request">osapi.Request</xref>
          </c>
          <c>A request to retrieve information from the 
          <eref target="./RPC-Protocol.xml#Activities">JSON-RPC Activities
          service</eref>.</c>
         </texttable></t>
        </section>
        <section title="create"
                 anchor="osapi.activities.create">
         <t>&lt;static&gt; Type: {
         <xref target="osapi.Request">osapi.Request</xref> }
         osapi.activities.get(params)</t>
         <t>Description: Builds a request to create an activity using the
         Activities JSON-RPC service.</t>
         <t>Parameters: 
         <texttable>
          <ttcol>Name</ttcol>
          <ttcol>Type</ttcol>
          <ttcol>Description</ttcol>
          <c>params</c>
          <c>{ 
          <vspace blankLines='0' />AuthToken auth = HttpRequest.Authorization, 
          <vspace blankLines='0' />String or Array.&lt;String&gt; userId =
          "@me", 
          <vspace blankLines='0' />String groupId = "@self", 
          <vspace blankLines='0' />String appId = auth.AppId, 
          <vspace blankLines='0' />opensocial.Activity activity, 
          <vspace blankLines='0' />}</c>
          <c>An optional JSON object containing request parameters. See the
          create operation of the 
          <eref target="./RPC-Protocol.xml#Activities">JSON-RPC Activities
          service</eref> for more details.</c>
         </texttable></t>
         <t>Returns: 
         <texttable>
          <ttcol>Type</ttcol>
          <ttcol>Description</ttcol>
          <c>
           <xref target="osapi.Request">osapi.Request</xref>
          </c>
          <c>A request to retrieve information from the 
          <eref target="./RPC-Protocol.xml#Activities">JSON-RPC Activities
          service</eref>.</c>
         </texttable></t>
        </section>
       </section>
       <section title="Examples">
        <figure>
         <preamble>A simple example to retrieve the activities of the viewer's
         friends:</preamble>
         <artwork xml:space="preserve">
osapi.activities.get({userId: '@viewer', groupId: '@friends', count: 20}).execute(myCallback);
</artwork>
        </figure>
        <figure>
         <preamble>An example illustrating all available request parameters for
         osapi.activites.get():</preamble>
         <artwork xml:space="preserve">
var params = {
    auth: {"default" : null, "type" : "AuthToken"},
    userId: "@me", 
    groupId: "@self",
    appId: "XXXXXXX",
    activityIds = ["YYYYYYY", "ZZZZZZZ"],
    fields: "@all",
    count: 10,
    startIndex: 0, 
    startPage: 0
};
osapi.activities.get(params).execute(myCallback);
</artwork>
        </figure>
        <figure>
         <preamble>A simple example to create an activity for the
         viewer:</preamble>
         <artwork xml:space="preserve">
osapi.activities.create({userId: '@viewer', activity: {title: 'Hello!', url: 'http://mysite.com'}}).execute(myCallback);
</artwork>
        </figure>
        <figure>
         <preamble>An example illustrating all available request parameters for
         osapi.activites.create():</preamble>
         <artwork xml:space="preserve">
var params = {
    auth: {"default" : null, "type" : "AuthToken"},
    userId: "@viewer", 
    groupId: "@self",
    appId: "XXXXXXX",
    activity: {title: 'Hello!', url: 'http://mysite.com'}
};
osapi.activities.create(params).execute(myCallback);
</artwork>
        </figure>
       </section>
      </section>
      <section title="osapi.appdata"
               anchor="osapi.appdata">
       <t>Service object with functions that map to the 
       <eref target="./RPC-Protocol.xml#AppData">JSON-RPC app data
       endpoint</eref>.</t>
       <section title="Method Details">
        <section title="get"
                 anchor="osapi.appdata.get">
         <t>&lt;static&gt; Type: {
         <xref target="osapi.Request">osapi.Request</xref> }
         osapi.appdata.get(params)</t>
         <t>Description: Builds a request to retrieve data from the AppData
         JSON-RPC service.</t>
         <t>Parameters: 
         <texttable>
          <ttcol>Name</ttcol>
          <ttcol>Type</ttcol>
          <ttcol>Description</ttcol>
          <c>params</c>
          <c>{ 
          <vspace blankLines='0' />AuthToken auth = HttpRequest.Authorization, 
          <vspace blankLines='0' />String or Array.&lt;String&gt; userId =
          "@me", 
          <vspace blankLines='0' />String groupId = "@self", 
          <vspace blankLines='0' />String appId = auth.AppId, 
          <vspace blankLines='0' />Array.&lt;String&gt; keys, 
          <vspace blankLines='0' />}</c>
          <c>An optional JSON object containing request parameters. See the get
          operation of the 
          <eref target="./RPC-Protocol.xml#AppData">JSON-RPC AppData
          service</eref> for more details.</c>
         </texttable></t>
         <t>Returns: 
         <texttable>
          <ttcol>Type</ttcol>
          <ttcol>Description</ttcol>
          <c>
           <xref target="osapi.Request">osapi.Request</xref>
          </c>
          <c>A request to retrieve information from the 
          <eref target="./RPC-Protocol.xml#AppData">JSON-RPC AppData
          service</eref>.</c>
         </texttable></t>
        </section>
        <section title="update"
                 anchor="osapi.appdata.update">
         <t>&lt;static&gt; Type: {
         <xref target="osapi.Request">osapi.Request</xref> }
         osapi.appdata.update(params)</t>
         <t>Description: Builds a request to create or update data from the
         AppData JSON-RPC service.</t>
         <t>Parameters: 
         <texttable>
          <ttcol>Name</ttcol>
          <ttcol>Type</ttcol>
          <ttcol>Description</ttcol>
          <c>params</c>
          <c>{ 
          <vspace blankLines='0' />AuthToken auth = HttpRequest.Authorization, 
          <vspace blankLines='0' />String or Array.&lt;String&gt; userId =
          "@me", 
          <vspace blankLines='0' />String groupId = "@self", 
          <vspace blankLines='0' />String appId = auth.AppId, 
          <vspace blankLines='0' />Map.&lt;String, String&gt; data, 
          <vspace blankLines='0' />}</c>
          <c>An optional JSON object containing request parameters. See the
          update operation of the 
          <eref target="./RPC-Protocol.xml#AppData">JSON-RPC AppData
          service</eref> for more details.</c>
         </texttable></t>
         <t>Returns: 
         <texttable>
          <ttcol>Type</ttcol>
          <ttcol>Description</ttcol>
          <c>
           <xref target="osapi.Request">osapi.Request</xref>
          </c>
          <c>A request to retrieve information from the 
          <eref target="./RPC-Protocol.xml#AppData">JSON-RPC AppData
          service</eref>.</c>
         </texttable></t>
        </section>
        <section title="delete"
                 anchor="osapi.appdata.delete">
         <t>&lt;static&gt; Type: {
         <xref target="osapi.Request">osapi.Request</xref> }
         osapi.appdata.delete(params)</t>
         <t>Description: Builds a request to delete data from the AppData
         JSON-RPC service.</t>
         <t>Parameters: 
         <texttable>
          <ttcol>Name</ttcol>
          <ttcol>Type</ttcol>
          <ttcol>Description</ttcol>
          <c>params</c>
          <c>{ 
          <vspace blankLines='0' />AuthToken auth = HttpRequest.Authorization, 
          <vspace blankLines='0' />String or Array.&lt;String&gt; userId =
          "@me", 
          <vspace blankLines='0' />String groupId = "@self", 
          <vspace blankLines='0' />String appId = auth.AppId, 
          <vspace blankLines='0' />Array.&lt;String&gt; keys, 
          <vspace blankLines='0' />}</c>
          <c>An optional JSON object containing request parameters. See the
          delete operation of the 
          <eref target="./RPC-Protocol.xml#AppData">JSON-RPC AppData
          service</eref> for more details.</c>
         </texttable></t>
         <t>Returns: 
         <texttable>
          <ttcol>Type</ttcol>
          <ttcol>Description</ttcol>
          <c>
           <xref target="osapi.Request">osapi.Request</xref>
          </c>
          <c>A request to retrieve information from the 
          <eref target="./RPC-Protocol.xml#AppData">JSON-RPC AppData
          service</eref>.</c>
         </texttable></t>
        </section>
       </section>
       <section title="Examples">
        <figure>
         <preamble>A simple example to retrieve, update, and delete a piece of
         app data:</preamble>
         <artwork xml:space="preserve">
osapi.appdata.get({userId: '@viewer', groupId: '@friends', keys: ['gifts']}).execute(myGetCallback);
osapi.appdata.update({userId: '@viewer', data: {gifts: 'a crazed monkey'}}).execute(myUpdateCallback);
osapi.appdata.delete({keys: ['gifts']}).execute(myDeleteCallback)
</artwork>
        </figure>
        <figure>
         <preamble>An example illustrating all available request parameters for
         osapi.appdata.get():</preamble>
         <artwork xml:space="preserve">
var getParams = {
    auth: {"default" : null, "type" : "AuthToken"},
    userId: "@viewer", 
    groupId: "@friends",
    appId: "XXXXXXX",
    keys: ['gifts', 'wishlist']
};
osapi.appdata.get(getParams).execute(myGetCallback);
</artwork>
        </figure>
        <figure>
         <preamble>An example illustrating all available request parameters for
         osapi.appdata.update():</preamble>
         <artwork xml:space="preserve">
var updateParams = {
    auth: {"default" : null, "type" : "AuthToken"},
    userId: "@viewer", 
    groupId: "@friends",
    appId: "XXXXXXX",
    data: {gifts: 'a crazed monkey', wishlist: 'a banana peel'}
};
osapi.appdata.update(updateParams).execute(myUpdateCallback);
</artwork>
        </figure>
        <figure>
         <preamble>An example illustrating all available request parameters for
         osapi.appdata.delete():</preamble>
         <artwork xml:space="preserve">
var deleteParams = {
    auth: {"default" : null, "type" : "AuthToken"},
    userId: "@viewer", 
    groupId: "@friends",
    appId: "XXXXXXX",
    keys: ['gifts', 'wishlist']
};
osapi.appdata.delete(deleteParams).execute(myDeleteCallback)
</artwork>
        </figure>
       </section>
      </section>
      <section title="osapi.messages"
               anchor="osapi.messages">
       <t>Service object with functions that map to the 
       <eref target="./RPC-Protocol.xml#Messages">JSON-RPC Messages
       endpoint</eref>.</t>
       <section title="Method Details">
        <section title="send"
                 anchor="osapi.messages.send">
         <t>&lt;static&gt; Type: {
         <xref target="osapi.Request">osapi.Request</xref> }
         osapi.messages.send(params)</t>
         <t>Description: Builds a request to send a message from the Messages
         JSON-RPC service.</t>
         <t>Parameters: 
         <texttable>
          <ttcol>Name</ttcol>
          <ttcol>Type</ttcol>
          <ttcol>Description</ttcol>
          <c>params</c>
          <c>{ 
          <vspace blankLines='0' />AuthToken auth = HttpRequest.Authorization, 
          <vspace blankLines='0' />String userId = "@me", 
          <vspace blankLines='0' />opensocial.Message message 
          <vspace blankLines='0' />}</c>
          <c>An optional JSON object containing request parameters. See the
          send operation of the 
          <eref target="./RPC-Protocol.xml#Messages">JSON-RPC Messages
          service</eref> for more details.</c>
         </texttable></t>
         <t>Returns: 
         <texttable>
          <ttcol>Type</ttcol>
          <ttcol>Description</ttcol>
          <c>
           <xref target="osapi.Request">osapi.Request</xref>
          </c>
          <c>A request to retrieve information from the 
          <eref target="./RPC-Protocol.xml#Messages">JSON-RPC Messages
          service</eref>.</c>
         </texttable></t>
        </section>
       </section>
       <section title="Examples">
        <figure>
         <preamble>An example illustrating how to send a message using
         osapi.messages.send():</preamble>
         <artwork xml:space="preserve">
var params = {
    auth: {"default" : null, "type" : "AuthToken"},
    message: {
        "recipients" : ["example.org:AD38B3886625AAF", "example.org:997638BAA6F25AD"],
        "title" : "You have a message from Joe",
        "body" : "Some content",
        "type" : "EMAIL"
    },
};
osapi.appdata.delete(deleteParams).execute(myDeleteCallback)
</artwork>
        </figure>
       </section>
      </section>
      <section title="osapi.http"
               anchor="osapi.http">
       <t>Service object for making HTTP requests to third party servers. This
       is not a JSON-RPC endpoint, but a third party web service.</t>
       <section title="Method Details">
        <section title="head"
                 anchor="osapi.http.head">
         <t>&lt;static&gt; Type: {
         <xref target="osapi.Request">osapi.Request</xref> }
         osapi.http.head(params)</t>
         <t>Description: Creates a HEAD request to an arbitrary URL.</t>
         <t>Parameters: 
         <texttable>
          <ttcol>Name</ttcol>
          <ttcol>Type</ttcol>
          <ttcol>Description</ttcol>
          <c>url</c>
          <c>String</c>
          <c>The URL where the content is located</c>
          <c>params</c>
          <c>{ 
          <vspace blankLines='0' />Map.&lt;String, Array.&lt;String&gt;&gt;
          headers, 
          <vspace blankLines='0' />String format = "json", 
          <vspace blankLines='0' />int refreshInterval, 
          <vspace blankLines='0' />String authz = "none", 
          <vspace blankLines='0' />Boolean sign_viewer = true, 
          <vspace blankLines='0' />Boolean sign_owner = true, 
          <vspace blankLines='0' />String oauth_service_name = "", 
          <vspace blankLines='0' />String oauth_token_name = "", 
          <vspace blankLines='0' />String oauth_request_token, 
          <vspace blankLines='0' />String oauth_request_token_secret, 
          <vspace blankLines='0' />String oauth_use_token, 
          <vspace blankLines='0' />}</c>
          <c>Takes an optional parameter that is a JSON object containing
          parameters and values similar to the attributes of the 
          <eref target="./OpenSocial-Data-Pipelining.xml#HttpRequest">
          &lt;os:HttpRequest&gt;</eref> tag.</c>
         </texttable></t>
         <t>Returns: 
         <texttable>
          <ttcol>Type</ttcol>
          <ttcol>Description</ttcol>
          <c>
           <xref target="osapi.Request">osapi.Request</xref>
          </c>
          <c>A request to retrieve information an arbitrary URL.</c>
         </texttable></t>
        </section>
        <section title="get"
                 anchor="osapi.http.get">
         <t>&lt;static&gt; Type: {
         <xref target="osapi.Request">osapi.Request</xref> }
         osapi.http.get(params)</t>
         <t>Description: Creates a GET request to an arbitrary URL.</t>
         <t>Parameters: 
         <texttable>
          <ttcol>Name</ttcol>
          <ttcol>Type</ttcol>
          <ttcol>Description</ttcol>
          <c>url</c>
          <c>String</c>
          <c>The URL where the content is located</c>
          <c>params</c>
          <c>{ 
          <vspace blankLines='0' />Map.&lt;String, Array.&lt;String&gt;&gt;
          headers, 
          <vspace blankLines='0' />String format = "json", 
          <vspace blankLines='0' />int refreshInterval, 
          <vspace blankLines='0' />String authz = "none", 
          <vspace blankLines='0' />Boolean sign_viewer = true, 
          <vspace blankLines='0' />Boolean sign_owner = true, 
          <vspace blankLines='0' />String oauth_service_name = "", 
          <vspace blankLines='0' />String oauth_token_name = "", 
          <vspace blankLines='0' />String oauth_request_token, 
          <vspace blankLines='0' />String oauth_request_token_secret, 
          <vspace blankLines='0' />String oauth_use_token, 
          <vspace blankLines='0' />}</c>
          <c>Takes an optional parameter that is a JSON object containing
          parameters and values similar to the attributes of the 
          <eref target="./OpenSocial-Data-Pipelining.xml#HttpRequest">
          &lt;os:HttpRequest&gt;</eref> tag.</c>
         </texttable></t>
         <t>Returns: 
         <texttable>
          <ttcol>Type</ttcol>
          <ttcol>Description</ttcol>
          <c>
           <xref target="osapi.Request">osapi.Request</xref>
          </c>
          <c>A request to retrieve information an arbitrary URL.</c>
         </texttable></t>
        </section>
        <section title="put"
                 anchor="osapi.http.put">
         <t>&lt;static&gt; Type: {
         <xref target="osapi.Request">osapi.Request</xref> }
         osapi.http.put(params)</t>
         <t>Description: Creates a PUT request to an arbitrary URL.</t>
         <t>Parameters: 
         <texttable>
          <ttcol>Name</ttcol>
          <ttcol>Type</ttcol>
          <ttcol>Description</ttcol>
          <c>url</c>
          <c>String</c>
          <c>The URL where the content is located</c>
          <c>params</c>
          <c>{ 
          <vspace blankLines='0' />Map.&lt;String, Array.&lt;String&gt;&gt;
          headers, 
          <vspace blankLines='0' />String body, 
          <vspace blankLines='0' />String format = "json", 
          <vspace blankLines='0' />int refreshInterval, 
          <vspace blankLines='0' />String authz = "none", 
          <vspace blankLines='0' />Boolean sign_viewer = true, 
          <vspace blankLines='0' />Boolean sign_owner = true, 
          <vspace blankLines='0' />String oauth_service_name = "", 
          <vspace blankLines='0' />String oauth_token_name = "", 
          <vspace blankLines='0' />String oauth_request_token, 
          <vspace blankLines='0' />String oauth_request_token_secret, 
          <vspace blankLines='0' />String oauth_use_token, 
          <vspace blankLines='0' />}</c>
          <c>Takes an optional parameter that is a JSON object containing
          parameters and values similar to the attributes of the 
          <eref target="./OpenSocial-Data-Pipelining.xml#HttpRequest">
          &lt;os:HttpRequest&gt;</eref> tag.</c>
         </texttable></t>
         <t>Returns: 
         <texttable>
          <ttcol>Type</ttcol>
          <ttcol>Description</ttcol>
          <c>
           <xref target="osapi.Request">osapi.Request</xref>
          </c>
          <c>A request to retrieve information an arbitrary URL.</c>
         </texttable></t>
        </section>
        <section title="post"
                 anchor="osapi.http.post">
         <t>&lt;static&gt; Type: {
         <xref target="osapi.Request">osapi.Request</xref> }
         osapi.http.post(params)</t>
         <t>Description: Creates a POST request to an arbitrary URL.</t>
         <t>Parameters: 
         <texttable>
          <ttcol>Name</ttcol>
          <ttcol>Type</ttcol>
          <ttcol>Description</ttcol>
          <c>url</c>
          <c>String</c>
          <c>The URL where the content is located</c>
          <c>params</c>
          <c>{ 
          <vspace blankLines='0' />Map.&lt;String, Array.&lt;String&gt;&gt;
          headers, 
          <vspace blankLines='0' />String body, 
          <vspace blankLines='0' />String format = "json", 
          <vspace blankLines='0' />int refreshInterval, 
          <vspace blankLines='0' />String authz = "none", 
          <vspace blankLines='0' />Boolean sign_viewer = true, 
          <vspace blankLines='0' />Boolean sign_owner = true, 
          <vspace blankLines='0' />String oauth_service_name = "", 
          <vspace blankLines='0' />String oauth_token_name = "", 
          <vspace blankLines='0' />String oauth_request_token, 
          <vspace blankLines='0' />String oauth_request_token_secret, 
          <vspace blankLines='0' />String oauth_use_token, 
          <vspace blankLines='0' />}</c>
          <c>Takes an optional parameter that is a JSON object containing
          parameters and values similar to the attributes of the 
          <eref target="./OpenSocial-Data-Pipelining.xml#HttpRequest">
          &lt;os:HttpRequest&gt;</eref> tag.</c>
         </texttable></t>
         <t>Returns: 
         <texttable>
          <ttcol>Type</ttcol>
          <ttcol>Description</ttcol>
          <c>
           <xref target="osapi.Request">osapi.Request</xref>
          </c>
          <c>A request to retrieve information an arbitrary URL.</c>
         </texttable></t>
        </section>
        <section title="delete"
                 anchor="osapi.http.delete">
         <t>&lt;static&gt; Type: {
         <xref target="osapi.Request">osapi.Request</xref> }
         osapi.http.delete(params)</t>
         <t>Description: Creates a DELETE request to an arbitrary URL.</t>
         <t>Parameters: 
         <texttable>
          <ttcol>Name</ttcol>
          <ttcol>Type</ttcol>
          <ttcol>Description</ttcol>
          <c>url</c>
          <c>String</c>
          <c>The URL where the content is located</c>
          <c>params</c>
          <c>{ 
          <vspace blankLines='0' />Map.&lt;String, Array.&lt;String&gt;&gt;
          headers, 
          <vspace blankLines='0' />String format = "json", 
          <vspace blankLines='0' />int refreshInterval, 
          <vspace blankLines='0' />String authz = "none", 
          <vspace blankLines='0' />Boolean sign_viewer = true, 
          <vspace blankLines='0' />Boolean sign_owner = true, 
          <vspace blankLines='0' />String oauth_service_name = "", 
          <vspace blankLines='0' />String oauth_token_name = "", 
          <vspace blankLines='0' />String oauth_request_token, 
          <vspace blankLines='0' />String oauth_request_token_secret, 
          <vspace blankLines='0' />String oauth_use_token, 
          <vspace blankLines='0' />}</c>
          <c>Takes an optional parameter that is a JSON object containing
          parameters and values similar to the attributes of the 
          <eref target="./OpenSocial-Data-Pipelining.xml#HttpRequest">
          &lt;os:HttpRequest&gt;</eref> tag.</c>
         </texttable></t>
         <t>Returns: 
         <texttable>
          <ttcol>Type</ttcol>
          <ttcol>Description</ttcol>
          <c>
           <xref target="osapi.Request">osapi.Request</xref>
          </c>
          <c>A request to retrieve information an arbitrary URL.</c>
         </texttable></t>
        </section>
       </section>
       <section title="Examples">
        <figure>
         <preamble>Suppose a request to http://www.somephotosite.com/latest
         returns the following JSON:</preamble>
         <artwork xml:space="preserve">
{
  photos : [ "http://www.somephotosite.com/photos/1.jpg",
             "http://www.somephotosite.com/photos/2.jpg",
             "http://www.somephotosite.com/photos/3.jpg",
           ],
  lastUpdate : "Mon, 13 Apr 2009 23:17:04 GMT"
}
</artwork>
        </figure>
        <figure>
         <preamble>The data can be retrieved and accessed as
         follows:</preamble>
         <artwork xml:space="preserve">
osapi.http.get('http://www.somephotosite.com/latest').execute(function(result) {
  if (!result.error) {
    alert('There are ' + result.content.photos.length + ' new photos');
  }
});
</artwork>
        </figure>
        <figure>
         <preamble>An example illustrating some available request
         parameters:</preamble>
         <artwork xml:space="preserve">
var params = {
    'format': 'json',
    'headers': {'Content-Type': ['application/json;charset=utf-8'], "Accept-Language": ["en-us"]},
    'body': {'numResults': 100, theme: 'beach'},
    'authz': 'SIGNED',
};
osapi.http.post('http://www.somephotosite.com/prefs?uid=1234', params).execute(function(result) {
  if (!result.error) {
    alert('Request to update user preferences was successful');
  }
});
</artwork>
        </figure>
       </section>
      </section>
     </section>
     <section title="Service Requests">
      <section title="Single Request Objects"
               anchor="osapi.Request">
       <t>All methods of OS Lite service objects (e.g. osapi.people.get())
       return a JavaScript object representing the request. These objects MUST
       support the following method(s):</t>
       <section title="Method Details">
        <section title="execute"
                 anchor="osapi.Request.execute">
         <t>&lt;static&gt; osapi.Request.execute(callback)</t>
         <t>Description: Executes the service request. Takes a callback for
         response processing.</t>
         <t>Parameters: 
         <texttable>
          <ttcol>Name</ttcol>
          <ttcol>Type</ttcol>
          <ttcol>Description</ttcol>
          <c>callback</c>
          <c>Function</c>
          <c>A callback function to handle the response.</c>
         </texttable></t>
        </section>
       </section>
       <section title="Examples">
        <figure>
         <preamble>A simple example to request the owner's friends:</preamble>
         <artwork xml:space="preserve">
          osapi.people.get({userId: '@owner', groupId: '@friends'}).execute(function(ownerFriends) {
            if (!result.error) {
              alert('You have ' + ownerFriends.length + ' friends');
            }
          });
</artwork>
        </figure>
       </section>
      </section>
      <section title="Batch Request Objects"
               anchor="osapi.BatchRequest">
       <t>Service requests can be combined into a single batch request using
       the following methods:</t>
       <section title="Method Details">
        <section title="newBatch"
                 anchor="osapi.newBatch">
         <t>&lt;static&gt; Type: {
         <xref target="osapi.BatchRequest">osapi.BatchRequest</xref> }
         osapi.newBatch()</t>
         <t>Description: Creates a new batch request.</t>
         <t>Returns: 
         <texttable>
          <ttcol>Type</ttcol>
          <ttcol>Description</ttcol>
          <c>
           <xref target="osapi.BatchRequest">osapi.BatchRequest</xref>
          </c>
          <c>A new batch request.</c>
         </texttable></t>
        </section>
        <section title="add"
                 anchor="osapi.BatchRequest.add">
         <t>&lt;static&gt; Type: {
         <xref target="osapi.BatchRequest">osapi.BatchRequest</xref> }
         osapi.add(key, request)</t>
         <t>Description: Adds a service request to the batch associated with
         the specified key. A single batch request can contain both JSON-RPC
         calls (e.g. osapi.people.get()) and HTTP calls to third parties (e.g.
         osapi.http.get()).</t>
         <t>Parameters: 
         <texttable>
          <ttcol>Name</ttcol>
          <ttcol>Type</ttcol>
          <ttcol>Description</ttcol>
          <c>key</c>
          <c>String</c>
          <c>A key to access the result of the given request from the parameter
          sent to the callback function.</c>
          <c>request</c>
          <c>
           <xref target="osapi.Request">osapi.Request</xref>
          </c>
          <c>A request to add to the batch.</c>
         </texttable></t>
         <t>Returns: 
         <texttable>
          <ttcol>Type</ttcol>
          <ttcol>Description</ttcol>
          <c>
           <xref target="osapi.BatchRequest">osapi.BatchRequest</xref>
          </c>
          <c>A batch request containing the given request (and any previously
          added requests).</c>
         </texttable></t>
        </section>
        <section title="execute"
                 anchor="osapi.BatchRequest.execute">
         <t>&lt;static&gt; osapi.Request.execute(callback)</t>
         <t>Description: Executes all of the requests in the batch. Takes a
         callback for response processing, which is passed a JSON object
         mapping each request key to a JSON response object.</t>
         <t>Parameters: 
         <texttable>
          <ttcol>Name</ttcol>
          <ttcol>Type</ttcol>
          <ttcol>Description</ttcol>
          <c>callback</c>
          <c>Function</c>
          <c>A callback function to handle the response.</c>
         </texttable></t>
        </section>
       </section>
       <section title="Examples">
        <figure>
         <preamble>An example illustrating two requests batched
         together:</preamble>
         <artwork xml:space="preserve">
          var batch = osapi.newBatch().
             add("viewer", osapi.people.getViewer()).
             add('activities', osapi.activities.get({ userId : '@viewer', groupId : '@self'})).
          batch.execute(function(result) {
            if (!result.error) {
              alert('Hi, ' + result.viewer.name + '!');
              alert('You have ' + result.activities.length + ' activities.');
            }
          });
</artwork>
        </figure>
       </section>
      </section>
     </section>
     <section title="Error Handling">
      <t>The error handling works exactly as it does for the JSON-RPC
      interface, since this api is based on that protocol. The JSON object
      returned reflects any errors that occurred in the request. This breaks
      down into 3 types of errors:</t>
      <list style="symbols">
       <t>Network error, these return a top level error. For example, in the
       callback, the object passed will have an error object. 
       <figure>
        <preamble>Example:</preamble>
        <artwork xml:space="preserve">
osapi.people.get({userId: '@owner', groupId: '@friends'}).execute(function(ownerFriends) {
  if (ownerFriends.error) {
    alert('Error occurred: ' + error.message);
  } else {
    alert('You have ' + ownerFriends.length + ' friends');
  }
});
</artwork>
       </figure></t>
       <t>Application Error for Single Request 
       <t>In this case, a top-level error object is set. Note, this is just
       like the previous error case.</t>
       <figure>
        <preamble>Example:</preamble>
        <artwork xml:space="preserve">
osapi.people.get({userId: '@owner', groupId: '@friends'}).execute(function(ownerFriends) {
  if (ownerFriends.error) {
    alert('Error occurred: ' + error.message);
  } else {
    alert('You have ' + ownerFriends.length + ' friends');
  }
});
</artwork>
       </figure></t>
       <t>Application Error for a Batched Request. 
       <t>In this case, a top-level error is set, but results are still
       returned for all individual requests that succeeded, if any. The
       individual request that failed has an error set.</t>
       <t>Note that 'error' is reserved and may not be used</t>
       <list style="symbols">
        <t>as a key to batch.add()</t>
        <t>as a property of a JSON RPC batch response item. 
        <figure>
         <preamble>Example: Bailing out if there is any error in the
         batch:</preamble>
         <artwork xml:space="preserve">
var batch = osapi.newBatch().
    add("viewer", osapi.people.getViewer()).
    add('activities', osapi.activities.get({ userId : '@viewer', groupId : '@self'})).
batch.execute(function(result) {
  if (result.error) {
    alert("This batch had an error: " + error.message);
  } else {alert('Hi, ' + result.viewer.name + '!');
    alert('You have ' + result.activities.length + ' activities.');
  }
});
</artwork>
        </figure>
        <figure>
         <preamble>Example: Processing any sub requests in the batch that
         succeeded:</preamble>
         <artwork xml:space="preserve">
var batch = osapi.newBatch().
   add('v', osapi.people.getViewer()).
   add('vf', osapi.people.getViewerFriends());
batch.execute(function(result) {
 for (var name in result) {
   if (result.hasOwnProperty(name)) {
     if (result[name].error) {
       gadgets.log("Found an error: ", result[name].error.message);
     } else {
       gadgets.log("Got some data: ", result[name]);
     }
   }
 }
});
</artwork>
        </figure></t>
       </list></t>
      </list>
     </section>
    </section>
   </section>
   <section title="API Class Reference">
    <section title="opensocial"
             anchor="opensocial">
     <!-- ============================== class summary ========================== -->
     <t>Namespace for top-level people functions.</t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.ctor">
      <t>opensocial</t>
      <t></t>
     </section>
     <section title="Method Details">
      <section title="getEnvironment"
               anchor="opensocial.getEnvironment">
       <t>&lt;static&gt; Type: {
       <xref target="opensocial.Environment">opensocial.Environment</xref> }
       opensocial.getEnvironment()</t>
       <t>Description: Gets the current environment for this gadget. You can
       use the environment to make queries such as what profile fields and
       surfaces are supported by this container, what parameters were passed to
       the current gadget, and so on.</t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>
         <xref target="opensocial.Environment">opensocial.Environment</xref>
        </c>
        <c>The current 
        <xref target="opensocial.Environment">environment</xref> </c>
       </texttable></t>
      </section>
      <section title="hasPermission"
               anchor="opensocial.hasPermission">
       <t>&lt;static&gt; Type: {Boolean}
       opensocial.hasPermission(permission)</t>
       <t>Description: Returns true if the current gadget has access to the
       specified permission. If the gadget calls opensocial.requestPermission
       and permissions are granted then this function must return true on all
       subsequent calls.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>permission</c>
        <c>opensocial.Permission</c>
        <c>The 
        <xref target="opensocial.Permission">permission</xref> </c>
       </texttable></t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>Boolean</c>
        <c>True if the gadget has access for the permission; false if it
        doesn't</c>
       </texttable></t>
      </section>
      <section title="invalidateCache"
               anchor="opensocial.invalidateCache">
       <t>&lt;static&gt; opensocial.invalidateCache()</t>
       <t>Description: Invalidates all resources cached for the current
       viewer.</t>
      </section>
      <section title="newActivity"
               anchor="opensocial.newActivity">
       <t>&lt;static&gt; Type: {
       <xref target="opensocial.Activity">opensocial.Activity</xref> }
       opensocial.newActivity(params)</t>
       <t>Description: Creates an activity object, which represents an activity
       on the server. 
       <t>See also: 
       <xref target="opensocial.requestCreateActivity">
       requestCreateActivity()</xref>,</t>
       <t>It is only required to set one of TITLE_ID or TITLE. In addition, if
       you are using any variables in your title or title template, you must
       set TEMPLATE_PARAMS.</t>
       <t>Other possible fields to set are: URL, MEDIA_ITEMS, BODY_ID, BODY,
       EXTERNAL_ID, PRIORITY, STREAM_TITLE, STREAM_URL, STREAM_SOURCE_URL, and
       STREAM_FAVICON_URL.</t>
       <t>Containers are only required to use TITLE_ID or TITLE, and may choose
       to ignore additional parameters.</t>
       <t>See 
       <xref target="opensocial.Activity.Field">Field</xref> for more
       details.</t></t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>params</c>
        <c>Map.&lt;opensocial.Activity.Field|Object&gt;</c>
        <c>Parameters defining the activity</c>
       </texttable></t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>
         <xref target="opensocial.Activity">opensocial.Activity</xref>
        </c>
        <c>The new 
        <xref target="opensocial.Activity">activity</xref> object</c>
       </texttable></t>
      </section>
      <section title="newAlbum"
               anchor="opensocial.newAlbum">
       <t>&lt;static&gt; Type: {
       <xref target="opensocial.MediaItem">opensocial.MediaItem</xref> }
       opensocial.newAlbum(opt_params)</t>
       <t>Description: Creates a album. Represents a collection of images,
       movies, and audio. Used when creating albums on the server.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>opt_params</c>
        <c>Map.&lt;opensocial.Album.Field|Object&gt;</c>
        <c>Any other fields that should be set on the Album object; all of the
        defined 
        <xref target="opensocial.Album.Field">Field</xref> s are supported</c>
       </texttable></t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>
         <xref target="opensocial.MediaItem">opensocial.MediaItem</xref>
        </c>
        <c>The new 
        <xref target="opensocial.Album">album</xref> object</c>
       </texttable></t>
      </section>
      <section title="newDataRequest"
               anchor="opensocial.newDataRequest">
       <t>&lt;static&gt; Type: {
       <xref target="opensocial.DataRequest">opensocial.DataRequest</xref> }
       opensocial.newDataRequest()</t>
       <t>Description: Creates a data request object to use for sending and
       fetching data from the server.</t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>
         <xref target="opensocial.DataRequest">opensocial.DataRequest</xref>
        </c>
        <c>The 
        <xref target="opensocial.DataRequest">request</xref> object</c>
       </texttable></t>
      </section>
      <section title="newIdSpec"
               anchor="opensocial.newIdSpec">
       <t>&lt;static&gt; Type: {opensocial.IdSpec}
       opensocial.newIdSpec(parameters)</t>
       <t>Description: Creates an IdSpec object.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>parameters</c>
        <c>Map.&lt;opensocial.IdSpec.Field|Object&gt;</c>
        <c>Parameters defining the id spec.</c>
       </texttable></t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>opensocial.IdSpec</c>
        <c>The new 
        <xref target="opensocial.IdSpec">IdSpec</xref> object</c>
       </texttable></t>
      </section>
      <section title="newMediaItem"
               anchor="opensocial.newMediaItem">
       <t>&lt;static&gt; Type: {
       <xref target="opensocial.MediaItem">opensocial.MediaItem</xref> }
       opensocial.newMediaItem(mimeType, url, opt_params)</t>
       <t>Description: Creates a media item. Represents images, movies, and
       audio. Used when creating activities on the server.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>mimeType</c>
        <c>String</c>
        <c>
        <xref target="opensocial.MediaItem.Type">MIME type</xref> of the
        media</c>
        <c>url</c>
        <c>String</c>
        <c>Where the media can be found</c>
        <c>opt_params</c>
        <c>Map.&lt;opensocial.MediaItem.Field|Object&gt;</c>
        <c>Any other fields that should be set on the media item object; all of
        the defined 
        <xref target="opensocial.MediaItem.Field">Field</xref> s are
        supported</c>
       </texttable></t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>
         <xref target="opensocial.MediaItem">opensocial.MediaItem</xref>
        </c>
        <c>The new 
        <xref target="opensocial.MediaItem">media item</xref> object</c>
       </texttable></t>
      </section>
      <section title="newMessage"
               anchor="opensocial.newMessage">
       <t>&lt;static&gt; Type: {
       <xref target="opensocial.Message">opensocial.Message</xref> }
       opensocial.newMessage(body, opt_params)</t>
       <t>Description: Creates a new message object for use with
       opensocial.requestSendMessage.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>body</c>
        <c>String</c>
        <c>The main text of the message</c>
        <c>opt_params</c>
        <c>Map.&lt;opensocial.Message.Field|Object&gt;</c>
        <c>Any other fields that should be set on the message object; all of
        the defined 
        <xref target="opensocial.Message.Field">Field</xref> s are supported</c>
       </texttable></t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>
         <xref target="opensocial.Message">opensocial.Message</xref>
        </c>
        <c>The new 
        <xref target="opensocial.Message">message</xref> object</c>
       </texttable></t>
      </section>
      <section title="newNavigationParameters"
               anchor="opensocial.newNavigationParameters">
       <t>&lt;static&gt; Type: {opensocial.NavigationParameters}
       opensocial.newNavigationParameters(parameters)</t>
       <t>Description: Creates a NavigationParameters object. 
       <t>See also: 
       <xref target="opensocial.requestShareApp">
       requestShareApp()</xref> </t></t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>parameters</c>
        <c>Map.&lt;opensocial.NavigationParameters.Field|Object&gt;</c>
        <c>Parameters defining the navigation</c>
       </texttable></t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>opensocial.NavigationParameters</c>
        <c>The new 
        <xref target="opensocial.NavigationParameters">
        NavigationParameters</xref> object</c>
       </texttable></t>
      </section>
      <section title="requestCreateActivity"
               anchor="opensocial.requestCreateActivity">
       <t>&lt;static&gt; opensocial.requestCreateActivity(activity, priority,
       opt_callback)</t>
       <t>Description: Takes an activity and tries to create it, without
       waiting for the operation to complete. Optionally calls a function when
       the operation completes. 
       <t>See also: 
       <xref target="opensocial.newActivity">newActivity()</xref> </t>
       <t>Note: If this is the first activity that has been created for the
       user and the request is marked as HIGH priority then this call may open
       a user flow and navigate away from your gadget.</t>
       <t>This callback will either be called or the gadget will be reloaded
       from scratch. This function will be passed one parameter, an
       opensocial.ResponseItem. The error code will be set to reflect whether
       there were any problems with the request. If there was no error, the
       activity was created. If there was an error, you can use the response
       item's getErrorCode method to determine how to proceed. The data on the
       response item will not be set.</t>
       <t>If the container does not support this method the callback will be
       called with a opensocial.ResponseItem. The response item will have its
       error code set to NOT_IMPLEMENTED.</t></t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>activity</c>
        <c>opensocial.Activity</c>
        <c>The 
        <xref target="opensocial.Activity">activity</xref> to create</c>
        <c>priority</c>
        <c>opensocial.CreateActivityPriority</c>
        <c>The 
        <xref target="opensocial.CreateActivityPriority">priority</xref> for
        this request</c>
        <c>opt_callback</c>
        <c>Function</c>
        <c>The function to call once the request has been processed. The
        callback function will not be called until after the existing callstack
        has completed execution.</c>
       </texttable></t>
      </section>
      <section title="requestPermission"
               anchor="opensocial.requestPermission">
       <t>&lt;static&gt; opensocial.requestPermission(permissions, reason,
       opt_callback)</t>
       <t>Description: Requests the user to grant access to the specified
       permissions. If the container does not support this method the callback
       will be called with a opensocial.ResponseItem. The response item will
       have its error code set to NOT_IMPLEMENTED.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>permissions</c>
        <c>Array.&lt;opensocial.Permission&gt;</c>
        <c>The 
        <xref target="opensocial.Permission">permissions</xref> to request from
        the viewer</c>
        <c>reason</c>
        <c>String</c>
        <c>Displayed to the user as the reason why these permissions are
        needed</c>
        <c>opt_callback</c>
        <c>Function</c>
        <c>The function to call once the request has been processed; either
        this callback will be called or the gadget will be reloaded from
        scratch. This function will be passed one parameter, an
        opensocial.ResponseItem. The error code will be set to reflect whether
        there were any problems with the request. If there was no error, all
        permissions were granted. If there was an error, you can use
        opensocial.hasPermission to check which permissions are still denied.
        The data on the response item will be set. It will be an array of the
        opensocial.Permissions that were granted. The callback function will
        not be called until after the existing callstack has completed
        execution.</c>
       </texttable></t>
      </section>
      <section title="requestSendMessage"
               anchor="opensocial.requestSendMessage">
       <t>&lt;static&gt; opensocial.requestSendMessage(An, message,
       opt_callback, opt_params)</t>
       <t>Description: Requests the container to send a specific message to the
       specified users. 
       <t>The callback function is passed one parameter, an
       opensocial.ResponseItem. The error code will be set to reflect whether
       there were any problems with the request. If there was no error, the
       message was sent. If there was an error, you can use the response item's
       getErrorCode method to determine how to proceed. The data on the
       response item will not be set.</t>
       <t>If the container does not support this method the callback will be
       called with an opensocial.ResponseItem that has an error code of
       NOT_IMPLEMENTED.</t></t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>An</c>
        <c>opensocial.IdSpec</c>
        <c>IdSpec used to specify which people/groups to send the message
        to.</c>
        <c>message</c>
        <c>opensocial.Message</c>
        <c>The message to send to the specified users</c>
        <c>opt_callback</c>
        <c>Function</c>
        <c>The function to call once the request has been processed; either
        this callback will be called or the gadget will be reloaded from
        scratch.The callback function will not be called until after the
        existing callstack has completed execution.</c>
        <c>opt_params</c>
        <c>opensocial.NavigationParameters</c>
        <c>The optional parameters indicating where to send a user when a
        request is made, or when a request is accepted; options are of type 
        <xref target="opensocial.NavigationParameters.DestinationType">
        NavigationParameters.DestinationType</xref> </c>
       </texttable></t>
      </section>
      <section title="requestShareApp"
               anchor="opensocial.requestShareApp">
       <t>&lt;static&gt; opensocial.requestShareApp(recipients, reason,
       opt_callback, opt_params)</t>
       <t>Description: Requests the container to share this gadget with the
       specified users. 
       <t>The callback function is passed one parameter, an
       opensocial.ResponseItem. The error code will be set to reflect whether
       there were any problems with the request. If there was no error, the
       sharing request was sent. If there was an error, you can use the
       response item's getErrorCode method to determine how to proceed. The
       data on the response item will not be set.</t>
       <t>If the container does not support this method the callback will be
       called with a opensocial.ResponseItem. The response item will have its
       error code set to NOT_IMPLEMENTED.</t></t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>recipients</c>
        <c>opensocial.IdSpec</c>
        <c>An IdSpec used to specify which people/groups to send the ShareApp
        request to.</c>
        <c>reason</c>
        <c>opensocial.Message</c>
        <c>The reason the user wants the gadget to share itself. This reason
        can be used by the container when prompting the user for permission to
        share the app. It may also be ignored.</c>
        <c>opt_callback</c>
        <c>Function</c>
        <c>The function to call once the request has been processed; either
        this callback will be called or the gadget will be reloaded from
        scratch. The callback function will not be called until after the
        existing callstack has completed execution.</c>
        <c>opt_params</c>
        <c>opensocial.NavigationParameters</c>
        <c>The optional parameters indicating where to send a user when a
        request is made, or when a request is accepted; options are of type 
        <xref target="opensocial.NavigationParameters.DestinationType">
        NavigationParameters.DestinationType</xref> </c>
       </texttable></t>
      </section>
      <section title="requestUploadMediaItem"
               anchor="opensocial.requestUploadMediaItem">
       <t>&lt;static&gt; opensocial.requestUploadMediaItem(albumId,
       opt_callback)</t>
       <t>Description: Uploads a media item. Allows the container to provide
       some standard UI and other items to post files to a site.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>albumId</c>
        <c>string</c>
        <c>Indicates which album/collection to insert the items into. If not
        present or set to null|undefined, the items go into the default
        location for the container. Partial upload is possible, such that if
        the container allows for multiple items, some items may fail to be
        added.</c>
        <c>opt_callback</c>
        <c>Function</c>
        <c>Method is called when the upload completes. The callback function is
        passed one parameter, an opensocial.ResponseItem. The error code will
        be set to reflect whether there were any problems with the request. If
        there was no error, the message was sent. If there was an error, you
        can use the response item's getErrorCode method to determine how to
        proceed. getErrorMessage will contain a comma separated list of files
        that failed to upload. The data on the response item will be set to an
        array of 
        <xref target="opensocial.MediaItem">media item</xref> objects for
        successful items.</c>
       </texttable></t>
      </section>
     </section>
    </section>
    <section title="opensocial.Activity"
             anchor="opensocial.Activity">
     <!-- ============================== class summary ========================== -->
     <t>Representation of an activity. 
     <t>Activities are rendered with a title and an optional activity body.</t>
     <t>You may set the title and body directly as strings when calling
     opensocial.newActivity. However, it is usually beneficial to create
     activities using Message Templates for the title and body.</t>
     <t>Users will have many activities in their activity streams, and
     containers will not show every activity that is visible to a user. To help
     display large numbers of activities, containers will summarize a list of
     activities from a given source to a single entry.</t>
     <t>You can provide Activity Summaries to customize the text shown when
     multiple activities are summarized. If no customization is provided, a
     container may ignore your activities altogether or provide default text
     such as "Bob changed his status message + 20 other events like this."</t>
     <list style="symbols">
      <t>Activity Summaries will always summarize around a specific key in a
      key/value pair. This is so that the summary can say something concrete
      (this is clearer in the example below).</t>
      <t>Other variables will have synthetic "Count" variables created with the
      total number of items summarized.</t>
      <t>Message ID of the summary is the message ID of the main template + ":"
      + the data key</t>
     </list>
     <t>Example summaries: 
     <figure>
      <artwork xml:space="preserve">
&lt;messagebundle&gt;
    &lt;msg name="LISTEN_TO_THIS_SONG:Artist"&gt;
        ${Subject.Count} of your friends have suggested listening to songs
        by ${Artist}!
    &lt;/msg&gt;
    &lt;msg name="LISTEN_TO_THIS_SONG:Song"&gt;
        ${Subject.Count} of your friends have suggested listening to ${Song}
    !&lt;/msg&gt;
    &lt;msg name="LISTEN_TO_THIS_SONG:Subject"&gt;
        ${Subject.DisplayName} has recommended ${Song.Count} songs to you.
    &lt;/msg&gt;
&lt;/messagebundle&gt;
</artwork>
     </figure></t>
     <t>See also: 
     <xref target="opensocial.Message">opensocial.Message</xref>, 
     <xref target="opensocial.newActivity">opensocial.newActivity()</xref>, 
     <xref target="opensocial.requestCreateActivity">
     opensocial.requestCreateActivity()</xref> </t></t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.Activity.ctor">
      <t>opensocial.Activity()</t>
      <t></t>
     </section>
     <section title="Method Details">
      <section title="getField"
               anchor="opensocial.Activity.getField">
       <t>Type: {String} getField(key, opt_params)</t>
       <t>Description: Gets the activity data that's associated with the
       specified key.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>key</c>
        <c>String</c>
        <c>The key to get data for; see the 
        <xref target="opensocial.Activity.Field">Field</xref> class for possible
        values</c>
        <c>opt_params</c>
        <c>Map.&lt;opensocial.DataRequest.DataRequestFields|Object&gt;</c>
        <c>Additional 
        <xref target="opensocial.DataRequest.DataRequestFields">params</xref> to
        pass to the request.</c>
       </texttable></t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>String</c>
        <c>The data</c>
       </texttable></t>
      </section>
      <section title="getId"
               anchor="opensocial.Activity.getId">
       <t>Type: {String} getId()</t>
       <t>Description: Gets an ID that can be permanently associated with this
       activity.</t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>String</c>
        <c>The ID</c>
       </texttable></t>
      </section>
      <section title="setField"
               anchor="opensocial.Activity.setField">
       <t>setField(key, data)</t>
       <t>Description: Sets data for this activity associated with the given
       key.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>key</c>
        <c>String</c>
        <c>The key to set data for</c>
        <c>data</c>
        <c>String</c>
        <c>The data to set</c>
       </texttable></t>
      </section>
     </section>
    </section>
    <section title="opensocial.Activity.Field"
             anchor="opensocial.Activity.Field">
     <!-- ============================== class summary ========================== -->
     <t>All of the fields that activities can have. 
     <t>It is only required to set one of TITLE_ID or TITLE. In addition, if
     you are using any variables in your title or title template, you must set
     TEMPLATE_PARAMS.</t>
     <t>Other possible fields to set are: URL, MEDIA_ITEMS, BODY_ID, BODY,
     EXTERNAL_ID, PRIORITY, STREAM_TITLE, STREAM_URL, STREAM_SOURCE_URL, and
     STREAM_FAVICON_URL.</t>
     <t>Containers are only required to use TITLE_ID or TITLE, they may ignore
     additional parameters.</t>
     <t>See also: 
     <xref target="opensocial.Activity.getField">
     opensocial.Activity.getField()</xref> </t></t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.Activity.Field.ctor">
      <t>opensocial.Activity.Field</t>
      <t></t>
     </section>
     <section title="Field Details">
      <section title="APP_ID"
               anchor="opensocial.Activity.Field.APP_ID">
       <t>&lt;static&gt; Member of: opensocial.Activity.Field.APP_ID</t>
       <t>Description: 
       <t>A string specifying the application that this activity is associated
       with. This value can not be set.</t>
       <t>This field may be used interchangeably with the string
       'appId'.</t></t>
      </section>
      <section title="BODY"
               anchor="opensocial.Activity.Field.BODY">
       <t>&lt;static&gt; Member of: opensocial.Activity.Field.BODY</t>
       <t>Description: 
       <t>A string specifying an optional expanded version of an activity.</t>
       <t>Bodies may only have the following HTML tags: &lt;b&gt; &lt;i&gt;,
       &lt;a&gt;, &lt;span&gt;. The container may ignore this formatting when
       rendering the activity.</t>
       <t>This field may be used interchangeably with the string
       'body'.</t></t>
      </section>
      <section title="BODY_ID"
               anchor="opensocial.Activity.Field.BODY_ID">
       <t>&lt;static&gt; Member of: opensocial.Activity.Field.BODY_ID</t>
       <t>Description: 
       <t>A string specifying the body template message ID in the gadget
       spec.</t>
       <t>The body is an optional expanded version of an activity.</t>
       <t>Bodies may only have the following HTML tags: &lt;b&gt; &lt;i&gt;,
       &lt;a&gt;, &lt;span&gt;. The container may ignore this formatting when
       rendering the activity.</t>
       <t>This field may be used interchangeably with the string
       'bodyId'.</t></t>
      </section>
      <section title="EXTERNAL_ID"
               anchor="opensocial.Activity.Field.EXTERNAL_ID">
       <t>&lt;static&gt; Member of: opensocial.Activity.Field.EXTERNAL_ID</t>
       <t>Description: 
       <t>An optional string ID generated by the posting application.</t>
       <t>This field may be used interchangeably with the string
       'externalId'.</t></t>
      </section>
      <section title="ID"
               anchor="opensocial.Activity.Field.ID">
       <t>&lt;static&gt; Member of: opensocial.Activity.Field.ID</t>
       <t>Description: 
       <t>A string ID that is permanently associated with this activity. This
       value can not be set.</t>
       <t>This field may be used interchangeably with the string 'id'.</t></t>
      </section>
      <section title="MEDIA_ITEMS"
               anchor="opensocial.Activity.Field.MEDIA_ITEMS">
       <t>&lt;static&gt; Member of: opensocial.Activity.Field.MEDIA_ITEMS</t>
       <t>Description: 
       <t>Any photos, videos, or images that should be associated with the
       activity. Higher priority ones are higher in the list. The data has type
       Array&lt; 
       <xref target="opensocial.MediaItem">MediaItem</xref> &gt;.</t>
       <t>This field may be used interchangeably with the string
       'mediaItems'.</t></t>
      </section>
      <section title="POSTED_TIME"
               anchor="opensocial.Activity.Field.POSTED_TIME">
       <t>&lt;static&gt; Member of: opensocial.Activity.Field.POSTED_TIME</t>
       <t>Description: 
       <t>A string specifying the time at which this activity took place in
       milliseconds since the epoch. This value can not be set.</t>
       <t>This field may be used interchangeably with the string
       'postedTime'.</t></t>
      </section>
      <section title="PRIORITY"
               anchor="opensocial.Activity.Field.PRIORITY">
       <t>&lt;static&gt; Member of: opensocial.Activity.Field.PRIORITY</t>
       <t>Description: 
       <t>A number between 0 and 1 representing the relative priority of this
       activity in relation to other activities from the same source</t>
       <t>This field may be used interchangeably with the string
       'priority'.</t></t>
      </section>
      <section title="STREAM_FAVICON_URL"
               anchor="opensocial.Activity.Field.STREAM_FAVICON_URL">
       <t>&lt;static&gt; Member of:
       opensocial.Activity.Field.STREAM_FAVICON_URL</t>
       <t>Description: 
       <t>A string specifying the URL for the stream's favicon.</t>
       <t>This field may be used interchangeably with the string
       'streamFaviconUrl'.</t></t>
      </section>
      <section title="STREAM_SOURCE_URL"
               anchor="opensocial.Activity.Field.STREAM_SOURCE_URL">
       <t>&lt;static&gt; Member of:
       opensocial.Activity.Field.STREAM_SOURCE_URL</t>
       <t>Description: 
       <t>A string specifying the stream's source URL.</t>
       <t>This field may be used interchangeably with the string
       'streamSourceUrl'.</t></t>
      </section>
      <section title="STREAM_TITLE"
               anchor="opensocial.Activity.Field.STREAM_TITLE">
       <t>&lt;static&gt; Member of: opensocial.Activity.Field.STREAM_TITLE</t>
       <t>Description: 
       <t>A string specifing the title of the stream.</t>
       <t>This field may be used interchangeably with the string
       'streamTitle'.</t></t>
      </section>
      <section title="STREAM_URL"
               anchor="opensocial.Activity.Field.STREAM_URL">
       <t>&lt;static&gt; Member of: opensocial.Activity.Field.STREAM_URL</t>
       <t>Description: 
       <t>A string specifying the stream's URL.</t>
       <t>This field may be used interchangeably with the string
       'streamUrl'.</t></t>
      </section>
      <section title="TEMPLATE_PARAMS"
               anchor="opensocial.Activity.Field.TEMPLATE_PARAMS">
       <t>&lt;static&gt; Member of:
       opensocial.Activity.Field.TEMPLATE_PARAMS</t>
       <t>Description: 
       <t>A map of custom key/value pairs associated with this activity. These
       will be used for evaluation in templates.</t>
       <t>The data has type Map&lt;String, Object&gt;. The object may be either
       a String or an opensocial.Person.</t>
       <t>When passing in a person with key PersonKey, can use the following
       replacement variables in the template:</t>
       <list style="symbols">
        <t>PersonKey.DisplayName - Display name for the person</t>
        <t>PersonKey.ProfileUrl. URL of the person's profile</t>
        <t>PersonKey.Id - The ID of the person</t>
        <t>PersonKey - Container may replace with DisplayName, but may also
        optionally link to the user.</t>
       </list>
       <t>This field may be used interchangeably with the string
       'templateParams'.</t></t>
      </section>
      <section title="TITLE"
               anchor="opensocial.Activity.Field.TITLE">
       <t>&lt;static&gt; Member of: opensocial.Activity.Field.TITLE</t>
       <t>Description: 
       <t>A string specifying the primary text of an activity.</t>
       <t>Titles may only have the following HTML tags: &lt;b&gt; &lt;i&gt;,
       &lt;a&gt;, &lt;span&gt;. The container may ignore this formatting when
       rendering the activity.</t>
       <t>This field may be used interchangeably with the string
       'title'.</t></t>
      </section>
      <section title="TITLE_ID"
               anchor="opensocial.Activity.Field.TITLE_ID">
       <t>&lt;static&gt; Member of: opensocial.Activity.Field.TITLE_ID</t>
       <t>Description: 
       <t>A string specifying the title template message ID in the gadget
       spec.</t>
       <t>The title is the primary text of an activity.</t>
       <t>Titles may only have the following HTML tags: &lt;b&gt; &lt;i&gt;,
       &lt;a&gt;, &lt;span&gt;. The container may ignore this formatting when
       rendering the activity.</t>
       <t>This field may be used interchangeably with the string
       'titleId'.</t></t>
      </section>
      <section title="URL"
               anchor="opensocial.Activity.Field.URL">
       <t>&lt;static&gt; Member of: opensocial.Activity.Field.URL</t>
       <t>Description: 
       <t>A string specifying the URL that represents this activity.</t>
       <t>This field may be used interchangeably with the string 'url'.</t></t>
      </section>
      <section title="USER_ID"
               anchor="opensocial.Activity.Field.USER_ID">
       <t>&lt;static&gt; Member of: opensocial.Activity.Field.USER_ID</t>
       <t>Description: 
       <t>The string ID of the user who this activity is for. This value can
       not be set.</t>
       <t>This field may be used interchangeably with the string
       'userId'.</t></t>
      </section>
     </section>
    </section>
    <section title="opensocial.Address"
             anchor="opensocial.Address">
     <!-- ============================== class summary ========================== -->
     <t>Base interface for all address objects.</t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.Address.ctor">
      <t>opensocial.Address()</t>
      <t></t>
     </section>
     <section title="Method Details">
      <section title="getField"
               anchor="opensocial.Address.getField">
       <t>Type: {String} getField(key, opt_params)</t>
       <t>Description: Gets data for this body type that is associated with the
       specified key.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>key</c>
        <c>String</c>
        <c>The key to get data for; keys are defined in 
        <xref target="opensocial.Address.Field">Address.Field</xref> </c>
        <c>opt_params</c>
        <c>Map.&lt;opensocial.DataRequest.DataRequestFields|Object&gt;</c>
        <c>Additional 
        <xref target="opensocial.DataRequest.DataRequestFields">params</xref> to
        pass to the request</c>
       </texttable></t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>String</c>
        <c>The data</c>
       </texttable></t>
      </section>
     </section>
    </section>
    <section title="opensocial.Address.Field"
             anchor="opensocial.Address.Field">
     <!-- ============================== class summary ========================== -->
     <t>All of the fields that an address has. These are the supported keys for
     the 
     <xref target="opensocial.Address.getField">
     Address.getField()</xref> method.</t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.Address.Field.ctor">
      <t>opensocial.Address.Field</t>
      <t></t>
     </section>
     <section title="Field Details">
      <section title="COUNTRY"
               anchor="opensocial.Address.Field.COUNTRY">
       <t>&lt;static&gt; Member of: opensocial.Address.Field.COUNTRY</t>
       <t>Description: The country, specified as a string. This field may be
       used interchangeably with the string 'country'.</t>
      </section>
      <section title="EXTENDED_ADDRESS"
               anchor="opensocial.Address.Field.EXTENDED_ADDRESS">
       <t>&lt;static&gt; Member of:
       opensocial.Address.Field.EXTENDED_ADDRESS</t>
       <t>Description: The extended street address, specified as a string. This
       field may be used interchangeably with the string 'extendedAddress'.</t>
      </section>
      <section title="LATITUDE"
               anchor="opensocial.Address.Field.LATITUDE">
       <t>&lt;static&gt; Member of: opensocial.Address.Field.LATITUDE</t>
       <t>Description: The latitude, specified as a number. This field may be
       used interchangeably with the string 'latitude'.</t>
      </section>
      <section title="LOCALITY"
               anchor="opensocial.Address.Field.LOCALITY">
       <t>&lt;static&gt; Member of: opensocial.Address.Field.LOCALITY</t>
       <t>Description: The locality, specified as a string. This field may be
       used interchangeably with the string 'locality'.</t>
      </section>
      <section title="LONGITUDE"
               anchor="opensocial.Address.Field.LONGITUDE">
       <t>&lt;static&gt; Member of: opensocial.Address.Field.LONGITUDE</t>
       <t>Description: The longitude, specified as a number. This field may be
       used interchangeably with the string 'longitude'.</t>
      </section>
      <section title="PO_BOX"
               anchor="opensocial.Address.Field.PO_BOX">
       <t>&lt;static&gt; Member of: opensocial.Address.Field.PO_BOX</t>
       <t>Description: The P.O. box of the address, if there is one; specified
       as a string. This field may be used interchangeably with the string
       'poBox'.</t>
      </section>
      <section title="POSTAL_CODE"
               anchor="opensocial.Address.Field.POSTAL_CODE">
       <t>&lt;static&gt; Member of: opensocial.Address.Field.POSTAL_CODE</t>
       <t>Description: The postal code, specified as a string. This field may
       be used interchangeably with the string 'postalCode'.</t>
      </section>
      <section title="REGION"
               anchor="opensocial.Address.Field.REGION">
       <t>&lt;static&gt; Member of: opensocial.Address.Field.REGION</t>
       <t>Description: The region, specified as a string. This field may be
       used interchangeably with the string 'region'.</t>
      </section>
      <section title="STREET_ADDRESS"
               anchor="opensocial.Address.Field.STREET_ADDRESS">
       <t>&lt;static&gt; Member of: opensocial.Address.Field.STREET_ADDRESS</t>
       <t>Description: The street address, specified as a string. This field
       may be used interchangeably with the string 'streetAddress'.</t>
      </section>
      <section title="TYPE"
               anchor="opensocial.Address.Field.TYPE">
       <t>&lt;static&gt; Member of: opensocial.Address.Field.TYPE</t>
       <t>Description: The address type or label, specified as a string.
       Examples: work, my favorite store, my house, etc. This field may be used
       interchangeably with the string 'type'.</t>
      </section>
      <section title="UNSTRUCTURED_ADDRESS"
               anchor="opensocial.Address.Field.UNSTRUCTURED_ADDRESS">
       <t>&lt;static&gt; Member of:
       opensocial.Address.Field.UNSTRUCTURED_ADDRESS</t>
       <t>Description: If the container does not have structured addresses in
       its data store, this field contains the unstructured address that the
       user entered, specified as a string. Use
       opensocial.getEnvironment().supportsField to see which fields are
       supported. This field may be used interchangeably with the string
       'unstructuredAddress'.</t>
      </section>
     </section>
    </section>
    <section title="opensocial.Album"
             anchor="opensocial.Album">
     <!-- ============================== class summary ========================== -->
     <t>Class for Album features.</t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.Album.ctor">
      <t>opensocial.Album</t>
      <t></t>
     </section>
     <section title="Method Details">
      <section title="getField"
               anchor="opensocial.Album.getField">
       <t>Type: {String} getField(key, opt_params)</t>
       <t>Description: Gets the album data that's associated with the specified
       key.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>key</c>
        <c>String</c>
        <c>The key to get data for; see the 
        <xref target="opensocial.Album.Field">Field</xref> class for possible
        values</c>
        <c>opt_params</c>
        <c>Map.&lt;opensocial.DataRequest.DataRequestFields|Object&gt;</c>
        <c>Additional 
        <xref target="opensocial.DataRequest.DataRequestFields">params</xref> to
        pass to the request.</c>
       </texttable></t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>String</c>
        <c>The data</c>
       </texttable></t>
      </section>
      <section title="setField"
               anchor="opensocial.Album.setField">
       <t>setField(key, data)</t>
       <t>Description: Sets data for this album associated with the given
       key.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>key</c>
        <c>String</c>
        <c>The key to set data for</c>
        <c>data</c>
        <c>String</c>
        <c>The data to set</c>
       </texttable></t>
      </section>
     </section>
    </section>
    <section title="opensocial.Album.Field"
             anchor="opensocial.Album.Field">
     <!-- ============================== class summary ========================== -->
     <t>All of the fields that albums can have. 
     <t>It is only required to set ID.</t>
     <t>Other possible fields to set are: THUMBNAIL_URL, TITLE, DESCRIPTION,
     LOCATION, OWNER_ID, MEDIA_TYPE, MEDIA_MIME_TYPE, MEDIA_ITEM_COUNT.</t>
     <t>See also: 
     <xref target="opensocial.Album.getField">
     opensocial.Album.getField()</xref> </t></t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.Album.Field.ctor">
      <t>opensocial.Album.Field</t>
      <t></t>
     </section>
     <section title="Field Details">
      <section title="DESCRIPTION"
               anchor="opensocial.Album.Field.DESCRIPTION">
       <t>&lt;static&gt; Member of: opensocial.Album.Field.DESCRIPTION</t>
       <t>Description: string, description of the album. May be used
       interchangeably with the string 'description'.</t>
      </section>
      <section title="ID"
               anchor="opensocial.Album.Field.ID">
       <t>&lt;static&gt; Member of: opensocial.Album.Field.ID</t>
       <t>Description: string, unique identifier for the album. May be used
       interchangeably with the string 'id'.</t>
      </section>
      <section title="LOCATION"
               anchor="opensocial.Album.Field.LOCATION">
       <t>&lt;static&gt; Member of: opensocial.Album.Field.LOCATION</t>
       <t>Description: opensocial.Address, location corresponding to the album.
       May be used interchangeably with the string 'location'.</t>
      </section>
      <section title="MEDIA_ITEM_COUNT"
               anchor="opensocial.Album.Field.MEDIA_ITEM_COUNT">
       <t>&lt;static&gt; Member of: opensocial.Album.Field.MEDIA_ITEM_COUNT</t>
       <t>Description: integer, number of items in the album. May be used
       interchangeably with the string 'mediaItemCount'.</t>
      </section>
      <section title="MEDIA_MIME_TYPE"
               anchor="opensocial.Album.Field.MEDIA_MIME_TYPE">
       <t>&lt;static&gt; Member of: opensocial.Album.Field.MEDIA_MIME_TYPE</t>
       <t>Description: array of strings identifying the mime-types of media
       items in the Album. May be used interchangeably with the string
       'mediaMimeType'.</t>
      </section>
      <section title="MEDIA_TYPE"
               anchor="opensocial.Album.Field.MEDIA_TYPE">
       <t>&lt;static&gt; Member of: opensocial.Album.Field.MEDIA_TYPE</t>
       <t>Description: array of MediaItem.TYPE, types of MediaItems in the
       Album. May be used interchangeably with the string 'mediaType'.</t>
      </section>
      <section title="OWNER_ID"
               anchor="opensocial.Album.Field.OWNER_ID">
       <t>&lt;static&gt; Member of: opensocial.Album.Field.OWNER_ID</t>
       <t>Description: string, ID of the owner of the album. May be used
       interchangeably with the string 'ownerId'.</t>
      </section>
      <section title="THUMBNAIL_URL"
               anchor="opensocial.Album.Field.THUMBNAIL_URL">
       <t>&lt;static&gt; Member of: opensocial.Album.Field.THUMBNAIL_URL</t>
       <t>Description: string, URL to a thumbnail cover of the album. May be
       used interchangeably with the string 'thumbnailUrl'.</t>
      </section>
      <section title="TITLE"
               anchor="opensocial.Album.Field.TITLE">
       <t>&lt;static&gt; Member of: opensocial.Album.Field.TITLE</t>
       <t>Description: string, the title of the album. May be used
       interchangeably with the string 'title'.</t>
      </section>
     </section>
    </section>
    <section title="opensocial.BodyType"
             anchor="opensocial.BodyType">
     <!-- ============================== class summary ========================== -->
     <t>Base interface for all body type objects.</t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.BodyType.ctor">
      <t>opensocial.BodyType()</t>
      <t></t>
     </section>
     <section title="Method Details">
      <section title="getField"
               anchor="opensocial.BodyType.getField">
       <t>Type: {String} getField(key, opt_params)</t>
       <t>Description: Gets data for this body type that is associated with the
       specified key.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>key</c>
        <c>String</c>
        <c>The key to get data for; keys are defined in 
        <xref target="opensocial.BodyType.Field">BodyType.Field</xref> </c>
        <c>opt_params</c>
        <c>Map.&lt;opensocial.DataRequest.DataRequestFields|Object&gt;</c>
        <c>Additional 
        <xref target="opensocial.DataRequest.DataRequestFields">params</xref> to
        pass to the request.</c>
       </texttable></t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>String</c>
        <c>The data</c>
       </texttable></t>
      </section>
     </section>
    </section>
    <section title="opensocial.BodyType.Field"
             anchor="opensocial.BodyType.Field">
     <!-- ============================== class summary ========================== -->
     <t>All of the fields that a body type has. These are the supported keys
     for the 
     <xref target="opensocial.BodyType.getField">
     BodyType.getField()</xref> method.</t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.BodyType.Field.ctor">
      <t>opensocial.BodyType.Field</t>
      <t></t>
     </section>
     <section title="Field Details">
      <section title="BUILD"
               anchor="opensocial.BodyType.Field.BUILD">
       <t>&lt;static&gt; Member of: opensocial.BodyType.Field.BUILD</t>
       <t>Description: The build of the person's body, specified as a string.
       Container support for this field is OPTIONAL. This field may be used
       interchangeably with the string 'build'.</t>
      </section>
      <section title="EYE_COLOR"
               anchor="opensocial.BodyType.Field.EYE_COLOR">
       <t>&lt;static&gt; Member of: opensocial.BodyType.Field.EYE_COLOR</t>
       <t>Description: The eye color of the person, specified as a string.
       Container support for this field is OPTIONAL. This field may be used
       interchangeably with the string 'eyeColor'.</t>
      </section>
      <section title="HAIR_COLOR"
               anchor="opensocial.BodyType.Field.HAIR_COLOR">
       <t>&lt;static&gt; Member of: opensocial.BodyType.Field.HAIR_COLOR</t>
       <t>Description: The hair color of the person, specified as a string.
       Container support for this field is OPTIONAL. This field may be used
       interchangeably with the string 'hairColor'.</t>
      </section>
      <section title="HEIGHT"
               anchor="opensocial.BodyType.Field.HEIGHT">
       <t>&lt;static&gt; Member of: opensocial.BodyType.Field.HEIGHT</t>
       <t>Description: The height of the person in meters, specified as a
       number. Container support for this field is OPTIONAL. This field may be
       used interchangeably with the string 'height'.</t>
      </section>
      <section title="WEIGHT"
               anchor="opensocial.BodyType.Field.WEIGHT">
       <t>&lt;static&gt; Member of: opensocial.BodyType.Field.WEIGHT</t>
       <t>Description: The weight of the person in kilograms, specified as a
       number. Container support for this field is OPTIONAL. This field may be
       used interchangeably with the string 'weight'.</t>
      </section>
     </section>
    </section>
    <section title="opensocial.Collection"
             anchor="opensocial.Collection">
     <!-- ============================== class summary ========================== -->
     <t>Collection of multiple objects with useful accessors. May also
     represent subset of a larger collection (for example, page 1 of 10) and
     contain information about the larger collection.</t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.Collection.ctor">
      <t>opensocial.Collection()</t>
      <t></t>
     </section>
     <section title="Method Details">
      <section title="asArray"
               anchor="opensocial.Collection.asArray">
       <t>Type: {Array.&lt;Object&gt;} asArray()</t>
       <t>Description: Returns an array of all the objects in this
       collection.</t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>Array.&lt;Object&gt;</c>
        <c>The values in this collection</c>
       </texttable></t>
      </section>
      <section title="each"
               anchor="opensocial.Collection.each">
       <t>each(fn)</t>
       <t>Description: Executes the provided function once per member of the
       collection, with each member in turn as the parameter to the
       function.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>fn</c>
        <c>Function</c>
        <c>The function to call with each collection entry</c>
       </texttable></t>
      </section>
      <section title="getById"
               anchor="opensocial.Collection.getById">
       <t>Type: {Object?} getById(id)</t>
       <t>Description: Finds the entry with the given ID value, or returns null
       if none is found.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>id</c>
        <c>String</c>
        <c>The ID to look for</c>
       </texttable></t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>Object?</c>
        <c>The data</c>
       </texttable></t>
      </section>
      <section title="getOffset"
               anchor="opensocial.Collection.getOffset">
       <t>Type: {Number} getOffset()</t>
       <t>Description: Gets the offset of this collection within a larger
       result set.</t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>Number</c>
        <c>The offset into the total collection</c>
       </texttable></t>
      </section>
      <section title="getTotalSize"
               anchor="opensocial.Collection.getTotalSize">
       <t>Type: {Number} getTotalSize()</t>
       <t>Description: Gets the total size of the larger result set that this
       collection belongs to.</t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>Number</c>
        <c>The total size of the result</c>
       </texttable></t>
      </section>
      <section title="size"
               anchor="opensocial.Collection.size">
       <t>Type: {Number} size()</t>
       <t>Description: Gets the size of this collection, which is equal to or
       less than the total size of the result.</t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>Number</c>
        <c>The size of this collection</c>
       </texttable></t>
      </section>
     </section>
    </section>
    <section title="opensocial.CreateActivityPriority"
             anchor="opensocial.CreateActivityPriority">
     <!-- ============================== class summary ========================== -->
     <t>The priorities a create activity request can have. 
     <t>See also: 
     <xref target="opensocial.requestCreateActivity">
     opensocial.requestCreateActivity()</xref> </t></t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.CreateActivityPriority.ctor">
      <t>opensocial.CreateActivityPriority</t>
      <t></t>
     </section>
     <section title="Field Details">
      <section title="HIGH"
               anchor="opensocial.CreateActivityPriority.HIGH">
       <t>&lt;static&gt; Member of: opensocial.CreateActivityPriority.HIGH</t>
       <t>Description: If the activity is of high importance, it will be
       created even if this requires asking the user for permission. This may
       cause the container to open a user flow which may navigate away from
       your gagdet. This field may be used interchangeably with the string
       'HIGH'.</t>
      </section>
      <section title="LOW"
               anchor="opensocial.CreateActivityPriority.LOW">
       <t>&lt;static&gt; Member of: opensocial.CreateActivityPriority.LOW</t>
       <t>Description: If the activity is of low importance, it will not be
       created if the user has not given permission for the current app to
       create activities. With this priority, the requestCreateActivity call
       will never open a user flow. This field may be used interchangeably with
       the string 'LOW'.</t>
      </section>
     </section>
    </section>
    <section title="opensocial.DataRequest"
             anchor="opensocial.DataRequest">
     <!-- ============================== class summary ========================== -->
     <t>
      <t>Used to request social information from the container. This includes
      data for friends, profiles, app data, and activities. All apps that
      require access to people information should send a DataRequest.</t>
      <t>Here's an example of creating, initializing, sending, and handling the
      results of a data request:</t>
      <figure>
       <artwork xml:space="preserve">
function requestMe() {
    var req = opensocial.newDataRequest();
    req.add(req.newFetchPersonRequest(
        opensocial.IdSpec.PersonId.VIEWER),
        "viewer");
    req.send(handleRequestMe);
};
function handleRequestMe(data) {
    var viewer = data.get("viewer");
    if (viewer.hadError()) {
        //Handle error using viewer.getError()...return;
    }
    //No error. Do something with viewer.getData()...
}
</artwork>
      </figure>
      <t>See also: 
      <xref target="opensocial.newDataRequest">
      opensocial.newDataRequest()</xref> </t>
     </t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.DataRequest.ctor">
      <t>opensocial.DataRequest()</t>
      <t></t>
     </section>
     <section title="Method Details">
      <section title="add"
               anchor="opensocial.DataRequest.add">
       <t>add(request, opt_key)</t>
       <t>Description: Adds an item to fetch (get) or update (set) data from
       the server. A single DataRequest object can have multiple items. As a
       rule, each item is executed in the order it was added, starting with the
       item that was added first. However, items that can't collide might be
       executed in parallel.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>request</c>
        <c>Object</c>
        <c>Specifies which data to fetch or update</c>
        <c>opt_key</c>
        <c>String</c>
        <c>A key to map the generated response data to</c>
       </texttable></t>
      </section>
      <section title="newCreateAlbumRequest"
               anchor="opensocial.DataRequest.newCreateAlbumRequest">
       <t>Type: {Object} newCreateAlbumRequest(An, album)</t>
       <t>Description: Creates a new album and returns the ID of the album
       created. Containers implement restrictions - like allowing a viewer to
       create albums for only him/herself.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>An</c>
        <c>opensocial.IdSpec</c>
        <c>IdSpec used to specify which people/groups to create an album
        for.</c>
        <c>album</c>
        <c>opensocail.Album</c>
        <c>The album to create.</c>
       </texttable></t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>Object</c>
        <c>A request object</c>
       </texttable></t>
      </section>
      <section title="newCreateMediaItemRequest"
               anchor="opensocial.DataRequest.newCreateMediaItemRequest">
       <t>Type: {Object} newCreateMediaItemRequest(An, albumId, mediaItem)</t>
       <t>Description: Creates a new media item in the album and returns the ID
       of the album created. Containers implement restrictions.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>An</c>
        <c>opensocial.IdSpec</c>
        <c>IdSpec used to specify which people/groups own the album.</c>
        <c>albumId</c>
        <c>string</c>
        <c>The album to add the media item to.</c>
        <c>mediaItem</c>
        <c>opensocial.MediaItem</c>
        <c>The MediaItem to add to the album.</c>
       </texttable></t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>Object</c>
        <c>A request object</c>
       </texttable></t>
      </section>
      <section title="newDeleteAlbumRequest"
               anchor="opensocial.DataRequest.newDeleteAlbumRequest">
       <t>Type: {Object} newDeleteAlbumRequest(An, albumId)</t>
       <t>Description: Deletes the album specified. Containers implement
       restriction.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>An</c>
        <c>opensocial.IdSpec</c>
        <c>IdSpec used to specify which people/groups own the album.</c>
        <c>albumId</c>
        <c>string</c>
        <c>The album to delete.</c>
       </texttable></t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>Object</c>
        <c>A request object</c>
       </texttable></t>
      </section>
      <section title="newFetchActivitiesRequest"
               anchor="opensocial.DataRequest.newFetchActivitiesRequest">
       <t>Type: {Object} newFetchActivitiesRequest(idSpec, opt_params)</t>
       <t>Description: Creates an item to request an activity stream from the
       server. 
       <t>When processed, returns a Collection&lt;Activity&gt;.</t></t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>idSpec</c>
        <c>opensocial.IdSpec</c>
        <c>An IdSpec used to specify which people to fetch. See also 
        <xref target="opensocial.IdSpec">IdSpec</xref>.</c>
        <c>opt_params</c>
        <c>Map.&lt;opensocial.DataRequest.ActivityRequestFields|Object&gt;</c>
        <c>Additional parameters to pass to the request; not currently used</c>
       </texttable></t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>Object</c>
        <c>A request object</c>
       </texttable></t>
      </section>
      <section title="newFetchAlbumsRequest"
               anchor="opensocial.DataRequest.newFetchAlbumsRequest">
       <t>Type: {Object} newFetchAlbumsRequest(An, opt_params)</t>
       <t>Description: The newFetchAlbumsRequest() creates an object for
       DataRequest to request albums.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>An</c>
        <c>opensocial.IdSpec</c>
        <c>IdSpec used to specify which people/groups to fetch albums from.</c>
        <c>opt_params</c>
        <c>Map.&lt;string|string&gt;</c>
        <c>opt_params can specify the following: opensocial.Album.Field.ID - an
        array of album Ids to fetch (fetch all albums if empty, subject to
        pagination) opensocial.Album.Field.MEDIA_TYPE - an array of
        MediaItem.TYPE values to specify the kind of Albums to fetch.
        opensocial.DataRequest.AlbumRequestFields.FIRST - The first item to
        fetch. opensocial.DataRequest.AlbumRequestFields.MAX - The maximum
        number of items to fetch.</c>
       </texttable></t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>Object</c>
        <c>A request object</c>
       </texttable></t>
      </section>
      <section title="newFetchMediaItemsRequest"
               anchor="opensocial.DataRequest.newFetchMediaItemsRequest">
       <t>Type: {Object} newFetchMediaItemsRequest(An, albumId, opt_params)</t>
       <t>Description: The newFetchMediaItemsRequest() creates an object for
       DataRequest to request mediaItems.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>An</c>
        <c>opensocial.IdSpec</c>
        <c>IdSpec used to specify which people/groups to fetch media items
        from.</c>
        <c>albumId</c>
        <c>string</c>
        <c>The id of the album to fetch MediaItems from.</c>
        <c>opt_params</c>
        <c>Map.&lt;string|string&gt;</c>
        <c>opt_params can specify the following: opensocial.MediaItem.Field.ID
        - an array of media item ids to selectively fetch (fetch all items if
        empty, subject to pagination) opensocial.MediaItem.Field.MEDIA_TYPE -
        an array of MediaItem.TYPE values to specify the types of MediaItems to
        fetch opensocial.DataRequest.MediaItemRequestFields.FIRST - The first
        item to fetch. opensocial.DataRequest.MediaItemRequestFields.MAX - The
        maximum number of items to fetch.</c>
       </texttable></t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>Object</c>
        <c>A request object</c>
       </texttable></t>
      </section>
      <section title="newFetchPeopleRequest"
               anchor="opensocial.DataRequest.newFetchPeopleRequest">
       <t>Type: {Object} newFetchPeopleRequest(idSpec, opt_params)</t>
       <t>Description: Creates an item to request friends from the server. When
       processed, returns a 
       <xref target="opensocial.Collection">Collection</xref> &lt;
       <xref target="opensocial.Person">Person</xref> &gt; object.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>idSpec</c>
        <c>opensocial.IdSpec</c>
        <c>An IdSpec used to specify which people to fetch. See also 
        <xref target="opensocial.IdSpec">IdSpec</xref>.</c>
        <c>opt_params</c>
        <c>Map.&lt;opensocial.DataRequest.PeopleRequestFields|Object&gt;</c>
        <c>Additional 
        <xref target="opensocial.DataRequest.PeopleRequestFields">
        params</xref> to pass to the request</c>
       </texttable></t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>Object</c>
        <c>A request object</c>
       </texttable></t>
      </section>
      <section title="newFetchPersonAppDataRequest"
               anchor="opensocial.DataRequest.newFetchPersonAppDataRequest">
       <t>Type: {Object} newFetchPersonAppDataRequest(idSpec, keys,
       opt_params)</t>
       <t>Description: Creates an item to request app data for the given
       people. When processed, returns a Map&lt; 
       <xref target="opensocial.IdSpec.PersonId">PersonId</xref>,
       Map&lt;String, Object&gt;&gt; object. All of the data values returned
       will be valid json.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>idSpec</c>
        <c>opensocial.IdSpec</c>
        <c>An IdSpec used to specify which people to fetch. See also 
        <xref target="opensocial.IdSpec">IdSpec</xref>.</c>
        <c>keys</c>
        <c>Array.&lt;String&gt; | String</c>
        <c>The keys you want data for; this can be an array of key names, a
        single key name, or "*" to mean "all keys"</c>
        <c>opt_params</c>
        <c>Map.&lt;opensocial.DataRequest.DataRequestFields|Object&gt;</c>
        <c>Additional 
        <xref target="opensocial.DataRequest.DataRequestFields">params</xref> to
        pass to the request</c>
       </texttable></t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>Object</c>
        <c>A request object</c>
       </texttable></t>
      </section>
      <section title="newFetchPersonRequest"
               anchor="opensocial.DataRequest.newFetchPersonRequest">
       <t>Type: {Object} newFetchPersonRequest(id, opt_params)</t>
       <t>Description: Creates an item to request a profile for the specified
       person ID. When processed, returns a 
       <xref target="opensocial.Person">Person</xref> object.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>id</c>
        <c>String</c>
        <c>The ID of the person to fetch; can be the standard 
        <xref target="opensocial.IdSpec.PersonId">person ID</xref> of VIEWER or
        OWNER</c>
        <c>opt_params</c>
        <c>Map.&lt;opensocial.DataRequest.PeopleRequestFields|Object&gt;</c>
        <c>Additional 
        <xref target="opensocial.DataRequest.PeopleRequestFields">
        parameters</xref> to pass to the request; this request supports
        PROFILE_DETAILS</c>
       </texttable></t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>Object</c>
        <c>A request object</c>
       </texttable></t>
      </section>
      <section title="newRemovePersonAppDataRequest"
               anchor="opensocial.DataRequest.newRemovePersonAppDataRequest">
       <t>Type: {Object} newRemovePersonAppDataRequest(keys)</t>
       <t>Description: Deletes the given keys from the datastore for the
       current VIEWER. When processed, does not return any data.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>keys</c>
        <c>Array.&lt;String&gt; | String</c>
        <c>The keys you want to delete from the datastore; this can be an array
        of key names, a single key name, or "*" to mean "all keys"</c>
       </texttable></t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>Object</c>
        <c>A request object</c>
       </texttable></t>
      </section>
      <section title="newUpdateAlbumRequest"
               anchor="opensocial.DataRequest.newUpdateAlbumRequest">
       <t>Type: {Object} newUpdateAlbumRequest(An, albumId, fields)</t>
       <t>Description: Updates the fields specified in the params.The following
       fields cannot be set: MEDIA_ITEM_COUNT, OWNER_ID, ID. Containers
       implement restrictions.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>An</c>
        <c>opensocial.IdSpec</c>
        <c>IdSpec used to specify which people/groups to own the album.</c>
        <c>albumId</c>
        <c>string</c>
        <c>The album to update.</c>
        <c>fields</c>
        <c>Map&lt;opensocial.Album.Field|object&gt;</c>
        <c>The Album Fields to update.The following fields cannot be set:
        MEDIA_ITEM_COUNT, OWNER_ID, ID. Containers implement restrictions.</c>
       </texttable></t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>Object</c>
        <c>A request object</c>
       </texttable></t>
      </section>
      <section title="newUpdateMediaItemRequest"
               anchor="opensocial.DataRequest.newUpdateMediaItemRequest">
       <t>Type: {Object} newUpdateMediaItemRequest(An, albumId, mediaItemId,
       fields)</t>
       <t>Description: Updates the fields specified in the params.The following
       fields cannot be set: ID, CREATED, ALBUM_ID, FILE_SIZE, NUM_COMMENTS.
       Containers implement restrictions.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>An</c>
        <c>opensocial.IdSpec</c>
        <c>IdSpec used to specify which people/groups own the album/media
        item.</c>
        <c>albumId</c>
        <c>string</c>
        <c>The album containing the media item to update.</c>
        <c>mediaItemId</c>
        <c>string</c>
        <c>The media item to update.</c>
        <c>fields</c>
        <c>Map&lt;opensocial.MediaItem.Field|object&gt;</c>
        <c>The Album Fields to update.The following fields cannot be set: ID,
        CREATED, ALBUM_ID, FILE_SIZE, NUM_COMMENTS. Containers implement
        restrictions.</c>
       </texttable></t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>Object</c>
        <c>A request object</c>
       </texttable></t>
      </section>
      <section title="newUpdatePersonAppDataRequest"
               anchor="opensocial.DataRequest.newUpdatePersonAppDataRequest">
       <t>Type: {Object} newUpdatePersonAppDataRequest(key, value)</t>
       <t>Description: Creates an item to request an update of an app field for
       the current VIEWER. When processed, does not return any data. App Data
       is stored as a series of key value pairs of strings, scoped per person,
       per application.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>key</c>
        <c>String</c>
        <c>The name of the key. This may only contain alphanumeric (A-Za-z0-9)
        characters, underscore(_), dot(.) or dash(-).</c>
        <c>value</c>
        <c>Object</c>
        <c>The value, must be valid json</c>
       </texttable></t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>Object</c>
        <c>A request object</c>
       </texttable></t>
      </section>
      <section title="send"
               anchor="opensocial.DataRequest.send">
       <t>send(opt_callback)</t>
       <t>Description: Sends a data request to the server in order to get a
       data response. Although the server may optimize these requests, they
       will always be executed as though they were serial.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>opt_callback</c>
        <c>Function</c>
        <c>The function to call with the 
        <xref target="opensocial.DataResponse">data response</xref> generated by
        the server. The callback function will not be called until after the
        existing callstack has completed execution.</c>
       </texttable></t>
      </section>
     </section>
    </section>
    <section title="opensocial.DataRequest.ActivityRequestFields"
             anchor="opensocial.DataRequest.ActivityRequestFields">
     <!-- ============================== class summary ========================== -->
     <t>The values needed to handle activity paging.</t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.DataRequest.ActivityRequestFields.ctor">
      <t>opensocial.DataRequest.ActivityRequestFields</t>
      <t></t>
     </section>
     <section title="Field Details">
      <section title="FIRST"
               anchor="opensocial.DataRequest.ActivityRequestFields.FIRST">
       <t>&lt;static&gt; Member of:
       opensocial.DataRequest.ActivityRequestFields.FIRST</t>
       <t>Description: When paginating, the index of the first item to fetch;
       specified as a number.</t>
      </section>
      <section title="MAX"
               anchor="opensocial.DataRequest.ActivityRequestFields.MAX">
       <t>&lt;static&gt; Member of:
       opensocial.DataRequest.ActivityRequestFields.MAX</t>
       <t>Description: The maximum number of items to fetch, specified as a
       number; defaults to 20.</t>
      </section>
     </section>
    </section>
    <section title="opensocial.DataRequest.AlbumRequestFields"
             anchor="opensocial.DataRequest.AlbumRequestFields">
     <!-- ============================== class summary ========================== -->
     <t>The values needed to handle activity paging.</t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.DataRequest.AlbumRequestFields.ctor">
      <t>opensocial.DataRequest.AlbumRequestFields</t>
      <t></t>
     </section>
     <section title="Field Details">
      <section title="FIRST"
               anchor="opensocial.DataRequest.AlbumRequestFields.FIRST">
       <t>&lt;static&gt; Member of:
       opensocial.DataRequest.AlbumRequestFields.FIRST</t>
       <t>Description: When paginating, the index of the first item to fetch;
       specified as a number.</t>
      </section>
      <section title="MAX"
               anchor="opensocial.DataRequest.AlbumRequestFields.MAX">
       <t>&lt;static&gt; Member of:
       opensocial.DataRequest.AlbumRequestFields.MAX</t>
       <t>Description: The maximum number of items to fetch, specified as a
       number; defaults to 20.</t>
      </section>
     </section>
    </section>
    <section title="opensocial.DataRequest.DataRequestFields"
             anchor="opensocial.DataRequest.DataRequestFields">
     <!-- ============================== class summary ========================== -->
     <t></t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.DataRequest.DataRequestFields.ctor">
      <t>opensocial.DataRequest.DataRequestFields</t>
      <t></t>
     </section>
     <section title="Field Details">
      <section title="ESCAPE_TYPE"
               anchor="opensocial.DataRequest.DataRequestFields.ESCAPE_TYPE">
       <t>&lt;static&gt; Member of:
       opensocial.DataRequest.DataRequestFields.ESCAPE_TYPE</t>
       <t>Description: How to escape person data returned from the server;
       defaults to HTML_ESCAPE. Possible values are defined by 
       <xref target="opensocial.EscapeType">EscapeType</xref>. This field may
       be used interchangeably with the string 'escapeType'. Use of this
       function is deprecated in favor of us using the 
       <xref target="opensocial.DataRequest.PeopleRequestFields.ESCAPE_TYPE">
       ESCAPE_TYPE</xref> request field.</t>
      </section>
     </section>
    </section>
    <section title="opensocial.DataRequest.FilterType"
             anchor="opensocial.DataRequest.FilterType">
     <!-- ============================== class summary ========================== -->
     <t>The filters available for limiting person requests.</t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.DataRequest.FilterType.ctor">
      <t>opensocial.DataRequest.FilterType</t>
      <t></t>
     </section>
     <section title="Field Details">
      <section title="ALL"
               anchor="opensocial.DataRequest.FilterType.ALL">
       <t>&lt;static&gt; Member of: opensocial.DataRequest.FilterType.ALL</t>
       <t>Description: Retrieves all friends. This field may be used
       interchangeably with the string 'all'.</t>
      </section>
      <section title="HAS_APP"
               anchor="opensocial.DataRequest.FilterType.HAS_APP">
       <t>&lt;static&gt; Member of:
       opensocial.DataRequest.FilterType.HAS_APP</t>
       <t>Description: Retrieves all friends that use this application. Note:
       Containers may define "use" in any manner they deem appropriate for
       their functionality, and it is not expected that this field will have
       the exact same semantics across containers. This field may be used
       interchangeably with the string 'hasApp'.</t>
      </section>
      <section title="IS_FRIENDS_WITH"
               anchor="opensocial.DataRequest.FilterType.IS_FRIENDS_WITH">
       <t>&lt;static&gt; Member of:
       opensocial.DataRequest.FilterType.IS_FRIENDS_WITH</t>
       <t>Description: Will filter the people requested by checking if they are
       friends with the given 
       <xref target="opensocial.IdSpec">idSpec</xref>. Expects a filterOptions
       parameter to be passed with the following fields defined: - idSpec The 
       <xref target="opensocial.IdSpec">idSpec</xref> that each person must be
       friends with. This field may be used interchangeably with the string
       'isFriendsWith'.</t>
      </section>
      <section title="TOP_FRIENDS"
               anchor="opensocial.DataRequest.FilterType.TOP_FRIENDS">
       <t>&lt;static&gt; Member of:
       opensocial.DataRequest.FilterType.TOP_FRIENDS</t>
       <t>Description: Retrieves only the user's top friends as defined by the
       container. Container support for this filter type is OPTIONAL. This
       field may be used interchangeably with the string 'topFriends'.</t>
      </section>
     </section>
    </section>
    <section title="opensocial.DataRequest.MediaItemRequestFields"
             anchor="opensocial.DataRequest.MediaItemRequestFields">
     <!-- ============================== class summary ========================== -->
     <t>The values needed to handle activity paging.</t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.DataRequest.MediaItemRequestFields.ctor">
      <t>opensocial.DataRequest.MediaItemRequestFields</t>
      <t></t>
     </section>
     <section title="Field Details">
      <section title="FIRST"
               anchor="opensocial.DataRequest.MediaItemRequestFields.FIRST">
       <t>&lt;static&gt; Member of:
       opensocial.DataRequest.MediaItemRequestFields.FIRST</t>
       <t>Description: When paginating, the index of the first item to fetch;
       specified as a number.</t>
      </section>
      <section title="MAX"
               anchor="opensocial.DataRequest.MediaItemRequestFields.MAX">
       <t>&lt;static&gt; Member of:
       opensocial.DataRequest.MediaItemRequestFields.MAX</t>
       <t>Description: The maximum number of items to fetch, specified as a
       number; defaults to 20.</t>
      </section>
     </section>
    </section>
    <section title="opensocial.DataRequest.PeopleRequestFields"
             anchor="opensocial.DataRequest.PeopleRequestFields">
     <!-- ============================== class summary ========================== -->
     <t></t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.DataRequest.PeopleRequestFields.ctor">
      <t>opensocial.DataRequest.PeopleRequestFields</t>
      <t></t>
     </section>
     <section title="Field Details">
      <section title="APP_DATA"
               anchor="opensocial.DataRequest.PeopleRequestFields.APP_DATA">
       <t>&lt;static&gt; Member of:
       opensocial.DataRequest.PeopleRequestFields.APP_DATA</t>
       <t>Description: An array of strings, specifying the app data keys to
       fetch for each of the Person objects. This field may be used
       interchangeably with the string 'appData'.</t>
      </section>
      <section title="ESCAPE_TYPE"
               anchor="opensocial.DataRequest.PeopleRequestFields.ESCAPE_TYPE">
       <t>&lt;static&gt; Member of:
       opensocial.DataRequest.PeopleRequestFields.ESCAPE_TYPE</t>
       <t>Description: How to escape Person fields and app data returned from
       the server; defaults to HTML_ESCAPE. Possible values are defined by 
       <xref target="opensocial.EscapeType">EscapeType</xref>. This field may
       be used interchangeably with the string 'escapeType'.</t>
      </section>
      <section title="FILTER"
               anchor="opensocial.DataRequest.PeopleRequestFields.FILTER">
       <t>&lt;static&gt; Member of:
       opensocial.DataRequest.PeopleRequestFields.FILTER</t>
       <t>Description: How to filter the people objects; defaults to ALL.
       Possible values are defined by 
       <xref target="opensocial.DataRequest.FilterType">FilterType</xref>. This
       field may be used interchangeably with the string 'filter'.</t>
      </section>
      <section title="FILTER_OPTIONS"
               anchor="opensocial.DataRequest.PeopleRequestFields.FILTER_OPTIONS">
               
       <t>&lt;static&gt; Member of:
       opensocial.DataRequest.PeopleRequestFields.FILTER_OPTIONS</t>
       <t>Description: Additional options to be passed into the filter,
       specified as a Map&lt;String, Object&gt;. This field may be used
       interchangeably with the string 'filterOptions'.</t>
      </section>
      <section title="FIRST"
               anchor="opensocial.DataRequest.PeopleRequestFields.FIRST">
       <t>&lt;static&gt; Member of:
       opensocial.DataRequest.PeopleRequestFields.FIRST</t>
       <t>Description: When paginating, the index of the first item to fetch;
       specified as a number. This field may be used interchangeably with the
       string 'first'.</t>
      </section>
      <section title="MAX"
               anchor="opensocial.DataRequest.PeopleRequestFields.MAX">
       <t>&lt;static&gt; Member of:
       opensocial.DataRequest.PeopleRequestFields.MAX</t>
       <t>Description: The maximum number of items to fetch, specified as a
       number; defaults to 20. If set to a larger number, a container may honor
       the request, or may limit the number to a container-specified limit of
       at least 20. This field may be used interchangeably with the string
       'max'.</t>
      </section>
      <section title="PROFILE_DETAILS"
               anchor="opensocial.DataRequest.PeopleRequestFields.PROFILE_DETAILS">
               
       <t>&lt;static&gt; Member of:
       opensocial.DataRequest.PeopleRequestFields.PROFILE_DETAILS</t>
       <t>Description: An array of 
       <xref target="opensocial.Person.Field">
       opensocial.Person.Field</xref> specifying what profile data to fetch for
       each of the person objects. The server will always include ID, NAME, and
       THUMBNAIL_URL. This field may be used interchangeably with the string
       'profileDetail'.</t>
      </section>
      <section title="SORT_ORDER"
               anchor="opensocial.DataRequest.PeopleRequestFields.SORT_ORDER">
       <t>&lt;static&gt; Member of:
       opensocial.DataRequest.PeopleRequestFields.SORT_ORDER</t>
       <t>Description: A sort order for the people objects; defaults to
       TOP_FRIENDS. Possible values are defined by 
       <xref target="opensocial.DataRequest.SortOrder">SortOrder</xref>. This
       field may be used interchangeably with the string 'sortOrder'.</t>
      </section>
     </section>
    </section>
    <section title="opensocial.DataRequest.SortOrder"
             anchor="opensocial.DataRequest.SortOrder">
     <!-- ============================== class summary ========================== -->
     <t>The sort orders available for ordering person objects.</t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.DataRequest.SortOrder.ctor">
      <t>opensocial.DataRequest.SortOrder</t>
      <t></t>
     </section>
     <section title="Field Details">
      <section title="NAME"
               anchor="opensocial.DataRequest.SortOrder.NAME">
       <t>&lt;static&gt; Member of: opensocial.DataRequest.SortOrder.NAME</t>
       <t>Description: When used will sort people alphabetically by the name
       field. This field may be used interchangeably with the string
       'name'.</t>
      </section>
      <section title="TOP_FRIENDS"
               anchor="opensocial.DataRequest.SortOrder.TOP_FRIENDS">
       <t>&lt;static&gt; Member of:
       opensocial.DataRequest.SortOrder.TOP_FRIENDS</t>
       <t>Description: When used will sort people by the container's definition
       of top friends. This field may be used interchangeably with the string
       'topFriends'.</t>
      </section>
     </section>
    </section>
    <section title="opensocial.DataResponse"
             anchor="opensocial.DataResponse">
     <!-- ============================== class summary ========================== -->
     <t>This object contains the requested server data mapped to the requested
     keys. 
     <t>See also: 
     <xref target="opensocial.DataRequest">DataRequest</xref> </t></t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.DataResponse.ctor">
      <t>opensocial.DataResponse()</t>
      <t></t>
     </section>
     <section title="Method Details">
      <section title="get"
               anchor="opensocial.DataResponse.get">
       <t>Type: {
       <xref target="opensocial.ResponseItem">opensocial.ResponseItem</xref> }
       get(key)</t>
       <t>Description: Gets the ResponseItem for the requested field.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>key</c>
        <c></c>
        <c></c>
       </texttable></t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>
         <xref target="opensocial.ResponseItem">opensocial.ResponseItem</xref>
        </c>
        <c>The requested 
        <xref target="opensocial.ResponseItem">response</xref> calculated by the
        server</c>
       </texttable></t>
      </section>
      <section title="getErrorMessage"
               anchor="opensocial.DataResponse.getErrorMessage">
       <t>Type: {String} getErrorMessage()</t>
       <t>Description: If the entire request had a batch level error, returns
       the error message.</t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>String</c>
        <c>A human-readable description of the error that occurred.</c>
       </texttable></t>
      </section>
      <section title="hadError"
               anchor="opensocial.DataResponse.hadError">
       <t>Type: {Boolean} hadError()</t>
       <t>Description: Returns true if there was an error in fetching this data
       from the server.</t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>Boolean</c>
        <c>True if there was an error; otherwise, false</c>
       </texttable></t>
      </section>
     </section>
    </section>
    <section title="opensocial.Email"
             anchor="opensocial.Email">
     <!-- ============================== class summary ========================== -->
     <t>Base interface for all email objects.</t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.Email.ctor">
      <t>opensocial.Email()</t>
      <t></t>
     </section>
     <section title="Method Details">
      <section title="getField"
               anchor="opensocial.Email.getField">
       <t>Type: {String} getField(key, opt_params)</t>
       <t>Description: Gets data for this body type that is associated with the
       specified key.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>key</c>
        <c>String</c>
        <c>The key to get data for; keys are defined in 
        <xref target="opensocial.Email.Field">Email.Field</xref> </c>
        <c>opt_params</c>
        <c>Map.&lt;opensocial.DataRequest.DataRequestFields|Object&gt;</c>
        <c>Additional 
        <xref target="opensocial.DataRequest.DataRequestFields">params</xref> to
        pass to the request.</c>
       </texttable></t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>String</c>
        <c>The data</c>
       </texttable></t>
      </section>
     </section>
    </section>
    <section title="opensocial.Email.Field"
             anchor="opensocial.Email.Field">
     <!-- ============================== class summary ========================== -->
     <t>All of the fields that an email has. These are the supported keys for
     the 
     <xref target="opensocial.Email.getField">
     Email.getField()</xref> method.</t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.Email.Field.ctor">
      <t>opensocial.Email.Field</t>
      <t></t>
     </section>
     <section title="Field Details">
      <section title="ADDRESS"
               anchor="opensocial.Email.Field.ADDRESS">
       <t>&lt;static&gt; Member of: opensocial.Email.Field.ADDRESS</t>
       <t>Description: The email address, specified as a string. This field may
       be used interchangeably with the string 'address'.</t>
      </section>
      <section title="TYPE"
               anchor="opensocial.Email.Field.TYPE">
       <t>&lt;static&gt; Member of: opensocial.Email.Field.TYPE</t>
       <t>Description: The email type or label, specified as a string.
       Examples: work, my favorite store, my house, etc. This field may be used
       interchangeably with the string 'type'.</t>
      </section>
     </section>
    </section>
    <section title="opensocial.Enum"
             anchor="opensocial.Enum">
     <!-- ============================== class summary ========================== -->
     <t>Base interface for all enum objects. This class allows containers to
     use constants for fields that are usually have a common set of values.
     There are two main ways to use this class. 
     <t>If your gadget just wants to display how much of a smoker someone is,
     it can simply use:</t>
     <figure>
      <artwork xml:space="preserve">
html = "This person smokes: " + person.getField('smoker').getValue();
</artwork>
     </figure>
     <t>This value field will be correctly set up by the container. This is a
     place where the container can even localize the value for the gadget so
     that it always shows the right thing.</t>
     <t>If your gadget wants to have some logic around the smoker field it can
     use:</t>
     <figure>
      <artwork xml:space="preserve">
if (person.getField('smoker').getKey() != "NO") { //gadget logic here }
</artwork>
     </figure>
     <t>Note: The key may be null if the person's smoker field cannot be
     coerced into one of the standard enum types. The value, on the other hand,
     is never null.</t></t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.Enum.ctor">
      <t>opensocial.Enum()</t>
      <t></t>
     </section>
     <section title="Method Details">
      <section title="getDisplayValue"
               anchor="opensocial.Enum.getDisplayValue">
       <t>Type: {String} getDisplayValue()</t>
       <t>Description: The value of this enum. This will be a user displayable
       string. If the container supports localization, the string will be
       localized.</t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>String</c>
        <c>The enum's value.</c>
       </texttable></t>
      </section>
      <section title="getKey"
               anchor="opensocial.Enum.getKey">
       <t>Type: {String} getKey()</t>
       <t>Description: Use this for logic within your gadget. If they key is
       null then the value does not fit in the defined enums.</t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>String</c>
        <c>The enum's key. This should be one of the defined enums below.</c>
       </texttable></t>
      </section>
     </section>
    </section>
    <section title="opensocial.Enum.Drinker"
             anchor="opensocial.Enum.Drinker">
     <!-- ============================== class summary ========================== -->
     <t>The enum keys used by the drinker field. 
     <t>See also: 
     <xref target="opensocial.Person.Field">
     opensocial.Person.Field.Drinker</xref> </t></t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.Enum.Drinker.ctor">
      <t>opensocial.Enum.Drinker</t>
      <t></t>
     </section>
     <section title="Field Details">
      <section title="HEAVILY"
               anchor="opensocial.Enum.Drinker.HEAVILY">
       <t>&lt;static&gt; Member of: opensocial.Enum.Drinker.HEAVILY</t>
       <t>Description: This field may be used interchangeably with the string
       'HEAVILY'.</t>
      </section>
      <section title="NO"
               anchor="opensocial.Enum.Drinker.NO">
       <t>&lt;static&gt; Member of: opensocial.Enum.Drinker.NO</t>
       <t>Description: This field may be used interchangeably with the string
       'NO'.</t>
      </section>
      <section title="OCCASIONALLY"
               anchor="opensocial.Enum.Drinker.OCCASIONALLY">
       <t>&lt;static&gt; Member of: opensocial.Enum.Drinker.OCCASIONALLY</t>
       <t>Description: This field may be used interchangeably with the string
       'OCCASIONALLY'.</t>
      </section>
      <section title="QUIT"
               anchor="opensocial.Enum.Drinker.QUIT">
       <t>&lt;static&gt; Member of: opensocial.Enum.Drinker.QUIT</t>
       <t>Description: This field may be used interchangeably with the string
       'QUIT'.</t>
      </section>
      <section title="QUITTING"
               anchor="opensocial.Enum.Drinker.QUITTING">
       <t>&lt;static&gt; Member of: opensocial.Enum.Drinker.QUITTING</t>
       <t>Description: This field may be used interchangeably with the string
       'QUITTING'.</t>
      </section>
      <section title="REGULARLY"
               anchor="opensocial.Enum.Drinker.REGULARLY">
       <t>&lt;static&gt; Member of: opensocial.Enum.Drinker.REGULARLY</t>
       <t>Description: This field may be used interchangeably with the string
       'REGULARLY'.</t>
      </section>
      <section title="SOCIALLY"
               anchor="opensocial.Enum.Drinker.SOCIALLY">
       <t>&lt;static&gt; Member of: opensocial.Enum.Drinker.SOCIALLY</t>
       <t>Description: This field may be used interchangeably with the string
       'SOCIALLY'.</t>
      </section>
      <section title="YES"
               anchor="opensocial.Enum.Drinker.YES">
       <t>&lt;static&gt; Member of: opensocial.Enum.Drinker.YES</t>
       <t>Description: This field may be used interchangeably with the string
       'YES'.</t>
      </section>
     </section>
    </section>
    <section title="opensocial.Enum.Gender"
             anchor="opensocial.Enum.Gender">
     <!-- ============================== class summary ========================== -->
     <t>The enum keys used by the gender field. 
     <t>See also: 
     <xref target="opensocial.Person.Field">
     opensocial.Person.Field.Gender</xref> </t></t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.Enum.Gender.ctor">
      <t>opensocial.Enum.Gender</t>
      <t></t>
     </section>
     <section title="Field Details">
      <section title="FEMALE"
               anchor="opensocial.Enum.Gender.FEMALE">
       <t>&lt;static&gt; Member of: opensocial.Enum.Gender.FEMALE</t>
       <t>Description: This field may be used interchangeably with the string
       'FEMALE'.</t>
      </section>
      <section title="MALE"
               anchor="opensocial.Enum.Gender.MALE">
       <t>&lt;static&gt; Member of: opensocial.Enum.Gender.MALE</t>
       <t>Description: This field may be used interchangeably with the string
       'MALE'.</t>
      </section>
     </section>
    </section>
    <section title="opensocial.Enum.LookingFor"
             anchor="opensocial.Enum.LookingFor">
     <!-- ============================== class summary ========================== -->
     <t>The enum keys used by the lookingFor field. 
     <t>See also: 
     <xref target="opensocial.Person.Field">
     opensocial.Person.Field.LookingFor</xref> </t></t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.Enum.LookingFor.ctor">
      <t>opensocial.Enum.LookingFor</t>
      <t></t>
     </section>
     <section title="Field Details">
      <section title="ACTIVITY_PARTNERS"
               anchor="opensocial.Enum.LookingFor.ACTIVITY_PARTNERS">
       <t>&lt;static&gt; Member of:
       opensocial.Enum.LookingFor.ACTIVITY_PARTNERS</t>
       <t>Description: This field may be used interchangeably with the string
       'ACTIVITY_PARTNERS'.</t>
      </section>
      <section title="DATING"
               anchor="opensocial.Enum.LookingFor.DATING">
       <t>&lt;static&gt; Member of: opensocial.Enum.LookingFor.DATING</t>
       <t>Description: This field may be used interchangeably with the string
       'DATING'.</t>
      </section>
      <section title="FRIENDS"
               anchor="opensocial.Enum.LookingFor.FRIENDS">
       <t>&lt;static&gt; Member of: opensocial.Enum.LookingFor.FRIENDS</t>
       <t>Description: This field may be used interchangeably with the string
       'FRIENDS'.</t>
      </section>
      <section title="NETWORKING"
               anchor="opensocial.Enum.LookingFor.NETWORKING">
       <t>&lt;static&gt; Member of: opensocial.Enum.LookingFor.NETWORKING</t>
       <t>Description: This field may be used interchangeably with the string
       'NETWORKING'.</t>
      </section>
      <section title="RANDOM"
               anchor="opensocial.Enum.LookingFor.RANDOM">
       <t>&lt;static&gt; Member of: opensocial.Enum.LookingFor.RANDOM</t>
       <t>Description: This field may be used interchangeably with the string
       'RANDOM'.</t>
      </section>
      <section title="RELATIONSHIP"
               anchor="opensocial.Enum.LookingFor.RELATIONSHIP">
       <t>&lt;static&gt; Member of: opensocial.Enum.LookingFor.RELATIONSHIP</t>
       <t>Description: This field may be used interchangeably with the string
       'RELATIONSHIP'.</t>
      </section>
     </section>
    </section>
    <section title="opensocial.Enum.Presence"
             anchor="opensocial.Enum.Presence">
     <!-- ============================== class summary ========================== -->
     <t>The enum keys used by the networkPresence field. 
     <t>See also: 
     <xref target="opensocial.Person.Field">
     opensocial.Person.Field.NetworkPresence</xref> </t></t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.Enum.Presence.ctor">
      <t>opensocial.Enum.Presence</t>
      <t></t>
     </section>
     <section title="Field Details">
      <section title="AWAY"
               anchor="opensocial.Enum.Presence.AWAY">
       <t>&lt;static&gt; Member of: opensocial.Enum.Presence.AWAY</t>
       <t>Description: The entity or resource is temporarily away. This field
       may be used interchangeably with the string 'AWAY'.</t>
      </section>
      <section title="CHAT"
               anchor="opensocial.Enum.Presence.CHAT">
       <t>&lt;static&gt; Member of: opensocial.Enum.Presence.CHAT</t>
       <t>Description: The entity or resource is actively interested in
       chatting. This field may be used interchangeably with the string
       'CHAT'.</t>
      </section>
      <section title="DND"
               anchor="opensocial.Enum.Presence.DND">
       <t>&lt;static&gt; Member of: opensocial.Enum.Presence.DND</t>
       <t>Description: The entity or resource is busy (dnd = "Do Not Disturb").
       This field may be used interchangeably with the string 'DND'.</t>
      </section>
      <section title="OFFLINE"
               anchor="opensocial.Enum.Presence.OFFLINE">
       <t>&lt;static&gt; Member of: opensocial.Enum.Presence.OFFLINE</t>
       <t>Description: The entity or resource is off line. This field may be
       used interchangeably with the string 'OFFLINE'.</t>
      </section>
      <section title="ONLINE"
               anchor="opensocial.Enum.Presence.ONLINE">
       <t>&lt;static&gt; Member of: opensocial.Enum.Presence.ONLINE</t>
       <t>Description: The entity or resource is on line. This field may be
       used interchangeably with the string 'ONLINE'.</t>
      </section>
      <section title="XA"
               anchor="opensocial.Enum.Presence.XA">
       <t>&lt;static&gt; Member of: opensocial.Enum.Presence.XA</t>
       <t>Description: The entity or resource is away for an extended period
       (xa = "eXtended Away"). This field may be used interchangeably with the
       string 'XA'.</t>
      </section>
     </section>
    </section>
    <section title="opensocial.Enum.Smoker"
             anchor="opensocial.Enum.Smoker">
     <!-- ============================== class summary ========================== -->
     <t>The enum keys used by the smoker field. 
     <t>See also: 
     <xref target="opensocial.Person.Field">
     opensocial.Person.Field.Smoker</xref> </t></t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.Enum.Smoker.ctor">
      <t>opensocial.Enum.Smoker</t>
      <t></t>
     </section>
     <section title="Field Details">
      <section title="HEAVILY"
               anchor="opensocial.Enum.Smoker.HEAVILY">
       <t>&lt;static&gt; Member of: opensocial.Enum.Smoker.HEAVILY</t>
       <t>Description: This field may be used interchangeably with the string
       'HEAVILY'.</t>
      </section>
      <section title="NO"
               anchor="opensocial.Enum.Smoker.NO">
       <t>&lt;static&gt; Member of: opensocial.Enum.Smoker.NO</t>
       <t>Description: This field may be used interchangeably with the string
       'NO'.</t>
      </section>
      <section title="OCCASIONALLY"
               anchor="opensocial.Enum.Smoker.OCCASIONALLY">
       <t>&lt;static&gt; Member of: opensocial.Enum.Smoker.OCCASIONALLY</t>
       <t>Description: This field may be used interchangeably with the string
       'OCCASIONALLY'.</t>
      </section>
      <section title="QUIT"
               anchor="opensocial.Enum.Smoker.QUIT">
       <t>&lt;static&gt; Member of: opensocial.Enum.Smoker.QUIT</t>
       <t>Description: This field may be used interchangeably with the string
       'QUIT'.</t>
      </section>
      <section title="QUITTING"
               anchor="opensocial.Enum.Smoker.QUITTING">
       <t>&lt;static&gt; Member of: opensocial.Enum.Smoker.QUITTING</t>
       <t>Description: This field may be used interchangeably with the string
       'QUITTING'.</t>
      </section>
      <section title="REGULARLY"
               anchor="opensocial.Enum.Smoker.REGULARLY">
       <t>&lt;static&gt; Member of: opensocial.Enum.Smoker.REGULARLY</t>
       <t>Description: This field may be used interchangeably with the string
       'REGULARLY'.</t>
      </section>
      <section title="SOCIALLY"
               anchor="opensocial.Enum.Smoker.SOCIALLY">
       <t>&lt;static&gt; Member of: opensocial.Enum.Smoker.SOCIALLY</t>
       <t>Description: This field may be used interchangeably with the string
       'SOCIALLY'.</t>
      </section>
      <section title="YES"
               anchor="opensocial.Enum.Smoker.YES">
       <t>&lt;static&gt; Member of: opensocial.Enum.Smoker.YES</t>
       <t>Description: This field may be used interchangeably with the string
       'YES'.</t>
      </section>
     </section>
    </section>
    <section title="opensocial.Environment"
             anchor="opensocial.Environment">
     <!-- ============================== class summary ========================== -->
     <t>Represents the current environment for a gadget. 
     <t>See also: 
     <xref target="opensocial.getEnvironment">
     opensocial.getEnvironment()</xref>,</t></t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.Environment.ctor">
      <t>opensocial.Environment()</t>
      <t></t>
     </section>
     <section title="Method Details">
      <section title="getDomain"
               anchor="opensocial.Environment.getDomain">
       <t>Type: {String} getDomain()</t>
       <t>Description: Returns the current domain. for example, "orkut.com" or
       "myspace.com".</t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>String</c>
        <c>The domain</c>
       </texttable></t>
      </section>
      <section title="supportsField"
               anchor="opensocial.Environment.supportsField">
       <t>Type: {Boolean} supportsField(objectType, fieldName)</t>
       <t>Description: Returns true if the specified field is supported in this
       container on the given object type, and returns false otherwise.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>objectType</c>
        <c>opensocial.Environment.ObjectType</c>
        <c>The 
        <xref target="opensocial.Environment.ObjectType">object type</xref> to
        check for the field</c>
        <c>fieldName</c>
        <c>String</c>
        <c>The name of the field to check for</c>
       </texttable></t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>Boolean</c>
        <c>True if the field is supported on the specified object type</c>
       </texttable></t>
      </section>
     </section>
    </section>
    <section title="opensocial.Environment.ObjectType"
             anchor="opensocial.Environment.ObjectType">
     <!-- ============================== class summary ========================== -->
     <t>The types of objects in this container. 
     <t>See also: 
     <xref target="opensocial.Environment.supportsField">
     Environment.supportsField()</xref> </t></t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.Environment.ObjectType.ctor">
      <t>opensocial.Environment.ObjectType</t>
      <t></t>
     </section>
     <section title="Field Details">
      <section title="ACTIVITY"
               anchor="opensocial.Environment.ObjectType.ACTIVITY">
       <t>&lt;static&gt; Member of:
       opensocial.Environment.ObjectType.ACTIVITY</t>
       <t>Description: This field may be used interchangeably with the string
       'activity'.</t>
      </section>
      <section title="ADDRESS"
               anchor="opensocial.Environment.ObjectType.ADDRESS">
       <t>&lt;static&gt; Member of:
       opensocial.Environment.ObjectType.ADDRESS</t>
       <t>Description: This field may be used interchangeably with the string
       'address'.</t>
      </section>
      <section title="BODY_TYPE"
               anchor="opensocial.Environment.ObjectType.BODY_TYPE">
       <t>&lt;static&gt; Member of:
       opensocial.Environment.ObjectType.BODY_TYPE</t>
       <t>Description: This field may be used interchangeably with the string
       'bodyType'.</t>
      </section>
      <section title="EMAIL"
               anchor="opensocial.Environment.ObjectType.EMAIL">
       <t>&lt;static&gt; Member of: opensocial.Environment.ObjectType.EMAIL</t>
       <t>Description: This field may be used interchangeably with the string
       'email'.</t>
      </section>
      <section title="FILTER_TYPE"
               anchor="opensocial.Environment.ObjectType.FILTER_TYPE">
       <t>&lt;static&gt; Member of:
       opensocial.Environment.ObjectType.FILTER_TYPE</t>
       <t>Description: This field may be used interchangeably with the string
       'filterType'.</t>
      </section>
      <section title="MEDIA_ITEM"
               anchor="opensocial.Environment.ObjectType.MEDIA_ITEM">
       <t>&lt;static&gt; Member of:
       opensocial.Environment.ObjectType.MEDIA_ITEM</t>
       <t>Description: This field may be used interchangeably with the string
       'mediaItem'.</t>
      </section>
      <section title="MESSAGE"
               anchor="opensocial.Environment.ObjectType.MESSAGE">
       <t>&lt;static&gt; Member of:
       opensocial.Environment.ObjectType.MESSAGE</t>
       <t>Description: This field may be used interchangeably with the string
       'message'.</t>
      </section>
      <section title="MESSAGE_TYPE"
               anchor="opensocial.Environment.ObjectType.MESSAGE_TYPE">
       <t>&lt;static&gt; Member of:
       opensocial.Environment.ObjectType.MESSAGE_TYPE</t>
       <t>Description: This field may be used interchangeably with the string
       'messageType'.</t>
      </section>
      <section title="NAME"
               anchor="opensocial.Environment.ObjectType.NAME">
       <t>&lt;static&gt; Member of: opensocial.Environment.ObjectType.NAME</t>
       <t>Description: This field may be used interchangeably with the string
       'name'.</t>
      </section>
      <section title="ORGANIZATION"
               anchor="opensocial.Environment.ObjectType.ORGANIZATION">
       <t>&lt;static&gt; Member of:
       opensocial.Environment.ObjectType.ORGANIZATION</t>
       <t>Description: This field may be used interchangeably with the string
       'organization'.</t>
      </section>
      <section title="PERSON"
               anchor="opensocial.Environment.ObjectType.PERSON">
       <t>&lt;static&gt; Member of:
       opensocial.Environment.ObjectType.PERSON</t>
       <t>Description: This field may be used interchangeably with the string
       'person'.</t>
      </section>
      <section title="PHONE"
               anchor="opensocial.Environment.ObjectType.PHONE">
       <t>&lt;static&gt; Member of: opensocial.Environment.ObjectType.PHONE</t>
       <t>Description: This field may be used interchangeably with the string
       'phone'.</t>
      </section>
      <section title="SORT_ORDER"
               anchor="opensocial.Environment.ObjectType.SORT_ORDER">
       <t>&lt;static&gt; Member of:
       opensocial.Environment.ObjectType.SORT_ORDER</t>
       <t>Description: This field may be used interchangeably with the string
       'sortOrder'.</t>
      </section>
      <section title="URL"
               anchor="opensocial.Environment.ObjectType.URL">
       <t>&lt;static&gt; Member of: opensocial.Environment.ObjectType.URL</t>
       <t>Description: This field may be used interchangeably with the string
       'url'.</t>
      </section>
     </section>
    </section>
    <section title="opensocial.EscapeType"
             anchor="opensocial.EscapeType">
     <!-- ============================== class summary ========================== -->
     <t>The types of escaping that can be applied to person data or fields.</t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.EscapeType.ctor">
      <t>opensocial.EscapeType</t>
      <t></t>
     </section>
     <section title="Field Details">
      <section title="HTML_ESCAPE"
               anchor="opensocial.EscapeType.HTML_ESCAPE">
       <t>&lt;static&gt; Member of: opensocial.EscapeType.HTML_ESCAPE</t>
       <t>Description: When used will HTML-escape the data. This field may be
       used interchangeably with the string 'htmlEscape'.</t>
      </section>
      <section title="NONE"
               anchor="opensocial.EscapeType.NONE">
       <t>&lt;static&gt; Member of: opensocial.EscapeType.NONE</t>
       <t>Description: When used will not escape the data. This field may be
       used interchangeably with the string 'none'.</t>
      </section>
     </section>
    </section>
    <section title="opensocial.IdSpec"
             anchor="opensocial.IdSpec">
     <!-- ============================== class summary ========================== -->
     <t>Base interface for all id spec objects.</t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.IdSpec.ctor">
      <t>opensocial.IdSpec()</t>
      <t></t>
     </section>
     <section title="Method Details">
      <section title="getField"
               anchor="opensocial.IdSpec.getField">
       <t>Type: {String} getField(key, opt_params)</t>
       <t>Description: Gets the id spec's data that's associated with the
       specified key.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>key</c>
        <c>String</c>
        <c>The key to get data for; see the 
        <xref target="opensocial.IdSpec.Field">Field</xref> class for possible
        values</c>
        <c>opt_params</c>
        <c>Map.&lt;opensocial.DataRequest.DataRequestFields|Object&gt;</c>
        <c>Additional 
        <xref target="opensocial.DataRequest.DataRequestFields">params</xref> to
        pass to the request.</c>
       </texttable></t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>String</c>
        <c>The data</c>
       </texttable></t>
      </section>
      <section title="setField"
               anchor="opensocial.IdSpec.setField">
       <t>setField(key, data)</t>
       <t>Description: Sets data for this id spec associated with the given
       key.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>key</c>
        <c>String</c>
        <c>The key to set data for</c>
        <c>data</c>
        <c>String</c>
        <c>The data to set</c>
       </texttable></t>
      </section>
     </section>
    </section>
    <section title="opensocial.IdSpec.Field"
             anchor="opensocial.IdSpec.Field">
     <!-- ============================== class summary ========================== -->
     <t>All of the fields that id specs can have. 
     <t>See also: 
     <xref target="opensocial.IdSpec.getField">
     opensocial.IdSpec.getField()</xref> </t></t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.IdSpec.Field.ctor">
      <t>opensocial.IdSpec.Field</t>
      <t></t>
     </section>
     <section title="Field Details">
      <section title="GROUP_ID"
               anchor="opensocial.IdSpec.Field.GROUP_ID">
       <t>&lt;static&gt; Member of: opensocial.IdSpec.Field.GROUP_ID</t>
       <t>Description: A string representing the group id or one of the
       opensocial.IdSpec.GroupId values. Defaults to SELF. This field may be
       used interchangeably with the string 'groupId'.</t>
      </section>
      <section title="NETWORK_DISTANCE"
               anchor="opensocial.IdSpec.Field.NETWORK_DISTANCE">
       <t>&lt;static&gt; Member of:
       opensocial.IdSpec.Field.NETWORK_DISTANCE</t>
       <t>Description: An optional numeric parameter, used to specify how many
       "hops" are allowed between two people still considered part of the same
       group. This is 0 based, for example: A value of 0 means that the people
       are the same person. 1 would mean that the people were friends. And 2
       would mean that there was a friend of a friend relationship. Defaults to
       1 (they are both friends or directly in the same group). Not all
       containers will support networkDistances greater than 1. This field may
       be used interchangeably with the string 'networkDistance'.</t>
      </section>
      <section title="USER_ID"
               anchor="opensocial.IdSpec.Field.USER_ID">
       <t>&lt;static&gt; Member of: opensocial.IdSpec.Field.USER_ID</t>
       <t>Description: A string or an array of strings representing the user
       id. Can be one of the opensocial.IdSpec.PersonId values. This field may
       be used interchangeably with the string 'userId'.</t>
      </section>
     </section>
    </section>
    <section title="opensocial.IdSpec.GroupId"
             anchor="opensocial.IdSpec.GroupId">
     <!-- ============================== class summary ========================== -->
     <t>Constant group IDs available when fetching collections of people.</t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.IdSpec.GroupId.ctor">
      <t>opensocial.IdSpec.GroupId</t>
      <t></t>
     </section>
     <section title="Field Details">
      <section title="ALL"
               anchor="opensocial.IdSpec.GroupId.ALL">
       <t>&lt;static&gt; Member of: opensocial.IdSpec.GroupId.ALL</t>
       <t>Description: This field may be used interchangeably with the string
       'ALL'.</t>
      </section>
      <section title="FRIENDS"
               anchor="opensocial.IdSpec.GroupId.FRIENDS">
       <t>&lt;static&gt; Member of: opensocial.IdSpec.GroupId.FRIENDS</t>
       <t>Description: This field may be used interchangeably with the string
       'FRIENDS'.</t>
      </section>
      <section title="SELF"
               anchor="opensocial.IdSpec.GroupId.SELF">
       <t>&lt;static&gt; Member of: opensocial.IdSpec.GroupId.SELF</t>
       <t>Description: This field may be used interchangeably with the string
       'SELF'.</t>
      </section>
     </section>
    </section>
    <section title="opensocial.IdSpec.PersonId"
             anchor="opensocial.IdSpec.PersonId">
     <!-- ============================== class summary ========================== -->
     <t>Constant person IDs available when fetching person information.</t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.IdSpec.PersonId.ctor">
      <t>opensocial.IdSpec.PersonId</t>
      <t></t>
     </section>
     <section title="Field Details">
      <section title="OWNER"
               anchor="opensocial.IdSpec.PersonId.OWNER">
       <t>&lt;static&gt; Member of: opensocial.IdSpec.PersonId.OWNER</t>
       <t>Description: This field may be used interchangeably with the string
       'OWNER'.</t>
      </section>
      <section title="VIEWER"
               anchor="opensocial.IdSpec.PersonId.VIEWER">
       <t>&lt;static&gt; Member of: opensocial.IdSpec.PersonId.VIEWER</t>
       <t>Description: This field may be used interchangeably with the string
       'VIEWER'.</t>
      </section>
     </section>
    </section>
    <section title="opensocial.MediaItem"
             anchor="opensocial.MediaItem">
     <!-- ============================== class summary ========================== -->
     <t>Represents images, movies, and audio. Create a MediaItem object using
     the 
     <xref target="opensocial.newMediaItem">
     opensocial.newMediaItem()</xref> method.</t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.MediaItem.ctor">
      <t>opensocial.MediaItem()</t>
      <t></t>
     </section>
     <section title="Method Details">
      <section title="getField"
               anchor="opensocial.MediaItem.getField">
       <t>Type: {String} getField(key, opt_params)</t>
       <t>Description: Gets the media item data that's associated with the
       specified key.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>key</c>
        <c>String</c>
        <c>The key to get data for; see the 
        <xref target="opensocial.MediaItem.Field">Field</xref> class for
        possible values</c>
        <c>opt_params</c>
        <c>Map.&lt;opensocial.DataRequest.DataRequestFields|Object&gt;</c>
        <c>Additional 
        <xref target="opensocial.DataRequest.DataRequestFields">params</xref> to
        pass to the request.</c>
       </texttable></t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>String</c>
        <c>The data</c>
       </texttable></t>
      </section>
      <section title="setField"
               anchor="opensocial.MediaItem.setField">
       <t>setField(key, data)</t>
       <t>Description: Sets data for this media item associated with the given
       key.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>key</c>
        <c>String</c>
        <c>The key to set data for</c>
        <c>data</c>
        <c>String</c>
        <c>The data to set</c>
       </texttable></t>
      </section>
     </section>
    </section>
    <section title="opensocial.MediaItem.Field"
             anchor="opensocial.MediaItem.Field">
     <!-- ============================== class summary ========================== -->
     <t>All of the fields that media items have. 
     <t>See also: 
     <xref target="opensocial.MediaItem.getField">
     opensocial.MediaItem.getField()</xref> </t></t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.MediaItem.Field.ctor">
      <t>opensocial.MediaItem.Field</t>
      <t></t>
     </section>
     <section title="Field Details">
      <section title="ALBUM_ID"
               anchor="opensocial.MediaItem.Field.ALBUM_ID">
       <t>&lt;static&gt; Member of: opensocial.MediaItem.Field.ALBUM_ID</t>
       <t>Description: string, album to which the media item belongs This field
       may be used interchangeably with the string 'albumId'.</t>
      </section>
      <section title="CREATED"
               anchor="opensocial.MediaItem.Field.CREATED">
       <t>&lt;static&gt; Member of: opensocial.MediaItem.Field.CREATED</t>
       <t>Description: string, creation time associated with the media item -
       assigned by container in UTC This field may be used interchangeably with
       the string 'created'.</t>
      </section>
      <section title="DESCRIPTION"
               anchor="opensocial.MediaItem.Field.DESCRIPTION">
       <t>&lt;static&gt; Member of: opensocial.MediaItem.Field.DESCRIPTION</t>
       <t>Description: string, description of the media item This field may be
       used interchangeably with the string 'description'.</t>
      </section>
      <section title="DURATION"
               anchor="opensocial.MediaItem.Field.DURATION">
       <t>&lt;static&gt; Member of: opensocial.MediaItem.Field.DURATION</t>
       <t>Description: integer, for audio/video clips - playtime length in
       seconds. set to -1/not defined if unknown This field may be used
       interchangeably with the string 'duration'.</t>
      </section>
      <section title="FILE_SIZE"
               anchor="opensocial.MediaItem.Field.FILE_SIZE">
       <t>&lt;static&gt; Member of: opensocial.MediaItem.Field.FILE_SIZE</t>
       <t>Description: long, number of bytes (set to -1/undefined if unknown).
       This field may be used interchangeably with the string 'fileSize'.</t>
      </section>
      <section title="ID"
               anchor="opensocial.MediaItem.Field.ID">
       <t>&lt;static&gt; Member of: opensocial.MediaItem.Field.ID</t>
       <t>Description: string, id Associated with the media item This field may
       be used interchangeably with the string 'id'.</t>
      </section>
      <section title="LANGUAGE"
               anchor="opensocial.MediaItem.Field.LANGUAGE">
       <t>&lt;static&gt; Member of: opensocial.MediaItem.Field.LANGUAGE</t>
       <t>Description: string, language associated with the media item in ISO
       639-3 format This field may be used interchangeably with the string
       'language'.</t>
      </section>
      <section title="LAST_UPDATED"
               anchor="opensocial.MediaItem.Field.LAST_UPDATED">
       <t>&lt;static&gt; Member of: opensocial.MediaItem.Field.LAST_UPDATED</t>
       <t>Description: string, update time associated with the media item -
       assigned by container in UTC This field may be used interchangeably with
       the string 'lastUpdated'.</t>
      </section>
      <section title="LOCATION"
               anchor="opensocial.MediaItem.Field.LOCATION">
       <t>&lt;static&gt; Member of: opensocial.MediaItem.Field.LOCATION</t>
       <t>Description: opensocial.Address, location corresponding to the media
       item This field may be used interchangeably with the string
       'location'.</t>
      </section>
      <section title="MIME_TYPE"
               anchor="opensocial.MediaItem.Field.MIME_TYPE">
       <t>&lt;static&gt; Member of: opensocial.MediaItem.Field.MIME_TYPE</t>
       <t>Description: The MIME type of media, specified as a string. This
       field may be used interchangeably with the string 'mimeType'.</t>
      </section>
      <section title="NUM_COMMENTS"
               anchor="opensocial.MediaItem.Field.NUM_COMMENTS">
       <t>&lt;static&gt; Member of: opensocial.MediaItem.Field.NUM_COMMENTS</t>
       <t>Description: integer, number of comments on the photo. This field may
       be used interchangeably with the string 'numComments'.</t>
      </section>
      <section title="NUM_VIEWS"
               anchor="opensocial.MediaItem.Field.NUM_VIEWS">
       <t>&lt;static&gt; Member of: opensocial.MediaItem.Field.NUM_VIEWS</t>
       <t>Description: integer, number of views for the media item. This field
       may be used interchangeably with the string 'numViews'.</t>
      </section>
      <section title="NUM_VOTES"
               anchor="opensocial.MediaItem.Field.NUM_VOTES">
       <t>&lt;static&gt; Member of: opensocial.MediaItem.Field.NUM_VOTES</t>
       <t>Description: integer, number of votes received for voting. This field
       may be used interchangeably with the string 'numVotes'.</t>
      </section>
      <section title="RATING"
               anchor="opensocial.MediaItem.Field.RATING">
       <t>&lt;static&gt; Member of: opensocial.MediaItem.Field.RATING</t>
       <t>Description: integer, average rating of the media item on a scale of
       0-10. This field may be used interchangeably with the string
       'rating'.</t>
      </section>
      <section title="START_TIME"
               anchor="opensocial.MediaItem.Field.START_TIME">
       <t>&lt;static&gt; Member of: opensocial.MediaItem.Field.START_TIME</t>
       <t>Description: string, for streaming/live content, time when the
       content is available. This field may be used interchangeably with the
       string 'startTime'.</t>
      </section>
      <section title="TAGGED_PEOPLE"
               anchor="opensocial.MediaItem.Field.TAGGED_PEOPLE">
       <t>&lt;static&gt; Member of:
       opensocial.MediaItem.Field.TAGGED_PEOPLE</t>
       <t>Description: array of strings, array of string (IDs) of people tagged
       in the media item This field may be used interchangeably with the string
       'taggedPeople'.</t>
      </section>
      <section title="TAGS"
               anchor="opensocial.MediaItem.Field.TAGS">
       <t>&lt;static&gt; Member of: opensocial.MediaItem.Field.TAGS</t>
       <t>Description: array of strings, tags associated with this media item.
       This field may be used interchangeably with the string 'tags'.</t>
      </section>
      <section title="THUMBNAIL_URL"
               anchor="opensocial.MediaItem.Field.THUMBNAIL_URL">
       <t>&lt;static&gt; Member of:
       opensocial.MediaItem.Field.THUMBNAIL_URL</t>
       <t>Description: string, URL to a thumbnail image of the media item This
       field may be used interchangeably with the string 'thumbnailUrl'.</t>
      </section>
      <section title="TITLE"
               anchor="opensocial.MediaItem.Field.TITLE">
       <t>&lt;static&gt; Member of: opensocial.MediaItem.Field.TITLE</t>
       <t>Description: string describing the media item This field may be used
       interchangeably with the string 'title'.</t>
      </section>
      <section title="TYPE"
               anchor="opensocial.MediaItem.Field.TYPE">
       <t>&lt;static&gt; Member of: opensocial.MediaItem.Field.TYPE</t>
       <t>Description: The type of media, specified as a 
       <xref target="opensocial.MediaItem.Type">MediaItem.Type</xref> object.
       This field may be used interchangeably with the string 'type'.</t>
      </section>
      <section title="URL"
               anchor="opensocial.MediaItem.Field.URL">
       <t>&lt;static&gt; Member of: opensocial.MediaItem.Field.URL</t>
       <t>Description: A string specifying the URL where the media can be
       found. This field may be used interchangeably with the string 'url'.</t>
      </section>
     </section>
    </section>
    <section title="opensocial.MediaItem.Type"
             anchor="opensocial.MediaItem.Type">
     <!-- ============================== class summary ========================== -->
     <t>The possible types of media items. 
     <t>See also: 
     <xref target="opensocial.MediaItem.Field">
     opensocial.MediaItem.Field</xref> </t></t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.MediaItem.Type.ctor">
      <t>opensocial.MediaItem.Type</t>
      <t></t>
     </section>
     <section title="Field Details">
      <section title="AUDIO"
               anchor="opensocial.MediaItem.Type.AUDIO">
       <t>&lt;static&gt; Member of: opensocial.MediaItem.Type.AUDIO</t>
       <t>Description: This field may be used interchangeably with the string
       'audio'.</t>
      </section>
      <section title="IMAGE"
               anchor="opensocial.MediaItem.Type.IMAGE">
       <t>&lt;static&gt; Member of: opensocial.MediaItem.Type.IMAGE</t>
       <t>Description: This field may be used interchangeably with the string
       'image'.</t>
      </section>
      <section title="VIDEO"
               anchor="opensocial.MediaItem.Type.VIDEO">
       <t>&lt;static&gt; Member of: opensocial.MediaItem.Type.VIDEO</t>
       <t>Description: This field may be used interchangeably with the string
       'video'.</t>
      </section>
     </section>
    </section>
    <section title="opensocial.Message"
             anchor="opensocial.Message">
     <!-- ============================== class summary ========================== -->
     <t>Base interface for all message objects. * 
     <t>See also: 
     <xref target="opensocial.newMessage">opensocial.newMessage()</xref>, 
     <xref target="opensocial.requestSendMessage">
     opensocial.requestSendMessage()</xref> </t></t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.Message.ctor">
      <t>opensocial.Message()</t>
      <t></t>
     </section>
     <section title="Method Details">
      <section title="getField"
               anchor="opensocial.Message.getField">
       <t>Type: {String} getField(key, opt_params)</t>
       <t>Description: Gets the message data that's associated with the
       specified key.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>key</c>
        <c>String</c>
        <c>The key to get data for; see the 
        <xref target="opensocial.Message.Field">Field</xref> class for possible
        values</c>
        <c>opt_params</c>
        <c>Map.&lt;opensocial.DataRequest.DataRequestFields|Object&gt;</c>
        <c>Additional 
        <xref target="opensocial.DataRequest.DataRequestFields">params</xref> to
        pass to the request.</c>
       </texttable></t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>String</c>
        <c>The data</c>
       </texttable></t>
      </section>
      <section title="setField"
               anchor="opensocial.Message.setField">
       <t>setField(key, data)</t>
       <t>Description: Sets data for this message associated with the given
       key.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>key</c>
        <c>String</c>
        <c>The key to set data for</c>
        <c>data</c>
        <c>String</c>
        <c>The data to set</c>
       </texttable></t>
      </section>
     </section>
    </section>
    <section title="opensocial.Message.Field"
             anchor="opensocial.Message.Field">
     <!-- ============================== class summary ========================== -->
     <t>All of the fields that messages can have. 
     <t>See also: 
     <xref target="opensocial.Message.getField">
     opensocial.Message.getField()</xref> </t></t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.Message.Field.ctor">
      <t>opensocial.Message.Field</t>
      <t></t>
     </section>
     <section title="Field Details">
      <section title="APP_URL"
               anchor="opensocial.Message.Field.APP_URL">
       <t>&lt;static&gt; Member of: opensocial.Message.Field.APP_URL</t>
       <t>Description: Identifies the application that generated this message.
       This field may be used interchangeably with the string 'appUrl'.</t>
      </section>
      <section title="BODY"
               anchor="opensocial.Message.Field.BODY">
       <t>&lt;static&gt; Member of: opensocial.Message.Field.BODY</t>
       <t>Description: The main text of the message. HTML attributes are
       allowed and are sanitized by the container. This field may be used
       interchangeably with the string 'body'.</t>
      </section>
      <section title="BODY_ID"
               anchor="opensocial.Message.Field.BODY_ID">
       <t>&lt;static&gt; Member of: opensocial.Message.Field.BODY_ID</t>
       <t>Description: The main text of the message as a message template.
       Specifies the message ID to use in the gadget xml. This field may be
       used interchangeably with the string 'bodyId'.</t>
      </section>
      <section title="COLLECTION_IDS"
               anchor="opensocial.Message.Field.COLLECTION_IDS">
       <t>&lt;static&gt; Member of: opensocial.Message.Field.COLLECTION_IDS</t>
       <t>Description: Identifies the messages collection IDs this message is
       contained in. This field may be used interchangeably with the string
       'collectionIds'.</t>
      </section>
      <section title="ID"
               anchor="opensocial.Message.Field.ID">
       <t>&lt;static&gt; Member of: opensocial.Message.Field.ID</t>
       <t>Description: unique ID for this message. This field may be used
       interchangeably with the string 'id'.</t>
      </section>
      <section title="IN_REPLY_TO"
               anchor="opensocial.Message.Field.IN_REPLY_TO">
       <t>&lt;static&gt; Member of: opensocial.Message.Field.IN_REPLY_TO</t>
       <t>Description: Message ID, use for threaded comments/messages.
       Reference the sematics of the Atom Threading model defined in rfc4685.
       URLs should be mapped to Atom &lt;link rel="type" .../&gt; This field
       may be used interchangeably with the string 'inReplyTo'.</t>
      </section>
      <section title="RECIPIENTS"
               anchor="opensocial.Message.Field.RECIPIENTS">
       <t>&lt;static&gt; Member of: opensocial.Message.Field.RECIPIENTS</t>
       <t>Description: Array of person IDs. This field may be used
       interchangeably with the string 'recipients'.</t>
      </section>
      <section title="REPLIES"
               anchor="opensocial.Message.Field.REPLIES">
       <t>&lt;static&gt; Member of: opensocial.Message.Field.REPLIES</t>
       <t>Description: array of message ids. Reference the sematics of the Atom
       Threading model defined in rfc4685. URLs should be mapped to Atom
       &lt;link rel="type" .../&gt; This field may be used interchangeably with
       the string 'replies'.</t>
      </section>
      <section title="SENDER_ID"
               anchor="opensocial.Message.Field.SENDER_ID">
       <t>&lt;static&gt; Member of: opensocial.Message.Field.SENDER_ID</t>
       <t>Description: id of person who sent the message. This field may be
       used interchangeably with the string 'senderId'.</t>
      </section>
      <section title="STATUS"
               anchor="opensocial.Message.Field.STATUS">
       <t>&lt;static&gt; Member of: opensocial.Message.Field.STATUS</t>
       <t>Description: Status of the message. (NEW, READ, DELETED). This field
       may be used interchangeably with the string 'status'.</t>
      </section>
      <section title="TIME_SENT"
               anchor="opensocial.Message.Field.TIME_SENT">
       <t>&lt;static&gt; Member of: opensocial.Message.Field.TIME_SENT</t>
       <t>Description: UTC time message was sent. This field may be used
       interchangeably with the string 'timeSent'.</t>
      </section>
      <section title="TITLE"
               anchor="opensocial.Message.Field.TITLE">
       <t>&lt;static&gt; Member of: opensocial.Message.Field.TITLE</t>
       <t>Description: The title of the message. HTML attributes are allowed
       and are sanitized by the container. This field may be used
       interchangeably with the string 'title'.</t>
      </section>
      <section title="TITLE_ID"
               anchor="opensocial.Message.Field.TITLE_ID">
       <t>&lt;static&gt; Member of: opensocial.Message.Field.TITLE_ID</t>
       <t>Description: The title of the message as a message template.
       Specifies the message ID to use in the gadget xml. This field may be
       used interchangeably with the string 'titleId'.</t>
      </section>
      <section title="TYPE"
               anchor="opensocial.Message.Field.TYPE">
       <t>&lt;static&gt; Member of: opensocial.Message.Field.TYPE</t>
       <t>Description: The title of the message, specified as an
       opensocial.Message.Type. This field may be used interchangeably with the
       string 'type'.</t>
      </section>
      <section title="UPDATED"
               anchor="opensocial.Message.Field.UPDATED">
       <t>&lt;static&gt; Member of: opensocial.Message.Field.UPDATED</t>
       <t>Description: last update for this message . This field may be used
       interchangeably with the string 'updated'.</t>
      </section>
      <section title="URLS"
               anchor="opensocial.Message.Field.URLS">
       <t>&lt;static&gt; Member of: opensocial.Message.Field.URLS</t>
       <t>Description: List of related URLs for this message. Supported URL
       types include 'alternate', alternate for for this mailbox (text/html
       being the most common). This field may be used interchangeably with the
       string 'urls'.</t>
      </section>
     </section>
    </section>
    <section title="opensocial.MessageCollection"
             anchor="opensocial.MessageCollection">
     <!-- ============================== class summary ========================== -->
     <t>Class for MessageCollection features.</t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.MessageCollection.ctor">
      <t>opensocial.MessageCollection</t>
      <t></t>
     </section>
     <section title="Method Details">
      <section title="getField"
               anchor="opensocial.MessageCollection.getField">
       <t>Type: {String} getField(key, opt_params)</t>
       <t>Description: Gets the MessageCollection data that's associated with
       the specified key.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>key</c>
        <c>String</c>
        <c>The key to get data for; see the 
        <xref target="opensocial.MessageCollection.Field">Field</xref> class for
        possible values</c>
        <c>opt_params</c>
        <c>Map.&lt;opensocial.DataRequest.DataRequestFields|Object&gt;</c>
        <c>Additional 
        <xref target="opensocial.DataRequest.DataRequestFields">params</xref> to
        pass to the request.</c>
       </texttable></t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>String</c>
        <c>The data</c>
       </texttable></t>
      </section>
      <section title="setField"
               anchor="opensocial.MessageCollection.setField">
       <t>setField(key, data)</t>
       <t>Description: Sets data for this album associated with the given
       key.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>key</c>
        <c>String</c>
        <c>The key to set data for</c>
        <c>data</c>
        <c>String</c>
        <c>The data to set</c>
       </texttable></t>
      </section>
     </section>
    </section>
    <section title="opensocial.MessageCollection.Field"
             anchor="opensocial.MessageCollection.Field">
     <!-- ============================== class summary ========================== -->
     <t>All of the fields that a MessageCollection can have. 
     <t>It is only required to set ID.</t>
     <t>See also: 
     <xref target="opensocial.MessageCollection.getField">
     opensocial.MessageCollection.getField()</xref> </t></t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.MessageCollection.Field.ctor">
      <t>opensocial.MessageCollection.Field</t>
      <t></t>
     </section>
     <section title="Field Details">
      <section title="ID"
               anchor="opensocial.MessageCollection.Field.ID">
       <t>&lt;static&gt; Member of: opensocial.MessageCollection.Field.ID</t>
       <t>Description: string, unique ID for this message collection. May be
       used interchangeably with the string 'id'.</t>
      </section>
      <section title="TITLE"
               anchor="opensocial.MessageCollection.Field.TITLE">
       <t>&lt;static&gt; Member of:
       opensocial.MessageCollection.Field.TITLE</t>
       <t>Description: string, the title of the MessageCollection. May be used
       interchangeably with the string 'title'.</t>
      </section>
      <section title="TOTAL"
               anchor="opensocial.MessageCollection.Field.TOTAL">
       <t>&lt;static&gt; Member of:
       opensocial.MessageCollection.Field.TOTAL</t>
       <t>Description: int, total number of messages in this group. May be used
       interchangeably with the string 'total'.</t>
      </section>
      <section title="UNREAD"
               anchor="opensocial.MessageCollection.Field.UNREAD">
       <t>&lt;static&gt; Member of:
       opensocial.MessageCollection.Field.UNREAD</t>
       <t>Description: int, number of unread messages in this group. May be
       used interchangeably with the string 'unread'.</t>
      </section>
      <section title="UPDATED"
               anchor="opensocial.MessageCollection.Field.UPDATED">
       <t>&lt;static&gt; Member of:
       opensocial.MessageCollection.Field.UPDATED</t>
       <t>Description: string, last datetime update for this message
       collection. May be used interchangeably with the string 'updated'.</t>
      </section>
      <section title="URLS"
               anchor="opensocial.MessageCollection.Field.URLS">
       <t>&lt;static&gt; Member of: opensocial.MessageCollection.Field.URLS</t>
       <t>Description: opensocial.Url, List of related URLs for this message
       collection. Supported URL types include: 1. icon: icon for this mailbox
       2. alternate: alternate form for this mailbox (text/html being the most
       common) May be used interchangeably with the string 'urls'.</t>
      </section>
     </section>
    </section>
    <section title="opensocial.Name"
             anchor="opensocial.Name">
     <!-- ============================== class summary ========================== -->
     <t>Base interface for all name objects.</t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.Name.ctor">
      <t>opensocial.Name()</t>
      <t></t>
     </section>
     <section title="Method Details">
      <section title="getField"
               anchor="opensocial.Name.getField">
       <t>Type: {String} getField(key, opt_params)</t>
       <t>Description: Gets data for this name that is associated with the
       specified key.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>key</c>
        <c>String</c>
        <c>The key to get data for; keys are defined in 
        <xref target="opensocial.Name.Field">Name.Field</xref> </c>
        <c>opt_params</c>
        <c>Map.&lt;opensocial.DataRequest.DataRequestFields|Object&gt;</c>
        <c>Additional 
        <xref target="opensocial.DataRequest.DataRequestFields">params</xref> to
        pass to the request.</c>
       </texttable></t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>String</c>
        <c>The data</c>
       </texttable></t>
      </section>
     </section>
    </section>
    <section title="opensocial.Name.Field"
             anchor="opensocial.Name.Field">
     <!-- ============================== class summary ========================== -->
     <t>All of the fields that a name has. These are the supported keys for the
     
     <xref target="opensocial.Name.getField">Name.getField()</xref> method.</t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.Name.Field.ctor">
      <t>opensocial.Name.Field</t>
      <t></t>
     </section>
     <section title="Field Details">
      <section title="ADDITIONAL_NAME"
               anchor="opensocial.Name.Field.ADDITIONAL_NAME">
       <t>&lt;static&gt; Member of: opensocial.Name.Field.ADDITIONAL_NAME</t>
       <t>Description: The additional name, specified as a string. This field
       may be used interchangeably with the string 'additionalName'.</t>
      </section>
      <section title="FAMILY_NAME"
               anchor="opensocial.Name.Field.FAMILY_NAME">
       <t>&lt;static&gt; Member of: opensocial.Name.Field.FAMILY_NAME</t>
       <t>Description: The family name, specified as a string. This field may
       be used interchangeably with the string 'familyName'.</t>
      </section>
      <section title="GIVEN_NAME"
               anchor="opensocial.Name.Field.GIVEN_NAME">
       <t>&lt;static&gt; Member of: opensocial.Name.Field.GIVEN_NAME</t>
       <t>Description: The given name, specified as a string. This field may be
       used interchangeably with the string 'givenName'.</t>
      </section>
      <section title="HONORIFIC_PREFIX"
               anchor="opensocial.Name.Field.HONORIFIC_PREFIX">
       <t>&lt;static&gt; Member of: opensocial.Name.Field.HONORIFIC_PREFIX</t>
       <t>Description: The honorific prefix, specified as a string. This field
       may be used interchangeably with the string 'honorificPrefix'.</t>
      </section>
      <section title="HONORIFIC_SUFFIX"
               anchor="opensocial.Name.Field.HONORIFIC_SUFFIX">
       <t>&lt;static&gt; Member of: opensocial.Name.Field.HONORIFIC_SUFFIX</t>
       <t>Description: The honorific suffix, specified as a string. This field
       may be used interchangeably with the string 'honorificSuffix'.</t>
      </section>
      <section title="UNSTRUCTURED"
               anchor="opensocial.Name.Field.UNSTRUCTURED">
       <t>&lt;static&gt; Member of: opensocial.Name.Field.UNSTRUCTURED</t>
       <t>Description: The unstructured name, specified as a string. This field
       may be used interchangeably with the string 'unstructured'.</t>
      </section>
     </section>
    </section>
    <section title="opensocial.NavigationParameters"
             anchor="opensocial.NavigationParameters">
     <!-- ============================== class summary ========================== -->
     <t>Parameters used by RequestShareApp to instruct the container on where
     to go after the request is made. It could be used, for example, to specify
     where viewers get routed in one of two cases: 
     <list style="numbers">
      <t>After a user gets a shareApp invitation or receives a message a gadget
      developer should be able to send that user to a context sensitive
      place.</t>
      <t>After a viewer actually shares an app with someone else the gadget
      developer should be able to redirect the viewer to a context sensitive
      place.</t>
     </list></t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.NavigationParameters.ctor">
      <t>opensocial.NavigationParameters()</t>
      <t></t>
     </section>
     <section title="Method Details">
      <section title="getField"
               anchor="opensocial.NavigationParameters.getField">
       <t>Type: {String} getField(key, opt_params)</t>
       <t>Description: Gets the NavigationParameters' data that's associated
       with the specified key.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>key</c>
        <c>String</c>
        <c>The key to get data for; see the 
        <xref target="opensocial.NavigationParameters.Field">Field</xref> class
        for possible values</c>
        <c>opt_params</c>
        <c>Map.&lt;opensocial.DataRequest.DataRequestFields|Object&gt;</c>
        <c>Additional 
        <xref target="opensocial.DataRequest.DataRequestFields">params</xref> to
        pass to the request.</c>
       </texttable></t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>String</c>
        <c>The data</c>
       </texttable></t>
      </section>
      <section title="setField"
               anchor="opensocial.NavigationParameters.setField">
       <t>setField(key, data)</t>
       <t>Description: Sets data for this NavigationParameters associated with
       the given key.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>key</c>
        <c>String</c>
        <c>The key to set data for</c>
        <c>data</c>
        <c>Object</c>
        <c>The data to set</c>
       </texttable></t>
      </section>
     </section>
    </section>
    <section title="opensocial.NavigationParameters.DestinationType"
             anchor="opensocial.NavigationParameters.DestinationType">
     <!-- ============================== class summary ========================== -->
     <t>The destinations available for navigation in 
     <xref target="opensocial.requestShareApp">requestShareApp</xref> and 
     <xref target="opensocial.requestSendMessage">
     requestSendMessage</xref>.</t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.NavigationParameters.DestinationType.ctor">
      <t>opensocial.NavigationParameters.DestinationType</t>
      <t></t>
     </section>
     <section title="Field Details">
      <section title="RECIPIENT_DESTINATION"
               anchor="opensocial.NavigationParameters.DestinationType.RECIPIENT_DESTINATION">
       <t>&lt;static&gt; Member of:
       opensocial.NavigationParameters.DestinationType.RECIPIENT_DESTINATION</t>
       <t>Description: This field may be used interchangeably with the string
       'recipientDestination'.</t>
      </section>
      <section title="VIEWER_DESTINATION"
               anchor="opensocial.NavigationParameters.DestinationType.VIEWER_DESTINATION">
       <t>&lt;static&gt; Member of:
       opensocial.NavigationParameters.DestinationType.VIEWER_DESTINATION</t>
       <t>Description: This field may be used interchangeably with the string
       'viewerDestination'.</t>
      </section>
     </section>
    </section>
    <section title="opensocial.NavigationParameters.Field"
             anchor="opensocial.NavigationParameters.Field">
     <!-- ============================== class summary ========================== -->
     <t>All of the fields that NavigationParameters can have. 
     <t>See also: 
     <xref target="opensocial.NavigationParameters.getField">
     opensocial.NavigationParameters.getField()</xref> </t></t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.NavigationParameters.Field.ctor">
      <t>opensocial.NavigationParameters.Field</t>
      <t></t>
     </section>
     <section title="Field Details">
      <section title="OWNER"
               anchor="opensocial.NavigationParameters.Field.OWNER">
       <t>&lt;static&gt; Member of:
       opensocial.NavigationParameters.Field.OWNER</t>
       <t>Description: A string representing the owner id. This field may be
       used interchangeably with the string 'owner'.</t>
      </section>
      <section title="PARAMETERS"
               anchor="opensocial.NavigationParameters.Field.PARAMETERS">
       <t>&lt;static&gt; Member of:
       opensocial.NavigationParameters.Field.PARAMETERS</t>
       <t>Description: An optional list of parameters passed to the gadget once
       the new view, with the new owner, has been loaded. This field may be
       used interchangeably with the string 'parameters'.</t>
      </section>
      <section title="VIEW"
               anchor="opensocial.NavigationParameters.Field.VIEW">
       <t>&lt;static&gt; Member of:
       opensocial.NavigationParameters.Field.VIEW</t>
       <t>Description: The gadgets.views.View to navigate to. This field may be
       used interchangeably with the string 'view'.</t>
      </section>
     </section>
    </section>
    <section title="opensocial.Organization"
             anchor="opensocial.Organization">
     <!-- ============================== class summary ========================== -->
     <t>Base interface for all organization objects.</t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.Organization.ctor">
      <t>opensocial.Organization()</t>
      <t></t>
     </section>
     <section title="Method Details">
      <section title="getField"
               anchor="opensocial.Organization.getField">
       <t>Type: {String} getField(key, opt_params)</t>
       <t>Description: Gets data for this body type that is associated with the
       specified key.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>key</c>
        <c>String</c>
        <c>The key to get data for; keys are defined in 
        <xref target="opensocial.Organization.Field">
        Organization.Field</xref> </c>
        <c>opt_params</c>
        <c>Map.&lt;opensocial.DataRequest.DataRequestFields|Object&gt;</c>
        <c>Additional 
        <xref target="opensocial.DataRequest.DataRequestFields">params</xref> to
        pass to the request</c>
       </texttable></t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>String</c>
        <c>The data</c>
       </texttable></t>
      </section>
     </section>
    </section>
    <section title="opensocial.Organization.Field"
             anchor="opensocial.Organization.Field">
     <!-- ============================== class summary ========================== -->
     <t>All of the fields that a organization has. These are the supported keys
     for the 
     <xref target="opensocial.Organization.getField">
     Organization.getField()</xref> method.</t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.Organization.Field.ctor">
      <t>opensocial.Organization.Field</t>
      <t></t>
     </section>
     <section title="Field Details">
      <section title="ADDRESS"
               anchor="opensocial.Organization.Field.ADDRESS">
       <t>&lt;static&gt; Member of: opensocial.Organization.Field.ADDRESS</t>
       <t>Description: The address of the organization, specified as an
       opensocial.Address. Container support for this field is OPTIONAL. This
       field may be used interchangeably with the string 'address'.</t>
      </section>
      <section title="DESCRIPTION"
               anchor="opensocial.Organization.Field.DESCRIPTION">
       <t>&lt;static&gt; Member of:
       opensocial.Organization.Field.DESCRIPTION</t>
       <t>Description: A description or notes about the person's work in the
       organization, specified as a string. This could be the courses taken by
       a student, or a more detailed description about a Organization role.
       Container support for this field is OPTIONAL. This field may be used
       interchangeably with the string 'description'.</t>
      </section>
      <section title="END_DATE"
               anchor="opensocial.Organization.Field.END_DATE">
       <t>&lt;static&gt; Member of: opensocial.Organization.Field.END_DATE</t>
       <t>Description: The date the person stopped at the organization,
       specified as a Date. A null date indicates that the person is still
       involved with the organization. Container support for this field is
       OPTIONAL. This field may be used interchangeably with the string
       'endDate'.</t>
      </section>
      <section title="FIELD"
               anchor="opensocial.Organization.Field.FIELD">
       <t>&lt;static&gt; Member of: opensocial.Organization.Field.FIELD</t>
       <t>Description: The field the organization is in, specified as a string.
       This could be the degree pursued if the organization is a school.
       Container support for this field is OPTIONAL. This field may be used
       interchangeably with the string 'field'.</t>
      </section>
      <section title="NAME"
               anchor="opensocial.Organization.Field.NAME">
       <t>&lt;static&gt; Member of: opensocial.Organization.Field.NAME</t>
       <t>Description: The name of the organization, specified as a string. For
       example, could be a school name or a job company. Container support for
       this field is OPTIONAL. This field may be used interchangeably with the
       string 'name'.</t>
      </section>
      <section title="SALARY"
               anchor="opensocial.Organization.Field.SALARY">
       <t>&lt;static&gt; Member of: opensocial.Organization.Field.SALARY</t>
       <t>Description: The salary the person receieves from the organization,
       specified as a string. Container support for this field is OPTIONAL.
       This field may be used interchangeably with the string 'salary'.</t>
      </section>
      <section title="START_DATE"
               anchor="opensocial.Organization.Field.START_DATE">
       <t>&lt;static&gt; Member of:
       opensocial.Organization.Field.START_DATE</t>
       <t>Description: The date the person started at the organization,
       specified as a Date. Container support for this field is OPTIONAL. This
       field may be used interchangeably with the string 'startDate'.</t>
      </section>
      <section title="SUB_FIELD"
               anchor="opensocial.Organization.Field.SUB_FIELD">
       <t>&lt;static&gt; Member of: opensocial.Organization.Field.SUB_FIELD</t>
       <t>Description: The subfield the Organization is in, specified as a
       string. Container support for this field is OPTIONAL. This field may be
       used interchangeably with the string 'subField'.</t>
      </section>
      <section title="TITLE"
               anchor="opensocial.Organization.Field.TITLE">
       <t>&lt;static&gt; Member of: opensocial.Organization.Field.TITLE</t>
       <t>Description: The title or role the person has in the organization,
       specified as a string. This could be graduate student, or software
       engineer. Container support for this field is OPTIONAL. This field may
       be used interchangeably with the string 'title'.</t>
      </section>
      <section title="WEBPAGE"
               anchor="opensocial.Organization.Field.WEBPAGE">
       <t>&lt;static&gt; Member of: opensocial.Organization.Field.WEBPAGE</t>
       <t>Description: A webpage related to the organization, specified as a
       string. Container support for this field is OPTIONAL. This field may be
       used interchangeably with the string 'webpage'.</t>
      </section>
     </section>
    </section>
    <section title="opensocial.Permission"
             anchor="opensocial.Permission">
     <!-- ============================== class summary ========================== -->
     <t>The permissions an app can ask for. 
     <t>See also: 
     <xref target="opensocial.hasPermission">opensocial.hasPermission()</xref>,
     
     <xref target="opensocial.requestPermission">
     opensocial.requestPermission()</xref> </t></t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.Permission.ctor">
      <t>opensocial.Permission</t>
      <t></t>
     </section>
     <section title="Field Details">
      <section title="VIEWER"
               anchor="opensocial.Permission.VIEWER">
       <t>&lt;static&gt; Member of: opensocial.Permission.VIEWER</t>
       <t>Description: Access to the viewer person object This field may be
       used interchangeably with the string 'viewer'.</t>
      </section>
     </section>
    </section>
    <section title="opensocial.Person"
             anchor="opensocial.Person">
     <!-- ============================== class summary ========================== -->
     <t>Base interface for all person objects.</t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.Person.ctor">
      <t>opensocial.Person()</t>
      <t></t>
     </section>
     <section title="Method Details">
      <section title="getAppData"
               anchor="opensocial.Person.getAppData">
       <t>Type: {String} getAppData(key)</t>
       <t>Description: Gets the app data for this person that is associated
       with the specified key.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>key</c>
        <c>String</c>
        <c>The key to get app data for.</c>
       </texttable></t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>String</c>
        <c>The corresponding app data.</c>
       </texttable></t>
      </section>
      <section title="getDisplayName"
               anchor="opensocial.Person.getDisplayName">
       <t>Type: {String} getDisplayName()</t>
       <t>Description: Gets a text display name for this person; guaranteed to
       return a useful string.</t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>String</c>
        <c>The display name</c>
       </texttable></t>
      </section>
      <section title="getField"
               anchor="opensocial.Person.getField">
       <t>Type: {String} getField(key, opt_params)</t>
       <t>Description: Gets data for this person that is associated with the
       specified key.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>key</c>
        <c>String</c>
        <c>The key to get data for; keys are defined in 
        <xref target="opensocial.Person.Field">Person.Field</xref> </c>
        <c>opt_params</c>
        <c>Map.&lt;opensocial.DataRequest.DataRequestFields|Object&gt;</c>
        <c>Additional 
        <xref target="opensocial.DataRequest.DataRequestFields">params</xref> to
        pass to the request.</c>
       </texttable></t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>String</c>
        <c>The data</c>
       </texttable></t>
      </section>
      <section title="getId"
               anchor="opensocial.Person.getId">
       <t>Type: {String} getId()</t>
       <t>Description: Gets an ID that can be permanently associated with this
       person.</t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>String</c>
        <c>The ID</c>
       </texttable></t>
      </section>
      <section title="isOwner"
               anchor="opensocial.Person.isOwner">
       <t>Type: {Boolean} isOwner()</t>
       <t>Description: Returns true if this person object represents the owner
       of the current page.</t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>Boolean</c>
        <c>True if this is the owner of the page; otherwise, false</c>
       </texttable></t>
      </section>
      <section title="isViewer"
               anchor="opensocial.Person.isViewer">
       <t>Type: {Boolean} isViewer()</t>
       <t>Description: Returns true if this person object represents the
       currently logged in user.</t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>Boolean</c>
        <c>True if this is the currently logged in user; otherwise, false</c>
       </texttable></t>
      </section>
     </section>
    </section>
    <section title="opensocial.Person.Field"
             anchor="opensocial.Person.Field">
     <!-- ============================== class summary ========================== -->
     <t>All of the fields that a person has. These are the supported keys for
     the 
     <xref target="opensocial.Person.getField">
     Person.getField()</xref> method.</t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.Person.Field.ctor">
      <t>opensocial.Person.Field</t>
      <t></t>
     </section>
     <section title="Field Details">
      <section title="ABOUT_ME"
               anchor="opensocial.Person.Field.ABOUT_ME">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.ABOUT_ME</t>
       <t>Description: A general statement about the person, specified as a
       string. Container support for this field is OPTIONAL. This field may be
       used interchangeably with the string 'aboutMe'.</t>
      </section>
      <section title="ACTIVITIES"
               anchor="opensocial.Person.Field.ACTIVITIES">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.ACTIVITIES</t>
       <t>Description: Person's favorite activities, specified as an Array of
       strings. Container support for this field is OPTIONAL. This field may be
       used interchangeably with the string 'activities'.</t>
      </section>
      <section title="ADDRESSES"
               anchor="opensocial.Person.Field.ADDRESSES">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.ADDRESSES</t>
       <t>Description: Addresses associated with the person, specified as an
       Array of 
       <xref target="opensocial.Address">Address</xref> es. Container support
       for this field is OPTIONAL. This field may be used interchangeably with
       the string 'addresses'.</t>
      </section>
      <section title="AGE"
               anchor="opensocial.Person.Field.AGE">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.AGE</t>
       <t>Description: Person's age, specified as a number. Container support
       for this field is OPTIONAL. This field may be used interchangeably with
       the string 'age'.</t>
      </section>
      <section title="BODY_TYPE"
               anchor="opensocial.Person.Field.BODY_TYPE">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.BODY_TYPE</t>
       <t>Description: Person's body characteristics, specified as an
       opensocial.BodyType. Container support for this field is OPTIONAL. This
       field may be used interchangeably with the string 'bodyType'.</t>
      </section>
      <section title="BOOKS"
               anchor="opensocial.Person.Field.BOOKS">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.BOOKS</t>
       <t>Description: Person's favorite books, specified as an Array of
       strings. Container support for this field is OPTIONAL. This field may be
       used interchangeably with the string 'books'.</t>
      </section>
      <section title="CARS"
               anchor="opensocial.Person.Field.CARS">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.CARS</t>
       <t>Description: Person's favorite cars, specified as an Array of
       strings. Container support for this field is OPTIONAL. This field may be
       used interchangeably with the string 'cars'.</t>
      </section>
      <section title="CHILDREN"
               anchor="opensocial.Person.Field.CHILDREN">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.CHILDREN</t>
       <t>Description: Description of the person's children, specified as a
       string. Container support for this field is OPTIONAL. This field may be
       used interchangeably with the string 'children'.</t>
      </section>
      <section title="CURRENT_LOCATION"
               anchor="opensocial.Person.Field.CURRENT_LOCATION">
       <t>&lt;static&gt; Member of:
       opensocial.Person.Field.CURRENT_LOCATION</t>
       <t>Description: Person's current location, specified as an 
       <xref target="opensocial.Address">Address</xref>. Container support for
       this field is OPTIONAL. This field may be used interchangeably with the
       string 'currentLocation'.</t>
      </section>
      <section title="DATE_OF_BIRTH"
               anchor="opensocial.Person.Field.DATE_OF_BIRTH">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.DATE_OF_BIRTH</t>
       <t>Description: Person's date of birth, specified as a Date object.
       Container support for this field is OPTIONAL. This field may be used
       interchangeably with the string 'dateOfBirth'.</t>
      </section>
      <section title="DRINKER"
               anchor="opensocial.Person.Field.DRINKER">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.DRINKER</t>
       <t>Description: Person's drinking status, specified as an
       opensocial.Enum with the enum's key referencing opensocial.Enum.Drinker.
       Container support for this field is OPTIONAL. This field may be used
       interchangeably with the string 'drinker'.</t>
      </section>
      <section title="EMAILS"
               anchor="opensocial.Person.Field.EMAILS">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.EMAILS</t>
       <t>Description: Emails associated with the person, specified as an Array
       of 
       <xref target="opensocial.Email">Email</xref> s. Container support for
       this field is OPTIONAL. This field may be used interchangeably with the
       string 'emails'.</t>
      </section>
      <section title="ETHNICITY"
               anchor="opensocial.Person.Field.ETHNICITY">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.ETHNICITY</t>
       <t>Description: Person's ethnicity, specified as a string. Container
       support for this field is OPTIONAL. This field may be used
       interchangeably with the string 'ethnicity'.</t>
      </section>
      <section title="FASHION"
               anchor="opensocial.Person.Field.FASHION">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.FASHION</t>
       <t>Description: Person's thoughts on fashion, specified as a string.
       Container support for this field is OPTIONAL. This field may be used
       interchangeably with the string 'fashion'.</t>
      </section>
      <section title="FOOD"
               anchor="opensocial.Person.Field.FOOD">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.FOOD</t>
       <t>Description: Person's favorite food, specified as an Array of
       strings. Container support for this field is OPTIONAL. This field may be
       used interchangeably with the string 'food'.</t>
      </section>
      <section title="GENDER"
               anchor="opensocial.Person.Field.GENDER">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.GENDER</t>
       <t>Description: Person's gender, specified as an opensocial.Enum with
       the enum's key referencing opensocial.Enum.Gender. Container support for
       this field is OPTIONAL. This field may be used interchangeably with the
       string 'gender'.</t>
      </section>
      <section title="HAPPIEST_WHEN"
               anchor="opensocial.Person.Field.HAPPIEST_WHEN">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.HAPPIEST_WHEN</t>
       <t>Description: Describes when the person is happiest, specified as a
       string. Container support for this field is OPTIONAL. This field may be
       used interchangeably with the string 'happiestWhen'.</t>
      </section>
      <section title="HAS_APP"
               anchor="opensocial.Person.Field.HAS_APP">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.HAS_APP</t>
       <t>Description: A boolean indicating whether the person has used the
       current app. Container support for this field is OPTIONAL. This field
       may be used interchangeably with the string 'hasApp'.</t>
      </section>
      <section title="HEROES"
               anchor="opensocial.Person.Field.HEROES">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.HEROES</t>
       <t>Description: Person's favorite heroes, specified as an Array of
       strings. Container support for this field is OPTIONAL. This field may be
       used interchangeably with the string 'heroes'.</t>
      </section>
      <section title="HUMOR"
               anchor="opensocial.Person.Field.HUMOR">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.HUMOR</t>
       <t>Description: Person's thoughts on humor, specified as a string.
       Container support for this field is OPTIONAL. This field may be used
       interchangeably with the string 'humor'.</t>
      </section>
      <section title="ID"
               anchor="opensocial.Person.Field.ID">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.ID</t>
       <t>Description: A string ID that can be permanently associated with this
       person. This field may be used interchangeably with the string 'id'. For
       the anonymous VIEWER, this value MUST be -1.</t>
      </section>
      <section title="INTERESTS"
               anchor="opensocial.Person.Field.INTERESTS">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.INTERESTS</t>
       <t>Description: Person's interests, hobbies or passions, specified as an
       Array of strings. Container support for this field is OPTIONAL. This
       field may be used interchangeably with the string 'interests'.</t>
      </section>
      <section title="JOB_INTERESTS"
               anchor="opensocial.Person.Field.JOB_INTERESTS">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.JOB_INTERESTS</t>
       <t>Description: Person's favorite jobs, or job interests and skills,
       specified as a string. Container support for this field is OPTIONAL.
       This field may be used interchangeably with the string
       'jobInterests'.</t>
      </section>
      <section title="JOBS"
               anchor="opensocial.Person.Field.JOBS">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.JOBS</t>
       <t>Description: Jobs the person has held, specified as an Array of 
       <xref target="opensocial.Organization">Organization</xref> s. Container
       support for this field is OPTIONAL. This field may be used
       interchangeably with the string 'jobs'.</t>
      </section>
      <section title="LANGUAGES_SPOKEN"
               anchor="opensocial.Person.Field.LANGUAGES_SPOKEN">
       <t>&lt;static&gt; Member of:
       opensocial.Person.Field.LANGUAGES_SPOKEN</t>
       <t>Description: List of the languages that the person speaks as ISO
       639-1 codes, specified as an Array of strings. Container support for
       this field is OPTIONAL. This field may be used interchangeably with the
       string 'languagesSpoken'.</t>
      </section>
      <section title="LIVING_ARRANGEMENT"
               anchor="opensocial.Person.Field.LIVING_ARRANGEMENT">
       <t>&lt;static&gt; Member of:
       opensocial.Person.Field.LIVING_ARRANGEMENT</t>
       <t>Description: Description of the person's living arrangement,
       specified as a string. Container support for this field is OPTIONAL.
       This field may be used interchangeably with the string
       'livingArrangement'.</t>
      </section>
      <section title="LOOKING_FOR"
               anchor="opensocial.Person.Field.LOOKING_FOR">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.LOOKING_FOR</t>
       <t>Description: Person's statement about who or what they are looking
       for, or what they are interested in meeting people for. Specified as an
       Array of opensocial.Enum with the enum's key referencing
       opensocial.Enum.LookingFor. Container support for this field is
       OPTIONAL. This field may be used interchangeably with the string
       'lookingFor'.</t>
      </section>
      <section title="MOVIES"
               anchor="opensocial.Person.Field.MOVIES">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.MOVIES</t>
       <t>Description: Person's favorite movies, specified as an Array of
       strings. Container support for this field is OPTIONAL. This field may be
       used interchangeably with the string 'movies'.</t>
      </section>
      <section title="MUSIC"
               anchor="opensocial.Person.Field.MUSIC">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.MUSIC</t>
       <t>Description: Person's favorite music, specified as an Array of
       strings. Container support for this field is OPTIONAL. This field may be
       used interchangeably with the string 'music'.</t>
      </section>
      <section title="NAME"
               anchor="opensocial.Person.Field.NAME">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.NAME</t>
       <t>Description: A opensocial.Name object containing the person's name.
       This field may be used interchangeably with the string 'name'. For the
       anonymous VIEWER, this value may be a user friendly name such as Guest,
       Anonymous, depending on the browser locale.</t>
      </section>
      <section title="NETWORK_PRESENCE"
               anchor="opensocial.Person.Field.NETWORK_PRESENCE">
       <t>&lt;static&gt; Member of:
       opensocial.Person.Field.NETWORK_PRESENCE</t>
       <t>Description: Person's current network status. Specified as an Enum
       with the enum's key referencing opensocial.Enum.Presence. Container
       support for this field is OPTIONAL. This field may be used
       interchangeably with the string 'networkPresence'.</t>
      </section>
      <section title="NICKNAME"
               anchor="opensocial.Person.Field.NICKNAME">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.NICKNAME</t>
       <t>Description: A String representing the person's nickname. This
       represents the casual way to address this person in real life. This
       field may be used interchangeably with the string 'nickname'. For the
       anonymous VIEWER, this value may be a user friendly nickname such as
       Guest, Anonymous, depending on the browser locale.</t>
      </section>
      <section title="PETS"
               anchor="opensocial.Person.Field.PETS">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.PETS</t>
       <t>Description: Description of the person's pets, specified as a string.
       Container support for this field is OPTIONAL. This field may be used
       interchangeably with the string 'pets'.</t>
      </section>
      <section title="PHONE_NUMBERS"
               anchor="opensocial.Person.Field.PHONE_NUMBERS">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.PHONE_NUMBERS</t>
       <t>Description: Phone numbers associated with the person, specified as
       an Array of 
       <xref target="opensocial.Phone">Phone</xref> s. Container support for
       this field is OPTIONAL. This field may be used interchangeably with the
       string 'phoneNumbers'.</t>
      </section>
      <section title="POLITICAL_VIEWS"
               anchor="opensocial.Person.Field.POLITICAL_VIEWS">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.POLITICAL_VIEWS</t>
       <t>Description: Person's political views, specified as a string.
       Container support for this field is OPTIONAL. This field may be used
       interchangeably with the string 'politicalViews'.</t>
      </section>
      <section title="PROFILE_SONG"
               anchor="opensocial.Person.Field.PROFILE_SONG">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.PROFILE_SONG</t>
       <t>Description: Person's profile song, specified as an opensocial.Url.
       Container support for this field is OPTIONAL. This field may be used
       interchangeably with the string 'profileSong'.</t>
      </section>
      <section title="PROFILE_URL"
               anchor="opensocial.Person.Field.PROFILE_URL">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.PROFILE_URL</t>
       <t>Description: Person's profile URL, specified as a string. This URL
       must be fully qualified. Relative URLs will not work in gadgets.
       Container support for this field is OPTIONAL. This field may be used
       interchangeably with the string 'profileUrl'.</t>
      </section>
      <section title="PROFILE_VIDEO"
               anchor="opensocial.Person.Field.PROFILE_VIDEO">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.PROFILE_VIDEO</t>
       <t>Description: Person's profile video, specified as an opensocial.Url.
       Container support for this field is OPTIONAL. This field may be used
       interchangeably with the string 'profileVideo'.</t>
      </section>
      <section title="QUOTES"
               anchor="opensocial.Person.Field.QUOTES">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.QUOTES</t>
       <t>Description: Person's favorite quotes, specified as an Array of
       strings. Container support for this field is OPTIONAL. This field may be
       used interchangeably with the string 'quotes'.</t>
      </section>
      <section title="RELATIONSHIP_STATUS"
               anchor="opensocial.Person.Field.RELATIONSHIP_STATUS">
       <t>&lt;static&gt; Member of:
       opensocial.Person.Field.RELATIONSHIP_STATUS</t>
       <t>Description: Person's relationship status, specified as a string.
       Container support for this field is OPTIONAL. This field may be used
       interchangeably with the string 'relationshipStatus'.</t>
      </section>
      <section title="RELIGION"
               anchor="opensocial.Person.Field.RELIGION">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.RELIGION</t>
       <t>Description: Person's relgion or religious views, specified as a
       string. Container support for this field is OPTIONAL. This field may be
       used interchangeably with the string 'religion'.</t>
      </section>
      <section title="ROMANCE"
               anchor="opensocial.Person.Field.ROMANCE">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.ROMANCE</t>
       <t>Description: Person's comments about romance, specified as a string.
       Container support for this field is OPTIONAL. This field may be used
       interchangeably with the string 'romance'.</t>
      </section>
      <section title="SCARED_OF"
               anchor="opensocial.Person.Field.SCARED_OF">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.SCARED_OF</t>
       <t>Description: What the person is scared of, specified as a string.
       Container support for this field is OPTIONAL. This field may be used
       interchangeably with the string 'scaredOf'.</t>
      </section>
      <section title="SCHOOLS"
               anchor="opensocial.Person.Field.SCHOOLS">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.SCHOOLS</t>
       <t>Description: Schools the person has attended, specified as an Array
       of 
       <xref target="opensocial.Organization">Organization</xref> s. Container
       support for this field is OPTIONAL. This field may be used
       interchangeably with the string 'schools'.</t>
      </section>
      <section title="SEXUAL_ORIENTATION"
               anchor="opensocial.Person.Field.SEXUAL_ORIENTATION">
       <t>&lt;static&gt; Member of:
       opensocial.Person.Field.SEXUAL_ORIENTATION</t>
       <t>Description: Person's sexual orientation, specified as a string.
       Container support for this field is OPTIONAL. This field may be used
       interchangeably with the string 'sexualOrientation'.</t>
      </section>
      <section title="SMOKER"
               anchor="opensocial.Person.Field.SMOKER">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.SMOKER</t>
       <t>Description: Person's smoking status, specified as an opensocial.Enum
       with the enum's key referencing opensocial.Enum.Smoker. Container
       support for this field is OPTIONAL. This field may be used
       interchangeably with the string 'smoker'.</t>
      </section>
      <section title="SPORTS"
               anchor="opensocial.Person.Field.SPORTS">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.SPORTS</t>
       <t>Description: Person's favorite sports, specified as an Array of
       strings. Container support for this field is OPTIONAL. This field may be
       used interchangeably with the string 'sports'.</t>
      </section>
      <section title="STATUS"
               anchor="opensocial.Person.Field.STATUS">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.STATUS</t>
       <t>Description: Person's status, headline or shoutout, specified as a
       string. Container support for this field is OPTIONAL. This field may be
       used interchangeably with the string 'status'.</t>
      </section>
      <section title="TAGS"
               anchor="opensocial.Person.Field.TAGS">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.TAGS</t>
       <t>Description: Arbitrary tags about the person, specified as an Array
       of strings. Container support for this field is OPTIONAL. This field may
       be used interchangeably with the string 'tags'.</t>
      </section>
      <section title="THUMBNAIL_URL"
               anchor="opensocial.Person.Field.THUMBNAIL_URL">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.THUMBNAIL_URL</t>
       <t>Description: Person's photo thumbnail URL, specified as a string.
       This URL must be fully qualified. Relative URLs will not work in
       gadgets. This field may be used interchangeably with the string
       'thumbnailUrl'. For the anonymous VIEWER, this value may be a standard
       representation of an anonymous user on the site.</t>
      </section>
      <section title="TIME_ZONE"
               anchor="opensocial.Person.Field.TIME_ZONE">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.TIME_ZONE</t>
       <t>Description: Person's time zone, specified as the difference in
       minutes between Greenwich Mean Time (GMT) and the user's local time. See
       Date.getTimezoneOffset() in javascript for more details on this format.
       Container support for this field is OPTIONAL. This field may be used
       interchangeably with the string 'timeZone'.</t>
      </section>
      <section title="TURN_OFFS"
               anchor="opensocial.Person.Field.TURN_OFFS">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.TURN_OFFS</t>
       <t>Description: Person's turn offs, specified as an Array of strings.
       Container support for this field is OPTIONAL. This field may be used
       interchangeably with the string 'turnOffs'.</t>
      </section>
      <section title="TURN_ONS"
               anchor="opensocial.Person.Field.TURN_ONS">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.TURN_ONS</t>
       <t>Description: Person's turn ons, specified as an Array of strings.
       Container support for this field is OPTIONAL. This field may be used
       interchangeably with the string 'turnOns'.</t>
      </section>
      <section title="TV_SHOWS"
               anchor="opensocial.Person.Field.TV_SHOWS">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.TV_SHOWS</t>
       <t>Description: Person's favorite TV shows, specified as an Array of
       strings. Container support for this field is OPTIONAL. This field may be
       used interchangeably with the string 'tvShows'.</t>
      </section>
      <section title="URLS"
               anchor="opensocial.Person.Field.URLS">
       <t>&lt;static&gt; Member of: opensocial.Person.Field.URLS</t>
       <t>Description: URLs related to the person, their webpages, or feeds.
       Specified as an Array of opensocial.Url. Container support for this
       field is OPTIONAL. This field may be used interchangeably with the
       string 'urls'.</t>
      </section>
     </section>
    </section>
    <section title="opensocial.Phone"
             anchor="opensocial.Phone">
     <!-- ============================== class summary ========================== -->
     <t>Base interface for all phone objects.</t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.Phone.ctor">
      <t>opensocial.Phone()</t>
      <t></t>
     </section>
     <section title="Method Details">
      <section title="getField"
               anchor="opensocial.Phone.getField">
       <t>Type: {String} getField(key, opt_params)</t>
       <t>Description: Gets data for this phone that is associated with the
       specified key.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>key</c>
        <c>String</c>
        <c>The key to get data for; keys are defined in 
        <xref target="opensocial.Phone.Field">Phone.Field</xref> </c>
        <c>opt_params</c>
        <c>Map.&lt;opensocial.DataRequest.DataRequestFields|Object&gt;</c>
        <c>Additional 
        <xref target="opensocial.DataRequest.DataRequestFields">params</xref> to
        pass to the request.</c>
       </texttable></t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>String</c>
        <c>The data</c>
       </texttable></t>
      </section>
     </section>
    </section>
    <section title="opensocial.Phone.Field"
             anchor="opensocial.Phone.Field">
     <!-- ============================== class summary ========================== -->
     <t>All of the fields that a phone has. These are the supported keys for
     the 
     <xref target="opensocial.Phone.getField">
     Phone.getField()</xref> method.</t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.Phone.Field.ctor">
      <t>opensocial.Phone.Field</t>
      <t></t>
     </section>
     <section title="Field Details">
      <section title="NUMBER"
               anchor="opensocial.Phone.Field.NUMBER">
       <t>&lt;static&gt; Member of: opensocial.Phone.Field.NUMBER</t>
       <t>Description: The phone number, specified as a string. This field may
       be used interchangeably with the string 'number'.</t>
      </section>
      <section title="TYPE"
               anchor="opensocial.Phone.Field.TYPE">
       <t>&lt;static&gt; Member of: opensocial.Phone.Field.TYPE</t>
       <t>Description: The phone number type or label, specified as a string.
       Examples: work, my favorite store, my house, etc. This field may be used
       interchangeably with the string 'type'.</t>
      </section>
     </section>
    </section>
    <section title="opensocial.ResponseItem"
             anchor="opensocial.ResponseItem">
     <!-- ============================== class summary ========================== -->
     <t>Represents a response that was generated by processing a data request
     item on the server.</t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.ResponseItem.ctor">
      <t>opensocial.ResponseItem()</t>
      <t></t>
     </section>
     <section title="Method Details">
      <section title="getData"
               anchor="opensocial.ResponseItem.getData">
       <t>Type: {Object} getData()</t>
       <t>Description: Gets the response data.</t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>Object</c>
        <c>The requested value calculated by the server; the type of this value
        is defined by the type of request that was made</c>
       </texttable></t>
      </section>
      <section title="getErrorCode"
               anchor="opensocial.ResponseItem.getErrorCode">
       <t>Type: {String} getErrorCode()</t>
       <t>Description: If the request had an error, returns the error code. The
       error code can be container-specific or one of the values defined by 
       <xref target="opensocial.ResponseItem.Error">Error</xref>.</t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>String</c>
        <c>The error code, or null if no error occurred</c>
       </texttable></t>
      </section>
      <section title="getErrorMessage"
               anchor="opensocial.ResponseItem.getErrorMessage">
       <t>Type: {String} getErrorMessage()</t>
       <t>Description: If the request had an error, returns the error
       message.</t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>String</c>
        <c>A human-readable description of the error that occurred; can be
        null, even if an error occurred</c>
       </texttable></t>
      </section>
      <section title="getOriginalDataRequest"
               anchor="opensocial.ResponseItem.getOriginalDataRequest">
       <t>Type: {Object} getOriginalDataRequest()</t>
       <t>Description: Returns the original data request item.</t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>Object</c>
        <c>The request item used to fetch this data response</c>
       </texttable></t>
      </section>
      <section title="hadError"
               anchor="opensocial.ResponseItem.hadError">
       <t>Type: {Boolean} hadError()</t>
       <t>Description: Returns true if there was an error in fetching this data
       from the server.</t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>Boolean</c>
        <c>True if there was an error; otherwise, false</c>
       </texttable></t>
      </section>
     </section>
    </section>
    <section title="opensocial.ResponseItem.Error"
             anchor="opensocial.ResponseItem.Error">
     <!-- ============================== class summary ========================== -->
     <t>Error codes that a response item can return.</t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.ResponseItem.Error.ctor">
      <t>opensocial.ResponseItem.Error</t>
      <t></t>
     </section>
     <section title="Field Details">
      <section title="BAD_REQUEST"
               anchor="opensocial.ResponseItem.Error.BAD_REQUEST">
       <t>&lt;static&gt; Member of:
       opensocial.ResponseItem.Error.BAD_REQUEST</t>
       <t>Description: The request was invalid. Example: 'max' was -1. This
       field may be used interchangeably with the string 'badRequest'.</t>
      </section>
      <section title="FORBIDDEN"
               anchor="opensocial.ResponseItem.Error.FORBIDDEN">
       <t>&lt;static&gt; Member of: opensocial.ResponseItem.Error.FORBIDDEN</t>
       <t>Description: The gadget can never have access to the requested data.
       This field may be used interchangeably with the string 'forbidden'.</t>
      </section>
      <section title="INTERNAL_ERROR"
               anchor="opensocial.ResponseItem.Error.INTERNAL_ERROR">
       <t>&lt;static&gt; Member of:
       opensocial.ResponseItem.Error.INTERNAL_ERROR</t>
       <t>Description: The request encountered an unexpected condition that
       prevented it from fulfilling the request. This field may be used
       interchangeably with the string 'internalError'.</t>
      </section>
      <section title="LIMIT_EXCEEDED"
               anchor="opensocial.ResponseItem.Error.LIMIT_EXCEEDED">
       <t>&lt;static&gt; Member of:
       opensocial.ResponseItem.Error.LIMIT_EXCEEDED</t>
       <t>Description: The gadget exceeded a quota on the request. Example
       quotas include a max number of calls per day, calls per user per day,
       calls within a certain time period and so forth. This field may be used
       interchangeably with the string 'limitExceeded'.</t>
      </section>
      <section title="NOT_IMPLEMENTED"
               anchor="opensocial.ResponseItem.Error.NOT_IMPLEMENTED">
       <t>&lt;static&gt; Member of:
       opensocial.ResponseItem.Error.NOT_IMPLEMENTED</t>
       <t>Description: This container does not support the request that was
       made. This field may be used interchangeably with the string
       'notImplemented'.</t>
      </section>
      <section title="UNAUTHORIZED"
               anchor="opensocial.ResponseItem.Error.UNAUTHORIZED">
       <t>&lt;static&gt; Member of:
       opensocial.ResponseItem.Error.UNAUTHORIZED</t>
       <t>Description: The gadget does not have access to the requested data.
       To get access, use 
       <xref target="opensocial.requestPermission">
       opensocial.requestPermission()</xref>. This field may be used
       interchangeably with the string 'unauthorized'.</t>
      </section>
     </section>
    </section>
    <section title="opensocial.Url"
             anchor="opensocial.Url">
     <!-- ============================== class summary ========================== -->
     <t>Base interface for all URL objects.</t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.Url.ctor">
      <t>opensocial.Url()</t>
      <t></t>
     </section>
     <section title="Method Details">
      <section title="getField"
               anchor="opensocial.Url.getField">
       <t>Type: {String} getField(key, opt_params)</t>
       <t>Description: Gets data for this URL that is associated with the
       specified key.</t>
       <t>Parameters: 
       <texttable>
        <ttcol>Name</ttcol>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>key</c>
        <c>String</c>
        <c>The key to get data for; keys are defined in 
        <xref target="opensocial.Url.Field">Url.Field</xref> </c>
        <c>opt_params</c>
        <c>Map.&lt;opensocial.DataRequest.DataRequestFields|Object&gt;</c>
        <c>Additional 
        <xref target="opensocial.DataRequest.DataRequestFields">params</xref> to
        pass to the request.</c>
       </texttable></t>
       <t>Returns:
       <texttable>
        <ttcol>Type</ttcol>
        <ttcol>Description</ttcol>
        <c>String</c>
        <c>The data</c>
       </texttable></t>
      </section>
     </section>
    </section>
    <section title="opensocial.Url.Field"
             anchor="opensocial.Url.Field">
     <!-- ============================== class summary ========================== -->
     <t>All of the fields that a URL has. These are the supported keys for the 
     <xref target="opensocial.Url.getField">Url.getField()</xref> method.</t>
     <!-- ============================== constructor details ==================== -->
     <section title="Constructor"
              anchor="opensocial.Url.Field.ctor">
      <t>opensocial.Url.Field</t>
      <t></t>
     </section>
     <section title="Field Details">
      <section title="ADDRESS"
               anchor="opensocial.Url.Field.ADDRESS">
       <t>&lt;static&gt; Member of: opensocial.Url.Field.ADDRESS</t>
       <t>Description: The address the URL points to, specified as a string.
       This field may be used interchangeably with the string 'address'.</t>
      </section>
      <section title="LINK_TEXT"
               anchor="opensocial.Url.Field.LINK_TEXT">
       <t>&lt;static&gt; Member of: opensocial.Url.Field.LINK_TEXT</t>
       <t>Description: The text of the link, specified as a string. This field
       may be used interchangeably with the string 'linkText'.</t>
      </section>
      <section title="TYPE"
               anchor="opensocial.Url.Field.TYPE">
       <t>&lt;static&gt; Member of: opensocial.Url.Field.TYPE</t>
       <t>Description: The URL number type or label, specified as a string.
       Examples: work, blog feed, website, etc. This field may be used
       interchangeably with the string 'type'.</t>
      </section>
     </section>
    </section>
   </section>
  </section>
 </middle>
 <back>
  <references>
   <reference anchor='RFC2119'>
    <front>
     <title>Key words for use in RFCs to Indicate Requirement Levels</title>
     <author initials='S.'
             surname='Bradner'
             fullname='Scott Bradner'>
      <organization abbrev='HarvardU'>Harvard University</organization>
     </author>
     <date month='March'
           year='1997' />
    </front>
    <seriesInfo name='RFC'
                value='2119' />
   </reference>
   <reference anchor='RFC2606'>
    <front>
     <title>Reserved Top Level DNS Names</title>
     <author initials='D.'
             surname='Eastlake'
             fullname='Donald E. Eastlake 3rd'>
      <organization abbrev='IBM'>IBM</organization>
     </author>
     <author initials='A.'
             surname='Panitz'
             fullname='Aliza R. Panitz'></author>
     <date month='June'
           year='1999' />
    </front>
    <seriesInfo name='RFC'
                value='2606' />
   </reference>
   <reference anchor="OpenSocial Data Pipelining"
              target="./OpenSocial-Data-Pipelining.xml">
    <front>
     <title>OpenSocial Data Pipelining 0.9</title>
     <author initials='o.'
             surname='social'
             fullname='OpenSocial and Gadgets Specification Group &lt;opensocial-and-gadgets-spec@googlegroups.com&gt;'>
     </author>
     <date month='January'
           year='2000' />
    </front>
   </reference>
   <reference anchor="OpenSocial Markup Language Tags"
              target="./OpenSocial-Markup-Language-Tags.xml">
    <front>
     <title>OpenSocial Markup Language Tags 0.9</title>
     <author initials='o.'
             surname='social'
             fullname='OpenSocial and Gadgets Specification Group &lt;opensocial-and-gadgets-spec@googlegroups.com&gt;'>
     </author>
     <date month='January'
           year='2000' />
    </front>
   </reference>
   <reference anchor="OpenSocial Templating"
              target="./OpenSocial-Templating.xml">
    <front>
     <title>OpenSocial Templating 0.9</title>
     <author initials='o.'
             surname='social'
             fullname='OpenSocial and Gadgets Specification Group &lt;opensocial-and-gadgets-spec@googlegroups.com&gt;'>
     </author>
     <date month='January'
           year='2000' />
    </front>
   </reference>
   <reference anchor="RESTful Protocol Specification"
              target="./REST-API.xml">
    <front>
     <title>RESTful Protocol Specification 0.9</title>
     <author initials='o.'
             surname='social'
             fullname='OpenSocial and Gadgets Specification Group &lt;opensocial-and-gadgets-spec@googlegroups.com&gt;'>
     </author>
     <date month='January'
           year='2000' />
    </front>
   </reference>
   <reference anchor="RPC Protocol Specification"
              target="./RPC-Protocol.xml">
    <front>
     <title>RPC Protocol Specification 0.9</title>
     <author initials='o.'
             surname='social'
             fullname='OpenSocial and Gadgets Specification Group &lt;opensocial-and-gadgets-spec@googlegroups.com&gt;'>
     </author>
     <date month='January'
           year='2000' />
    </front>
   </reference>
   <reference anchor="Gadgets API Specification"
              target="./Gadgets-API-Specification.xml">
    <front>
     <title>Gadgets API Specification 0.9</title>
     <author initials='o.'
             surname='social'
             fullname='OpenSocial and Gadgets Specification Group &lt;opensocial-and-gadgets-spec@googlegroups.com&gt;'>
     </author>
     <date month='January'
           year='2000' />
    </front>
   </reference>
   <reference anchor='OAuth Core 1.0'
              target='http://oauth.net/core/1.0/'>
    <front>
     <title>OAuth Core 1.0</title>
     <author initials='M.'
             surname='Atwood'
             fullname='Mark Atwood'></author>
     <author initials='R. M.'
             surname='Conlan'
             fullname='Richard M. Conlan'>
      <organization>Google</organization>
     </author>
     <author initials='B.'
             surname='Cook'
             fullname='Blaine Cook'>
      <organization>Twitter</organization>
     </author>
     <author initials='L.'
             surname='Culver'
             fullname='Leah Culver'>
      <organization>Pownce</organization>
     </author>
     <author initials='K.'
             surname='Elliott-McCrea'
             fullname='Kellan Elliott-McCrea'>
      <organization>Flickr</organization>
     </author>
     <author initials='L.'
             surname='Halff'
             fullname='Larry Halff'>
      <organization>ma.gnolia</organization>
     </author>
     <author initials='E.'
             surname='Hammer-Lahav'
             fullname='Eran Hammer-Lahav'></author>
     <author initials='B.'
             surname='Laurie'
             fullname='Ben Laurie'>
      <organization>Google</organization>
     </author>
     <author initials='C.'
             surname='Messina'
             fullname='Chris Messina'></author>
     <author initials='J.'
             surname='Panzer'
             fullname='John Panzer'></author>
     <author initials='S.'
             surname='Quigley'
             fullname='Sam Quigley'>
      <organization>Twitter</organization>
     </author>
     <author initials='D.'
             surname='Recordon'
             fullname='David Recordon'>
      <organization>six apart</organization>
     </author>
     <author initials='E.'
             surname='Sandler'
             fullname='Eran Sandler'>
      <organization>Yedda</organization>
     </author>
     <author initials='J.'
             surname='Sergent'
             fullname='Jonathan Sergent'>
      <organization>ma.gnolia</organization>
     </author>
     <author initials='B.'
             surname='Slesinsky'
             fullname='Brian Slesinsky'></author>
     <author initials='A.'
             surname='Smith'
             fullname='Andy Smith'>
      <organization>Jaiku</organization>
     </author>
     <date month='December'
           year='2007' />
    </front>
   </reference>
  </references>
 </back>
</rfc>

