Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

initial creation

  • Loading branch information...
commit 7a968266363cbbc7386cb73a68e3440d8bb477ab 0 parents
Peter Wu authored
Showing with 11,851 additions and 0 deletions.
  1. +202 −0 LICENSE
  2. +47 −0 README.md
  3. +175 −0 api/DeviceMotion.js
  4. +181 −0 api/audio.js
  5. +38 −0 api/blackberry.js
  6. +182 −0 api/blackberry_app.js
  7. +82 −0 api/blackberry_app_events.js
  8. +78 −0 api/blackberry_audio.js
  9. +361 −0 api/blackberry_audio_Player.js
  10. +234 −0 api/blackberry_bbdoc.js
  11. +17 −0 api/blackberry_find.js
  12. +165 −0 api/blackberry_find_FilterExpression.js
  13. +196 −0 api/blackberry_focus.js
  14. +85 −0 api/blackberry_identity.js
  15. +95 −0 api/blackberry_identity_Service.js
  16. +61 −0 api/blackberry_identity_Transport.js
  17. +73 −0 api/blackberry_identity_phone.js
  18. +205 −0 api/blackberry_invoke.js
  19. +81 −0 api/blackberry_invoke_AddressBookArguments.js
  20. +48 −0 api/blackberry_invoke_BrowserArguments.js
  21. +127 −0 api/blackberry_invoke_CalendarArguments.js
  22. +71 −0 api/blackberry_invoke_CameraArguments.js
  23. +44 −0 api/blackberry_invoke_JavaArguments.js
  24. +43 −0 api/blackberry_invoke_MapsArguments.js
  25. +73 −0 api/blackberry_invoke_MemoArguments.js
  26. +84 −0 api/blackberry_invoke_MessageArguments.js
  27. +70 −0 api/blackberry_invoke_PhoneArguments.js
  28. +42 −0 api/blackberry_invoke_SearchArguments.js
  29. +72 −0 api/blackberry_invoke_TaskArguments.js
  30. +17 −0 api/blackberry_io.js
  31. +119 −0 api/blackberry_io_dir.js
  32. +134 −0 api/blackberry_io_file.js
  33. +102 −0 api/blackberry_io_file_FileProperties.js
  34. +103 −0 api/blackberry_menu.js
  35. +88 −0 api/blackberry_menu_item.js
  36. +17 −0 api/blackberry_message.js
  37. +80 −0 api/blackberry_message_SMS.js
  38. +17 −0 api/blackberry_messaging.js
  39. +271 −0 api/blackberry_messaging_Message.js
  40. +17 −0 api/blackberry_phone.js
  41. +81 −0 api/blackberry_phone_Find_FilterExpression.js
  42. +487 −0 api/blackberry_phone_Phone.js
  43. +205 −0 api/blackberry_phone_PhoneLogs.js
  44. +299 −0 api/blackberry_phone_PhoneLogs_CallLog.js
  45. +99 −0 api/blackberry_phone_Phone_Call.js
  46. +17 −0 api/blackberry_pim.js
  47. +92 −0 api/blackberry_pim_Address.js
  48. +201 −0 api/blackberry_pim_Appointment.js
  49. +114 −0 api/blackberry_pim_Attendee.js
  50. +295 −0 api/blackberry_pim_Contact.js
  51. +99 −0 api/blackberry_pim_Memo.js
  52. +384 −0 api/blackberry_pim_Recurrence.js
  53. +93 −0 api/blackberry_pim_Reminder.js
  54. +201 −0 api/blackberry_pim_Task.js
  55. +64 −0 api/blackberry_pim_category.js
  56. +95 −0 api/blackberry_push.js
  57. +163 −0 api/blackberry_push_Data.js
  58. +132 −0 api/blackberry_system.js
  59. +168 −0 api/blackberry_system_event.js
  60. +229 −0 api/blackberry_ui_dialog.js
  61. +111 −0 api/blackberry_utils.js
  62. +78 −0 api/blackberry_widgetcache.js
  63. +59 −0 api/blackberry_widgetcache_CacheInformation.js
  64. +230 −0 api/gps.js
  65. +71 −0 api/html5_database.js
  66. +72 −0 api/html5_localStorage.js
  67. +434 −0 api/html5_touch.js
  68. BIN  api/images/a-rotation.png
  69. BIN  api/images/b-rotation.png
  70. BIN  api/images/c-rotation.png
  71. BIN  api/images/start.png
  72. +434 −0 api/touch_events.js
  73. +91 −0 api/video.js
  74. +921 −0 build/BBTemplate/class.tmpl
  75. +132 −0 build/BBTemplate/css/about.css
  76. +180 −0 build/BBTemplate/css/docs.css
  77. +44 −0 build/BBTemplate/css/headerStyle.css
  78. +59 −0 build/BBTemplate/css/toc.css
  79. +33 −0 build/BBTemplate/featureList.tmpl
  80. BIN  build/BBTemplate/images/header_back.png
  81. BIN  build/BBTemplate/images/header_back_inner.png
  82. BIN  build/BBTemplate/images/icon.png
  83. BIN  build/BBTemplate/images/title_header.png
  84. +371 −0 build/BBTemplate/publish.js
  85. +307 −0 build/BBTemplate/static/common.css
  86. +21 −0 build/BBTemplate/static/header.html
  87. +60 −0 build/BBTemplate/static/index.html
  88. +250 −0 build/BBTemplate/static/server.js
  89. BIN  build/BBTemplate/static/webworks.png
  90. +51 −0 build/BBTemplate/toc.tmpl
  91. +127 −0 build/bbPlugin.js
202 LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
47 README.md
@@ -0,0 +1,47 @@
+# BlackBerry® WebWorks™ JavaScript API Documentation
+
+This repository contains all of the BlackBerry WebWorks API documentation source as well as the build templates to transform the content into HTML documentation. The documentation source format is based on the [jsdoc-toolkit](http://code.google.com/p/jsdoc-toolkit/) open source project.
+
+This project is Open Sourced under the Apache 2.0 license
+
+[Read more](https://github.com/blackberry/WebWorks/wiki) about the BlackBerry WebWorks open source project
+
+# STILL A WORK IN PROGRESS
+We are still working on the initial setup of this repository
+
+
+## Setting up your Environment
+1. Download the [jsdoc-toolkit](http://code.google.com/p/jsdoc-toolkit/downloads/list)
+
+2. Extract the contents of the downloaded jsdoc zip file to a location on your machine _**<jsdoc-location>**_
+
+3. Download the contents of this WebWorks-APIDocs repository to a _**<webworks-apidocs-location>**_ of your choice
+
+4. Copy the _**<webworks-apidocs-location>/build/BBTemplate**_ directory from this repository to the _**<jsdoc-location>/jsdoc-toolkit/templates/BBTemplate**_ directory
+
+5. Copy the _**<webworks-apidocs-location>/build/bbPlugin.js**_ file from this repository to _**<jsdoc-location>/jsdoc-toolkit/app/plugins/bbPlugin.js**_
+
+6. If you don't already have one, download and configure a [Java Runtime Environment] (http://www.oracle.com/technetwork/java/javase/downloads/index.html) on your machine
+
+## Building the Documentation
+1. Open a command prompt to your _**<jsdoc-location>/jsdoc-toolkit**_ directory. This directory should contain _**jsrun.jar**_
+
+2. Type in the following command:
+
+`java -jar jsrun.jar app/run.js -a "<webworks-apidocs-location>/api" -t=templates/BBTemplate -d="<some-output-folder>"`
+
+## Viewing the Documentation
+After you have generated the documentation you will find all the HTML for the API docs in your _**&lt;some-output-folder&gt;**_. The default main page is _**index.html**_. Some browsers don't like viewing content from a **_file://_** uri that contains JavaScript. In-fact, typically only Firefox allows this by default. If your default browser isn't Firefox, don't be surprised when you double click the file and it doesn't display properly in your browser!
+
+If you copy the contents of your _**&lt;some-output-folder&gt;**_ to a local web server you can then view the content in a browser of your choice. But if you are viewing it directly from your file system, you will need to use Firefox or find a way to configure your browser of choice to allow JavaScript on content from the **_file://_** origin.
+
+## Additional Information
+
+### Cookbook
+*Coming soon: Jsdocs best practices standard for adding metadata tags*
+
+### About the jsdoc-toolkit open source project
+
+JsDoc Toolkit is an application used to document JavaScript interfaces and automatically generate template-formatted HTML documentation from commented JavaScript source code. It's similar to JavaDoc, where you can use tags like @param to document your APIs.
+
+If you wish to read more information, or find out about more available tag references, please visit [this link](http://code.google.com/p/jsdoc-toolkit/w/list)
175 api/DeviceMotion.js
@@ -0,0 +1,175 @@
+/*
+* Copyright 2010-2011 Research In Motion Limited.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+/**
+ * @toc {System} Acceleration
+ * @PB10
+ *Acceleration data is given in meters per second squared and uses the body axes defined in the device orientation event. Acceleration data (without the effect of gravity) cannot be provided when there is a lack of a gyroscope.
+ *Implementations that are unable to provide acceleration data without the effect of gravity may instead supply the acceleration including the effect of gravity.
+ *<p>The values reported are equal to the acceleration of the device, plus an acceleration equal and opposite to the acceleration due to gravity.
+ *This is less useful in many applications but is provided as a means of providing best-effort support.
+ *These values can be stored and manipulated in variables outside the event scope. These values can be used to control the motion of objects defined on the DOM by the device's gyroscope and accelerometer.
+ *<p>Data Examples:
+ *A device lying flat on a horizontal surface with the screen upmost has an acceleration of zero and the following value for accelerationIncludingGravity:
+ * <p> {x: 0,
+ * y: 0,
+ * z: 9.81};</p></p>
+ *A device is mounted in a vehicle, with the screen in a vertical plane, the top uppermost and facing the rear of the vehicle. The vehicle is travelling at speed v around a right-hand bend of radius r.
+ *The the device records a positive x component for both acceleration and accelerationIncludingGravity. The device also records a negative value for rotationRate.gamma:
+ *<ul>
+ *<li>acceleration: {x: v^2/r, y: 0, z: 0};</li>
+ *<li>accelerationIncludingGravity: {x: v^2/r, y: 0, z: 9.81};</li>
+ *<li>rotationRate: {alpha: 0, beta: 0, gamma: -v/r*180/pi} };</li>
+ *</ul>
+ *@class
+ *@property {Number} x component of acceleration.
+ *@property {Number} y component of acceleration.
+ *@property {Number} z component of acceleration.
+ */
+Acceleration={
+ x:,
+ y:,
+ z:,
+};
+
+/**
+ **@toc {User Interface} HTML5 RotationRate
+ *Represents the Angular velocity of the motion.
+ *The orientation of the device is given in terms of the transfromation from a coordinate frame fixed on the Earth to a coordinate frame fixed in the device.
+ *The Earth coordinate frame is a 'East, North, Up' frame at the user's location. It has the following 3 axes, where the ground plane is tangent to the WGS 84 spheroid at the user's location.
+ *<ul>
+ *<li>East (X) is in the ground plane, perpendicular to the North axis and positive towards the East.</li>
+ *<li>North (Y) is in the ground plane and positive towards True North (towards the North Pole).</li>
+ *<li>Up (Z) is perpendicular to the ground plane and positive upwards.</li>
+ *</ul>
+ *For a mobile device, the device coordinate frame has the following 3 axes. The axes are defined relative to the standard orientation of the screen,
+ *typically portrait, when slide-out keyboards are not deployed. If the orientation of the screen changes when the device is rotated or a slide-out keyboard is deployed,
+ *this does not affect the orientation of the coordinate frame relative to the device. Users wishing to detect these changes in screen orientation may be able to do so with the existing orientationchange event.
+ *<ul>
+ *<li>x is in the plane of the screen and is positive towards the right hand side of the screen.</li>
+ *<li>y is in the plane of the screen and is positive towards the top of the screen.</li>
+ *<li>z is perpendicular to the screen, positive out of the screen.</li>
+ *</ul>
+ *The transformation from the Earth frame to the device frame is expressed in terms of 3 rotations,
+ *specified in the device frame. Rotations use the right-hand convention: positive rotation around an axis is clockwise when viewed along the positive direction of the axis.
+ *@class
+ *@property {Number} alpha Angular velocity of the device frame around its z axis by alpha degrees/s.
+ *@property {Number} beta Angular velocity of the device frame around its x axis by beta degrees/s.
+ *@property {Number} gamma Angular velocity of the device frame around its y axis by gamma degrees/s.
+ */
+RotationRate={
+ alpha:,
+ beta:,
+ gamma:,
+};
+
+/**
+ *@toc {User Interface} HTML5 DeviceMotionEvent
+ *This event provides direct access to motion data from an accelerometer and gyroscope. The three pieces of data provided are the acceleration, acceleration including gravity and rotation rate. <br>Because our hardware currently does not have a gyroscope, not all interfaces of this event are available to us (acceleration without gravity and rotation rate.)<br>
+ *@class
+ *@property {Acceleration} acceleration The acceleration provided by the acceleration property is that of the body and hence excludes the effect of gravity.
+ *@property {Acceleration} accelerationIncludingGravity Implementations that are unable to provide acceleration data without the effect of gravity (due, for example, to the lack of a gyroscope) may instead supply the acceleration including the effect of gravity. This is less useful in many applications but is provided as a means of providing best-effort support.
+ *In this case, the values reported are equal to the acceleration of the device, plus an acceleration equal and opposite to the acceleration due to gravity.
+ *@property {RotationRate} rotationRate The Angular velocity of the motion.
+ *@property {Number} interval event must fire at regular intervals and the interval must be reported, in milliseconds, using the interval attribute of the DeviceMotionEvent object. Note that the interval is a constant for a given implementation.
+ *@example
+ *window.addEventListener("devicemotion", function(event) {
+ * var ax = "Acceleration X value- " + event.accelerationIncludingGravity.x;
+ * var ay = "Acceleration Y value- " + event.accelerationIncludingGravity.y;
+ * var az = "Acceleration Z value- " + event.accelerationIncludingGravity.z;
+ * var rotation = "Rotation rate - " + event.rotationRate;
+ * alert(ax+"\n"+ay+"\n"+az);
+ *}, true);
+ */
+DeviceMotionEvent={
+ acceleration:,
+ accelerationIncludingGravity:,
+ rotationRate:,
+ interval:,
+};
+
+/**
+ *The orientation of the device is given in terms of the transfromation from a coordinate frame fixed on the Earth to a coordinate frame fixed in the device.
+ *The Earth coordinate frame is a 'East, North, Up' frame at the user's location. It has the following 3 axes, where the ground plane is tangent to the WGS 84 spheroid at the user's location.
+ *<ul>
+ *<li>East (X) is in the ground plane, perpendicular to the North axis and positive towards the East.</li>
+ *<li>North (Y) is in the ground plane and positive towards True North (towards the North Pole).</li>
+ *<li>Up (Z) is perpendicular to the ground plane and positive upwards.</li>
+ *</ul>
+ *For a mobile device, the device coordinate frame has the following 3 axes. The axes are defined relative to the standard orientation of the screen,
+ *typically portrait, when slide-out keyboards are not deployed. If the orientation of the screen changes when the device is rotated or a slide-out keyboard is deployed,
+ *this does not affect the orientation of the coordinate frame relative to the device. Users wishing to detect these changes in screen orientation may be able to do so with the existing orientationchange event.
+ *<ul>
+ *<li>x is in the plane of the screen and is positive towards the right hand side of the screen.</li>
+ *<li>y is in the plane of the screen and is positive towards the top of the screen.</li>
+ *<li>z is perpendicular to the screen, positive out of the screen.</li>
+ *</ul>
+ *The transformation from the Earth frame to the device frame is expressed in terms of 3 rotations,
+ *specified in the device frame. Rotations use the right-hand convention: positive rotation around an axis is clockwise when viewed along the positive direction of the axis.
+ Starting with the two frames aligned, the rotations are applied in the following order:
+<ol>
+ <li>
+ <p>Rotate the device frame around its z axis by alpha degrees, with alpha in [0, 360).</p>
+ <div style="display: inline-block;width: 350px;margin-right: 20px;font-size: small;">
+ <img src="images/playbook_flat.png"/>
+ <div style="display: inline-block;width: 350px;margin-right: 20px;font-size: small;">Device in the initial position, with Earth (XYZ) and body (xyz) frames aligned.</div>
+ </div>
+ <div style="display: inline-block;width: 350px;margin-right: 20px;font-size: small;">
+ <img src="images/playbook_rotate_alpha.png"/>
+ <div style="display: inline-block;width: 350px;margin-right: 20px;font-size: small;">Device rotated through angle alpha about z axis, with previous locations of x and y axes shown as x0 and y0.</div>
+ </div>
+ </li>
+ <li>
+ <p>Rotate the device frame around its x axis by beta degrees, with beta in [-180, 180).</p>
+ <div style="display: inline-block;width: 350px;margin-right: 20px;font-size: small;">
+ <img src="images/playbook_rotate_beta.png"/>
+ <div style="display: inline-block;width: 350px;margin-right: 20px;font-size: small;">Device rotated through angle beta about new x axis, with previous locations of y and z axes shown as y0</div>
+ </div>
+ </li>
+ <li>
+ <p>Rotate the device frame around its y axis by gamma degrees, with gamma in [-90, 90).</p>
+ <div style="display: inline-block;width: 350px;margin-right: 20px;font-size: small;">
+ <img src="images/playbook_rotate_gamma.png"/>
+ <div style="display: inline-block;width: 350px;margin-right: 20px;font-size: small;">Device rotated through angle gamma about new y axis, with previous locations of x and z axes shown as x0</div>
+ </div>
+ </li>
+</ol>
+Thus the angles alpha, beta and gamma form a set of intrinsic Tait-Bryan angles of type Z-X'-Y''. <a href="http://en.wikipedia.org/wiki/Euler_angles">[EULERANGLES]</a>
+
+Note that this choice of angles follows mathematical convention, but means that alpha is in the opposite sense to a compass heading.
+ *@class
+ *@property {Number} alpha Angular displacement of the device frame around its z axis by alpha degrees.
+ *@property {Number} beta Angular displacement of the device frame around its x axis by beta degrees.
+ *@property {Number} gamma Angular displacement of the device frame around its y axis by gamma degrees.
+ *@property {Boolean} absolute Implementations that are unable to provide absolute values for the three angles may instead provide values relative to some arbitrary orientation, as this may still be of utility. In this case, the absolute property should be set to false. Otherwise, the absolute property should be set to true.
+ *@property {Boolean} compassCalibrated Implementations should set the compassCalibrated property to true if the compass is correctly calibrated. Otherwise, the compassCalibrated property should be set to false. This may imply that user action, such as performing a manual calibration procedure, is required.
+ *@example
+ *window.addEventListener("deviceorientation", function(event) {
+ * var Alpha = "The rotation around the Z axis is :" +event.alpha;
+ * var Beta = "The rotation around the X axis is :" +event.beta;
+ * var Gamma = "The rotation around the Y axis is :" +event.gamma;
+ * alert(Alpha+"\n"+Beta+"\n"+Gamma);
+ * &#47;&#47 A device lying flat on a horizontal surface with the top of the screen pointing West has the following orientation:
+ * &#47;&#47 {alpha: 90, beta: 0, gamma: 0}
+ *}, true);
+ */
+DeviceOrientationEvent={
+ alpha:,
+ beta:,
+ gamma:,
+ absolute:,
+ compassCalibrated:
+}
181 api/audio.js
@@ -0,0 +1,181 @@
+/*
+* Copyright 2010-2011 Research In Motion Limited.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+/**
+ * @toc {User Interface} HTML5 Audio
+ * @class audio
+ * The audio tag defines sound, such as music or other audio streams.
+ * <p/>
+ * Tips and Notes:
+ * Any text inside the between audio tag will be displayed in browsers that does not support the audio element.
+ */
+
+audio ={
+
+ /**
+ * @description The autoplay attribute specifies that the audio will start playing as soon as it is ready.
+ * <p/>
+ * If this attribute is present the audio will autoplay.
+ * <p>
+ * syntax :
+ * &#60audio autoplay="autoplay" /&#62
+ * @type {String} [autoplay=autoplay]
+ * @example
+ * &#60audio controls="controls" autoplay="autoplay"&#62
+ * &#60source src="http://www.w3schools.com/html5/song.ogg" type="audio/ogg" /&#62
+ * &#60source src="http://www.w3schools.com/html5/song.mp3" type="audio/mpeg" /&#62
+ * Your browser does not support the audio element.
+ * &#60/audio&#62
+ * <p>
+ * <audio controls="controls" autoplay="autoplay">
+ * <source src="http://www.w3schools.com/html5/song.ogg" type="audio/ogg" />
+ * <source src="http://www.w3schools.com/html5/song.mp3" type="audio/mpeg" />
+ * Your browser does not support the audio element.
+ * </audio>
+ */
+ autoplay :,
+
+
+ /**
+ * @description The controls attribute specifies that the browser should provide playback controls for the audio.
+ * <p>
+ * When this attribute is set, it specifies that no scripted controls are set, and the browser should use its default controls.
+ * <p>
+ * The browser controls should include: Play, Pause, Seeking, Volume, Fullscreen toggle, Captions/Subtitles (when available) Audio track (when available).
+ * <p>
+ * syntax :
+ * &#60audio controls="controls" /&#62
+ * @type {String} [control=control]
+ * @example
+ * &#60audio controls="controls"&#62
+ * &#60source src="http://www.w3schools.com/html5/song.ogg" type="audio/ogg" /&#62
+ * &#60source src="http://www.w3schools.com/html5/song.mp3" type="audio/mpeg" /&#62
+ * Your browser does not support the audio element.
+ * &#60/audio&#62
+ * <p>
+ * <audio controls="controls">
+ * <source src="http://www.w3schools.com/html5/song.ogg" type="audio/ogg" />
+ * <source src="http://www.w3schools.com/html5/song.mp3" type="audio/mpeg" />
+ * Your browser does not support the audio element.
+ * </audio>
+ */
+ controls :,
+
+
+ /**
+ * @description The loop attribute specifies that the audio will start over again, every time it is finished.
+ * <p>
+ * If this attribute is present the audio will loop.
+ * <p/>
+ * syntax :
+ * &#60audio loop="loop" /&#62
+ * @type {String} [loop=loop]
+ * @example
+ * &#60audio controls="controls" loop="loop"&#62
+ * &#60source src="http://www.w3schools.com/html5/song.ogg" type="audio/ogg" /&#62
+ * &#60source src="http://www.w3schools.com/html5/song.mp3" type="audio/mpeg" /&#62
+ * Your browser does not support the audio element.
+ * &#60/audio&#62
+ * <p>
+ * <audio controls="controls" loop="loop">
+ * <source src="http://www.w3schools.com/html5/song.ogg" type="audio/ogg" />
+ * <source src="http://www.w3schools.com/html5/song.mp3" type="audio/mpeg" />
+ * Your browser does not support the audio element.
+ * </audio>
+ */
+ loop ,
+
+ /**
+ * @description The preload attribute specifies if the audio should be loaded when the page loads.
+ * <p/> This attribute is ignored if autoplay is present.
+ * syntax :
+ * &#60audio preload="value" /&#62
+ * <p>
+ * auto : Specifies that the browser should load entire audio when page loads<br>
+ * metadata: Specifies that the browser should load only metadata when page loads<br>
+ * none: Specified that the browser should not pre-load audio when page loads<br>
+ * @type {String} [preload=auto]<p> [preload=metadata]<p> [preload=none]
+ * @example
+ * &#60audio controls="controls" preload="auto"&#62
+ * &#60source src="http://www.w3schools.com/html5/song.ogg" type="audio/ogg" /&#62
+ * &#60source src="http://www.w3schools.com/html5/song.mp3" type="audio/mpeg" /&#62
+ * Your browser does not support the audio element.
+ * &#60/audio&#62
+ * <p>
+ * <audio controls="controls" preload="auto">
+ * <source src="http://www.w3schools.com/html5/song.ogg" type="audio/ogg" />
+ * <source src="http://www.w3schools.com/html5/song.mp3" type="audio/mpeg" />
+ * Your browser does not support the audio element.
+ * </audio>
+ */
+ preload : ,
+
+ /**
+ * @description The src attribute specifies the URL of the audio to play.
+ * <p/>The audio can also be set using the <source> tag.
+ * <p>
+ * syntax :
+ * &#60audio src="value"&#62
+ * <p>
+ * The URL of the audio file.<br>
+ * Possible values:<br>
+ * An absolute URL - points to another web site (like href="http://www.example.com/song.ogg")<br>
+ * A relative URL - points to a file within a web site (like href="song.ogg")<br>
+ *
+ * @type {String} [src=URL]
+ * @example
+ * &#60audio src="http://www.w3schools.com/html5/song.ogg" controls="controls"&#62
+ * Your browser does not support the audio element.
+ * &#60/audio&#62
+ * <p>
+ * <audio src="http://www.w3schools.com/html5/
+ song.ogg" controls="controls">
+ * Your browser does not support the audio element.
+ * </audio>
+ */
+ src : ,
+};
+
+ /**
+ * This class provides access to the device media, interfaces to both sound and video
+ * @constructor
+ */
+ function Media(src) {
+ this.src = src;
+ }
+
+ /**
+ * [readonly] Returns true if playback is paused; false otherwise.
+ * @property {Boolean}
+ */
+ Media.paused : ,
+
+ /**
+ * Causes the media player to start playing.
+ */
+ Media.prototype.play = function() {
+ }
+ /**
+ * Pauses the playing of the media player. Note: Pausing of a live stream is not supported.
+ */
+ Media.prototype.pause = function() {
+ }
+ /**
+ * Stops the playing of the media player.
+ */
+ Media.prototype.stop = function() {
+ }
+
38 api/blackberry.js
@@ -0,0 +1,38 @@
+/*
+* Copyright 2010-2011 Research In Motion Limited.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+
+/**
+* @BB50+
+* @toc {System} Network
+* @namespace The blackberry object is the root of all BlackBerry specific JavaScript functionality. blackberry.network is available by default in the regular browser.
+* @example
+* &lt;script type=&quot;text&sol;javascript&quot;&gt;
+* alert(&quot;You are on the &quot; + blackberry.network + &quot; Network&quot;);
+* &lt;&sol;script&gt;
+*/
+blackberry = { };
+
+/**
+* Returns the wireless network on which the BlackBerry device is communicating.
+* @type String
+* @static
+* @readOnly
+* @BB50+
+*/
+blackberry.network = { };
+
+
182 api/blackberry_app.js
@@ -0,0 +1,182 @@
+/*
+* Copyright 2010-2011 Research In Motion Limited.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+/**
+ * @toc {System} Application
+ * @featureID blackberry.app
+ * @namespace The Application object provides functions and properties for the currently running application.
+ * @example
+ * function makeTable() {
+ * try {
+ * var details = document.getElementById("details");
+ * if (details) {
+ * var output = "<table>";
+ * output += "<tr><td><b>Author</b></td><td>" + blackberry.app.author + "</td></tr>";
+ * output += "<tr><td><b>Author Email</b></td><td>" + blackberry.app.authorEmail + "</td></tr>";
+ * output += "<tr><td><b>Author URL</b></td><td>" + blackberry.app.authorURL + "</td></tr>";
+ * output += "<tr><td><b>Copyright</b></td><td>" + blackberry.app.copyright + "</td></tr>";
+ * output += "<tr><td><b>Description</b></td><td>" + blackberry.app.description + "</td></tr>";
+ * output += "<tr><td><b>ID</b></td><td>" + blackberry.app.id + "</td></tr>";
+ * output += "<tr><td><b>License</b></td><td>" + blackberry.app.license + "</td></tr>";
+ * output += "<tr><td><b>License URL</b></td><td>" + blackberry.app.licenseURL + "</td></tr>";
+ * output += "<tr><td><b>Name</b></td><td>" + blackberry.app.name + "</td></tr>";
+ * output += "<tr><td><b>Version</b></td><td>" + blackberry.app.version + "</td></tr>";
+ *
+ * details.innerHTML = output;
+ * }
+ * } catch(e) {
+ * alert("Exception in displayDetails: " + e);
+ * }
+ * }
+ * &lt;/script&gt;
+ */
+blackberry.app ={
+
+ /**
+ * @description This function will cause the application to exit.
+ * @BB50+
+ * @PB10
+ */
+ exit: function(){},
+
+ /**
+ * @description This function will move the application to the background.
+ * @BB50+
+ */
+ requestBackground: function(){},
+
+ /**
+ * @description This function will move the application to the foreground application.
+ * @BB50+
+ */
+ requestForeground : function(){},
+
+ /**
+ * @description This method will set the icon that appears in the Home Screen of the PlayBook.
+ * @returns {Boolean} Returns true if successful, false otherwise. The hover icon can only be set when the application icon has been set first. Changes made using this API are NOT persisted across PlayBook resets.
+ * @BB50+
+ * @param {String} uri Location of the image to use for the icon. The path to the image resource must be fully qualified. An example of a fully qualified path is local:///resourceFolder/icons/icon.png. The path to the resource must also be included in the whitelist. For example, accessing an image on the file system requires 'file:///' to be whitelisted
+ * @param {Boolean} [hover=false]If set to true then the hover icon for the application is changed. By default this is false, so the icon that is changed is the default main icon for the application.
+ */
+ setHomeScreenIcon : function(uri,hover){},
+
+ /**
+ * @description This method will set the text for the icon that appears in the Home Screen of the PlayBook.
+ * @returns {Boolean} Returns true if successful, false otherwise. Changes made using this API are NOT persisted across resets.
+ * @BB50+
+ * @param {String} text Text to appear on the home screen icon.
+ */
+ setHomeScreenName : function(text){},
+
+ /**
+ * @description The ID of the author's name that is specified in the config.xml file.
+ * @BB50+
+ * @PB10
+ * @readonly
+ * @type String
+ */
+ author : "",
+
+ /**
+ * @description The author's email of the BlackBerry WebWorks application that is specified in the config.xml file.
+ * @BB50+
+ * @PB10
+ * @readonly
+ * @type String
+ */
+ authorEmail : "",
+
+ /**
+ * @description The author's URL of the BlackBerry WebWorks application that is specified in the config.xml file.
+ * @BB50+
+ * @PB10
+ * @readonly
+ * @type String
+ */
+ authorURL : "",
+ /**
+ * @description The copyright information of the BlackBerry WebWorks application that is specified in the config.xml file.
+ * @BB50+
+ * @PB10
+ * @readonly
+ * @type String
+ */
+ copyright : "",
+
+ /**
+ * @description The description of the BlackBerry WebWorks application that is specified in the config.xml file.
+ * @BB50+
+ * @PB10
+ * @readonly
+ * @type String
+ */
+ description : "",
+
+ /**
+ * @description The ID of the BlackBerry WebWorks Application that is specified in the config.xml file.
+ * @BB50+
+ * @PB10
+ * @readonly
+ * @type String
+ */
+ id : "",
+
+ /**
+ * @description A property that will return true if the BlackBerry WebWorks Application is in the foreground.
+ * @BB50+
+ * @PB10
+ * @readonly
+ * @type String
+ */
+ //isForeground : "",
+
+ /**
+ * @description The license of the BlackBerry WebWorks Application that is specified in the config.xml file.
+ * @BB50+
+ * @PB10
+ * @readonly
+ * @type String
+ */
+ license : "",
+
+ /**
+ * @description AThe license URL of the BlackBerry WebWorks Application that is specified in the config.xml file.
+ * @BB50+
+ * @PB10
+ * @readonly
+ * @type String
+ */
+ licenseURL : "",
+
+ /**
+ * @description The name of the BlackBerry WebWorks Application that is specified in the config.xml file.
+ * @BB50+
+ * @PB10
+ * @readonly
+ * @type String
+ */
+ name : "",
+
+ /**
+ * @description The version of the BlackBerry WebWorks Application that is specified in the config.xml file.
+ * @BB50+
+ * @PB10
+ * @readonly
+ * @type String
+ */
+ version : "",
+
+};
82 api/blackberry_app_events.js
@@ -0,0 +1,82 @@
+/*
+* Copyright 2010-2011 Research In Motion Limited.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+/**
+ * @toc {System} Application Event
+ * @featureid blackberry.app.event
+ * @namespace The Application Event object allows you to access events triggered by the application
+ * <p/>
+ * The Application Event Object is static; all of its functions and properties are used directly from the object.
+ * @example
+ * &lt;script type="text/javascript"&gt;
+ * function onBackgroundCallback() {
+ * alert("Going to the background!");
+ * }
+ *
+ * function notifyMeWhenMinimized() {
+ * blackberry.app.event.onBackground(onBackgroundCallback);
+ * }
+ *
+ * notifyMeWhenMinimized();
+ * &lt;/script&gt;
+ */
+blackberry.app.event = {
+
+ /**
+ * @function
+ * @description Assigns a listener that is called when the application goes to the background.
+ * <p/>
+ * This event is dispatched whenever the application goes to the background, but has not ended. Only one function can be assigned to this event. To unregister the callback, call the onBackground method and pass in null for the callback parameter.
+ * <p/>Note: The BlackBerry PlayBook's "Application Behavior" setting has an impact on when onBackground gets dispatched. When "Application Behavior" is set to "Default", onBackground does not get dispatched until another application goes fullscreen. When "Application Behavior" is set to "Showcase", onBackground does not get dispatched because all open applications stay active. When "Application Behavior" is set to "Paused", onBackground gets dispatched once the application is sent to the background.
+ * @callback {function} onBackgroundCallback Function to be called when the application goes to the background. Expected signature: function onBackgroundCallback().
+ * @PB10
+ * @BB50+
+ */
+ onBackground : function(onBackgroundCallBack){},
+
+ /**
+ * @function
+ * @description Assigns a listener that is called when the application goes to the foreground.
+ * <p/>
+ * This event is dispatched whenever the application comes to the foreground, for example, when the user re-opens the application from the application list. Only one function can be assigned to this event. To unregister the callback call the onForeground method and pass in null for the callback parameter.
+ * <p/>Note: The BlackBerry PlayBook's "Application Behavior" setting has an impact on when onForeground gets dispatched. Refer to onBackground documentation for details.
+ * @callback {function} onForegroundCallback Function to be called when the application goes to the foreground. Expected signature: function onForegroundCallback().
+ * @PB10
+ * @BB50+
+ */
+ onForeground : function(onForegroundCallback){},
+
+ /**
+ * @function
+ * @description Assigns a listener that is called when a user swipes down from the top bezel of the BlackBerry PlayBook onto the screen.
+ * <p/>
+ * This event is dispatched when a user swipes down from the top bezel of the BlackBerry PlayBook onto the screen. Only one function can be assigned to this event. To unregister the callback call the onSwipeDown method and pass in null for the callback parameter.
+ * @callback {function} onSwipeDownCallback Function to be called when the swipe down action occurs. Expected signature: function onSwipeDownCallback().
+ * @PB10
+ */
+ onSwipeDown : function(onSwipeDownCallback) {},
+
+ /**
+ * @function
+ * @description Assigns a listener for when when a user begins to swipe from the top bezel of the BlackBerry PlayBook into the screen.
+ * <p/>
+ * This event is dispatched when the user starts a swipe from the top bezel of the BlackBerry PlayBook. Only one function can be assigned to this event. To unregister the callback call the onSwipeStart method and pass in null for the callback parameter.
+ * @callback {function} onSwipeStartCallback Function to be called when the user starts a swipe from the top bezel of the PlayBook. Expected signature: function onSwipeStartCallback().
+ * @PB10
+ */
+ onSwipeStart : function(onSwipeStartCallback) {}
+
+};
78 api/blackberry_audio.js
@@ -0,0 +1,78 @@
+/*
+* Copyright 2010-2011 Research In Motion Limited.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+
+/**
+* @namespace
+*/
+blackberry = { };
+
+
+/**
+* @toc {Audio} Audio
+* @BB50+
+* @namespace The audio object provides information about supported audio functionality on the device.
+* @featureID blackberry.audio
+* @featureID blackberry.audio.Player
+* @example
+* &lt;script type=&quot;text&sol;javascript&quot;&gt;
+* &sol;&sol; Display supported content types for specified protocol
+* var protocol = &quot;file&quot;;
+* var contentTypes = blackberry.audio.supportedContentTypes(protocol);
+*
+* if (contentTypes) {
+* var printingContentTypesList = &quot;&quot;;
+* for (i = 0; i &lt; contentTypes.length; i++) {
+* printingContentTypesList += contentTypes[i] + &quot;&bsol;n&quot;;
+* }
+*
+* alert(&quot;List of &quot; + contentTypes.length + &quot; supported content-types for &apos;&quot; + protocol + &quot;&apos; :&bsol;n&quot; + printingContentTypesList);
+* }
+* &lt;&sol;script&gt;
+* @example
+* &lt;script type=&quot;text&sol;javascript&quot;&gt;
+* &sol;&sol; Display all supported protocols
+* var protocols = blackberry.audio.supportedProtocols(null);
+*
+* if (protocols) {
+* var printingProtocolsList = &quot;&quot;;
+* for (i = 0; i &lt; protocols.length; i++) {
+* printingProtocolsList += protocols[i] + &quot;&bsol;n&quot;;
+* }
+*
+* alert(&quot;List of &quot; + protocols.length + &quot; supported protocols:&bsol;n&quot; + printingProtocolsList);
+* }
+* &lt;&sol;script&gt;
+*/
+blackberry.audio = { };
+
+/**
+* Return the list of supported content types for the given protocol.
+* @param {String} protocol The input protocol for the supported content types.
+* @returns {String[]}
+* @BB50+
+*/
+blackberry.audio.supportedContentTypes = function(protocol) { };
+
+/**
+* Return the list of supported protocols given the content type.
+* @param {String} content_type The content type for the supported protocols.
+* @returns {String[]}
+* @BB50+
+*/
+blackberry.audio.supportedProtocols = function(content_type) { };
+
+
361 api/blackberry_audio_Player.js
@@ -0,0 +1,361 @@
+/*
+* Copyright 2010-2011 Research In Motion Limited.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+
+/**
+* @namespace
+*/
+blackberry.audio = { };
+
+
+/**
+* <div><p>
+* The audio player is intended to play audio content only.
+* It is an instance object; if a new instance is desired, it must be created using the new keyword.
+* </p></div>
+* @toc {Audio} Player
+* @BB50+
+* @class The object represents an audio player.
+* @featureID blackberry.audio.Player
+* @constructor Construct a new Player object. &lt;div&gt;&lt;p&gt;
+&sol;&sol;&sol; Media locators are specified in URI syntax which is defined in the form:
+&sol;&sol;&sol; &apos;&lt;scheme&gt;:&lt;scheme-specific-part&gt;&apos;.
+&sol;&sol;&sol; If scheme is &apos;local&apos;, media type should be specified.
+&sol;&sol;&sol; &lt;&sol;p&gt;&lt;&sol;div&gt;
+* @param {String} locator Media locator string in URI syntax that describes the media content.
+* @param {String} [type] The ContentType of the media.
+* @param {Boolean} [async] The parameter specifying whether the player should asynchronously advance to PREFETCHED state. If not provided set to false.
+* @example
+* &lt;script type=&quot;text&sol;javascript&quot;&gt;
+* function createPlayerFromMediaFileStoredInLocal() {
+* var playerInstance = new blackberry.audio.Player(&quot;local:&sol;&sol;&sol;res&sol;filename.mid&quot;, &quot;audio&sol;mid&quot;, true);
+* }
+*
+* function createPlayerFromMediaFileStoresInSystem() {
+* var playerInstance = new blackberry.audio.Player(&quot;file:&sol;&sol;&sol;store&sol;home&sol;user&sol;music&sol;filename.mid&quot;);
+* }
+* &lt;&sol;script&gt;
+* @example
+* &lt;script type=&quot;text&sol;javascript&quot;&gt;
+* &sol;&sol; Display some player static and non-static constants.
+* var playerInstance = new blackberry.audio.Player(&quot;file:&sol;&sol;&sol;store&sol;home&sol;user&sol;music&sol;filename.mid&quot;);
+* var res = blackberry.audio.Player.UNREALIZED;
+* alert(&quot;The value of UNREALIZED static constant is: &quot; + res);
+* res = playerInstance.EVENT_DURATION_UPDATED;
+* alert(&quot;The value of EVENT_DURATION_UPDATED non-static constant is: &quot; + res);
+* &lt;&sol;script&gt;
+* @example
+* &lt;script type=&quot;text&sol;javascript&quot;&gt;
+* var playerInstance = new blackberry.audio.Player(&quot;file:&sol;&sol;&sol;store&sol;home&sol;user&sol;music&sol;filename.mp3&quot;);
+*
+* &sol;&sol; Setting new time for media
+* var newMediaTime = 10000;
+* playerInstance.mediaTime = newMediaTime;
+* alert(&quot;New media time: &quot; + playerInstance.mediaTime);
+*
+* &sol;&sol; Setting new volume for media
+* var newVolumeLevel = 85;
+* playerInstance.volumeLevel = newVolumeLevel;
+* alert(&quot;New volume level: &quot; + playerInstance.volumeLevel);
+* &lt;&sol;script&gt;
+* @example
+* &lt;script type=&quot;text&sol;javascript&quot;&gt;
+* &sol;&sol; Playing the player
+* var playerInstance = new blackberry.audio.Player(&quot;file:&sol;&sol;&sol;store&sol;home&sol;user&sol;music&sol;filename.mp3&quot;);
+* playerInstance.play();
+* &lt;&sol;script&gt;
+* @example
+* &lt;script type=&quot;text&sol;javascript&quot;&gt;
+* &sol;&sol; Pausing the player and then closing it
+* var playerInstance = new blackberry.audio.Player(&quot;file:&sol;&sol;&sol;store&sol;home&sol;user&sol;music&sol;filename.mp3&quot;);
+* playerInstance.pause();
+* playerInstance.close();
+* &lt;&sol;script&gt;
+* @example
+* &lt;script type=&quot;text&sol;javascript&quot;&gt;
+* &sol;&sol; Subscribing and unsubscribing with player&apos;s events
+* var playerInstance = new blackberry.audio.Player(&quot;file:&sol;&sol;&sol;store&sol;home&sol;user&sol;music&sol;filename.mp3&quot;);
+* playerInstance.addPlayerListener(OnPlayerUpdate);
+*
+* &sol;&sol; Invoked when there is an update event for the player.
+* function OnPlayerUpdate(player, event, eventData) {
+* try {
+* alert(&quot;Player&apos;s duration is: &quot; + player.duration)
+* } catch (e) {}
+* try {
+* alert(&quot;Event: &quot; + event);
+* } catch (e) {}
+* try {
+* alert(&quot;Event Data: &quot; + eventData);
+* } catch (e) {}
+*
+* playerInstance.addPlayerListener(null);
+* }
+* &lt;&sol;script&gt;
+*/
+blackberry.audio.Player = function(locator,type,async) { };
+
+/**
+* The returned value indicating that the requested time is unknown.
+* @type Number
+* @constant
+* @BB50+
+*/
+blackberry.audio.Player.TIME_UNKNOWN = -1;
+
+/**
+* The state of the Player indicating that the Player is closed.
+* @type Number
+* @constant
+* @BB50+
+*/
+blackberry.audio.Player.CLOSED = 0;
+
+/**
+* The state of the Player indicating that it has not acquired the required information and resources to function.
+* @type Number
+* @constant
+* @BB50+
+*/
+blackberry.audio.Player.UNREALIZED = 100;
+
+/**
+* The state of the Player indicating that it has acquired the required information but not the resources to function.
+* @type Number
+* @constant
+* @BB50+
+*/
+blackberry.audio.Player.REALIZED = 200;
+
+/**
+* The state of the Player indicating that it has acquired all the resources to begin playing.
+* @type Number
+* @constant
+* @BB50+
+*/
+blackberry.audio.Player.PREFETCHED = 300;
+
+/**
+* The state of the Player indicating that the Player has already started.
+* @type Number
+* @constant
+* @BB50+
+*/
+blackberry.audio.Player.STARTED = 400;
+
+/**
+* Starts the Player. Returns true on success.
+* @returns {Boolean}
+* @BB50+
+*/
+blackberry.audio.Player.prototype.play = function() { };
+
+/**
+* Pause the player&apos;s playback. Returns true on success.
+* @returns {Boolean}
+* @BB50+
+*/
+blackberry.audio.Player.prototype.pause = function() { };
+
+/**
+* Closing the Player and releases most of its resources, it must not be used again.
+* @returns {Boolean}
+* @BB50+
+*/
+blackberry.audio.Player.prototype.close = function() { };
+
+/**
+* Add a player listener for this player.
+* @param {OnPlayerUpdate} callback This method is called to deliver an event to a registered listener when a Player event is observed.
+* @returns {Boolean}
+* @BB50+
+*/
+blackberry.audio.Player.prototype.addPlayerListener = function(callback) { };
+
+/**
+* The duration of the media in milliseconds.
+* @type Number
+* @readOnly
+* @BB50+
+*/
+blackberry.audio.Player.prototype.duration = { };
+
+/**
+* The current state of this Player (one of Enumerated Player&apos;s constants).
+* @type Number
+* @readOnly
+* @BB50+
+*/
+blackberry.audio.Player.prototype.state = { };
+
+/**
+* Get&sol;Set Player&apos;s media time.
+* @type Number
+* @BB50+
+*/
+blackberry.audio.Player.prototype.mediaTime = { };
+
+/**
+* Get&sol;Set the player&apos;s volume level.
+* @type Number
+* @BB50+
+*/
+blackberry.audio.Player.prototype.volumeLevel = { };
+
+/**
+* Posted when the Player enters into a buffering mode.
+* @type String
+* @readOnly
+* @BB50+
+*/
+blackberry.audio.Player.prototype.EVENT_BUFFERING_STARTED = { };
+
+/**
+* Posted when the Player leaves the buffering mode.
+* @type String
+* @readOnly
+* @BB50+
+*/
+blackberry.audio.Player.prototype.EVENT_BUFFERING_STOPPED = { };
+
+/**
+* Posted when a Player is closed.
+* @type String
+* @readOnly
+* @BB50+
+*/
+blackberry.audio.Player.prototype.EVENT_CLOSED = { };
+
+/**
+* Posted when the system or another higher priority application has released an exclusive device which is now available to the Player.
+* @type String
+* @readOnly
+* @BB50+
+*/
+blackberry.audio.Player.prototype.EVENT_DEVICE_AVAILABLE = { };
+
+/**
+* Posted when the system or another higher priority application has temporarily taken control of an exclusive device which was previously available to the Player.
+* @type String
+* @readOnly
+* @BB50+
+*/
+blackberry.audio.Player.prototype.EVENT_DEVICE_UNAVAILABLE = { };
+
+/**
+* Posted when the duration of a Player is updated.
+* @type String
+* @readOnly
+* @BB50+
+*/
+blackberry.audio.Player.prototype.EVENT_DURATION_UPDATED = { };
+
+/**
+* Posted when a Player has reached the end of the media.
+* @type String
+* @readOnly
+* @BB50+
+*/
+blackberry.audio.Player.prototype.EVENT_END_OF_MEDIA = { };
+
+/**
+* Posted when an error had occurred.
+* @type String
+* @readOnly
+* @BB50+
+*/
+blackberry.audio.Player.prototype.EVENT_ERROR = { };
+
+/**
+* Posted when an error occurs during the recording.
+* @type String
+* @readOnly
+* @BB50+
+*/
+blackberry.audio.Player.prototype.EVENT_RECORD_ERROR = { };
+
+/**
+* Posted when recording is started.
+* @type String
+* @readOnly
+* @BB50+
+*/
+blackberry.audio.Player.prototype.EVENT_RECORD_STARTED = { };
+
+/**
+* Posted when recording is stopped.
+* @type String
+* @readOnly
+* @BB50+
+*/
+blackberry.audio.Player.prototype.EVENT_RECORD_STOPPED = { };
+
+/**
+* Posted when the size of the video is changed either because the source video size or the display size is changed.
+* @type String
+* @readOnly
+* @BB50+
+*/
+blackberry.audio.Player.prototype.EVENT_SIZE_CHANGED = { };
+
+/**
+* Posted when a Player is started.
+* @type String
+* @readOnly
+* @BB50+
+*/
+blackberry.audio.Player.prototype.EVENT_STARTED = { };
+
+/**
+* Posted when a Player stops in response to the stop method call.
+* @type String
+* @readOnly
+* @BB50+
+*/
+blackberry.audio.Player.prototype.EVENT_STOPPED = { };
+
+/**
+* Posted when a Player is stopped as responding to the setStopTime call using the StopTimeControl.
+* @type String
+* @readOnly
+* @BB50+
+*/
+blackberry.audio.Player.prototype.EVENT_STOPPED_AT_TIME = { };
+
+/**
+* Posted when the volume of an audio device is changed.
+* @type String
+* @readOnly
+* @BB50+
+*/
+blackberry.audio.Player.prototype.EVENT_VOLUME_CHANGED = { };
+
+
+/**
+* <div><p>
+* This is the interface that must be available on the callback function to receive a player's event data.
+* </p></div>
+* @toc {Audio} Player OnPlayerUpdate
+* @BB50+
+* @class Interface to provide information about update occured to the Player.
+* @constructor
+* @param {Player} player The player which generated the event.
+* @param {String} event The event generated as defined by the enumerated types.
+* @param {Object} eventData The associated event data.
+*/
+blackberry.audio.Player.OnPlayerUpdate = function(player,event,eventData) { };
+
+
234 api/blackberry_bbdoc.js
@@ -0,0 +1,234 @@
+var deployMachine = 'http://it0000000049025/'; //include the http protocol and trailing slash
+var deployFolder = 'jam_extensions_jars/'; //do not include a leading slash but keep the trailing slash
+
+var loading = 0;
+
+var deployUrl = deployMachine + deployFolder;
+
+var linkId = 'deploy-link';
+
+var xmlhttp;
+
+if (window.XMLHttpRequest)
+{// code for IE7+, Firefox, Chrome, Opera, Safari
+ xmlhttp=new XMLHttpRequest();
+}
+else
+{// code for IE6, IE5
+ xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
+}
+
+if(typeof window.addEventListener != 'undefined')
+{
+ //.. gecko, safari, konqueror and standard
+ window.addEventListener('load', doLoad, false);
+}
+else if(typeof document.addEventListener != 'undefined')
+{
+ //.. opera
+ document.addEventListener('load', doLoad, false);
+}
+else if(typeof window.attachEvent != 'undefined')
+{
+ //.. win/ie
+ window.attachEvent('onload', doLoad);
+}
+
+
+function doLoad() {
+ setDownloadLink();
+ setHeaderBar();
+ insertFooter();
+ insertTOC();
+ runFilter();
+}
+
+function setDownloadLink() {
+ var jarAnchor = document.getElementById(linkId);
+ if(jarAnchor != undefined && jarAnchor != null) {
+ var pageName = extractPageName(jarAnchor.href);
+ jarAnchor.href = deployUrl + pageName;
+ }
+}
+
+function extractPageName(fromUrl) {
+ return fromUrl.substring(fromUrl.lastIndexOf('/') + 1, fromUrl.length);
+}
+
+/*********************************************************************
+This function will inject the Header bar into the page by retrieving
+the header.html file and then inserting a div at the top of the page
+*********************************************************************/
+function setHeaderBar() {
+ // Now insert the header CSS
+ var style = document.createElement('link');
+ style.setAttribute('rel', 'stylesheet');
+ style.setAttribute('type', 'text/css');
+ style.setAttribute('href', 'css/headerStyle.css');
+ document.getElementsByTagName("head")[0].appendChild(style);
+
+ // Retrieve the header
+ xmlhttp.open("GET","header.html",false);
+ xmlhttp.send();
+ var responseText =xmlhttp.responseText;
+
+ // Insert header
+ var headerDiv = document.createElement('div');
+ headerDiv.innerHTML = responseText;
+ document.body.appendChild(headerDiv);
+
+ // Insert our topic header
+ var topicDiv = document.createElement('div');
+ topicDiv.setAttribute('class', 'topicDiv');
+ topicDiv.setAttribute('className', 'topicDiv');
+ topicDiv.innerHTML = document.title;
+ document.body.appendChild(topicDiv);
+}
+
+/*********************************************************************
+This function will inject the TOC bar into the page by retrieving
+the toc.html file and then inserting a div at the left of the page
+*********************************************************************/
+function insertTOC() {
+
+ // Now insert the TOC CSS
+ var style = document.createElement('link');
+ style.setAttribute('rel', 'stylesheet');
+ style.setAttribute('type', 'text/css');
+ style.setAttribute('href', 'css/toc.css');
+ document.getElementsByTagName("head")[0].appendChild(style);
+
+ var cookie = getCookie('index');
+ var tocFile = '';
+ var bodyMarginLeft;
+ if (cookie == 'feature') {
+ tocFile = 'list.html';
+ bodyMarginLeft = '290px';
+ } else {
+ tocFile = 'toc.html';
+ }
+
+ // Retrieve the TOC
+ xmlhttp.open("GET",tocFile,false);
+ xmlhttp.send();
+ var responseText =xmlhttp.responseText;
+
+ // Insert TOC
+ var headerDiv = document.createElement('div');
+ headerDiv.innerHTML = responseText;
+ document.body.appendChild(headerDiv);
+
+ // Adjust the mody margins for the feature list
+ if (bodyMarginLeft != undefined)
+ document.body.style.marginLeft = bodyMarginLeft;
+}
+
+function runFilter() {
+ if (document.location.search != '') {
+ var search = document.location.search.substring(1,document.location.search.length);
+
+ loading++;
+ // Find our section in the combo box
+ var filter = document.getElementById('filter');
+ for (var i = 0; i < filter.options.length; i++) {
+ if (filter.options[i].value == search) {
+ filter.selectedIndex = i;
+ }
+ }
+ loading--;
+
+ // Apply the visibilty filter based on the search string
+ var elements = getDesiredElements(document.body, 'x-ww-support');
+ for (var i = 0; i < elements.length; i++) {
+ var target = elements[i];
+ var x_ww_support = target.getAttribute('x-ww-support');
+ if (x_ww_support.indexOf(search) < 0) {
+ target.style.display = 'none';
+ }
+
+ }
+ }
+}
+
+
+/* This is a brute force way of getting elements so that it will continue to work
+on IE6 */
+function getDesiredElements(element, attributeName) {
+ var results = new Array();
+ if (element.hasAttribute(attributeName))
+ results.push(element);
+
+ // Check child nodes
+ for (var i = 0; i < element.childNodes.length; i++) {
+ var child = element.childNodes[i];
+ if (child.nodeType == 1){
+ results = results.concat(getDesiredElements(child, attributeName));
+ }
+ }
+ return results;
+}
+
+function getURLMinusSearch() {
+ var index = document.location.href.indexOf(document.location.search);
+ return document.location.href.substring(0, index);
+}
+
+function doFilterChange(select) {
+ if (loading != 0) return;
+
+ var value = select.value;
+ if (value == 'all') {
+ document.location.href = getURLMinusSearch();
+ }
+ else {
+ document.location.href = getURLMinusSearch() + '?'+value;
+ }
+}
+
+
+function insertFooter() {
+ // Insert footer
+ var footerText = '<div style="border-style: none none dashed none; border-width: 1px; border-color: Silver;margin-top: 40px;"></div><p style="font-size: 8.5pt;color:Gray;text-decoration:italics;text-align: center;">Copyright 1999-2011 Research In Motion Limited. 295 Phillip Street, Waterloo, Ontario, Canada, N2L 3W8. All Rights Reserved.</p>';
+ var footerDiv = document.createElement('div');
+ footerDiv.innerHTML = footerText;
+ document.body.appendChild(footerDiv);
+}
+
+function codeClick(element) {
+ var codeExamples = document.getElementById('codeExamples');
+ if (codeExamples.style.display == 'inline') {
+ codeExamples.style.display = 'none';
+ element.innerHTML = 'Expand';
+ }
+ else {
+ codeExamples.style.display = 'inline';
+ element.innerHTML = 'Collapse';
+ }
+}
+
+function setCookie(name, value, expires) {
+ document.cookie = name + "=" + escape(value) + "; path=/" + ((expires == null) ? "" : "; expires=" + expires.toGMTString());
+}
+
+function getCookie (name) {
+ var dc = document.cookie;
+ var cname = name + "=";
+ if (dc.length > 0) {
+ begin = dc.indexOf(cname);
+ if (begin != -1) {
+ begin += cname.length;
+ end = dc.indexOf(";", begin);
+ if (end == -1)
+ end = dc.length;
+ return unescape(dc.substring(begin, end));
+ }
+ }
+ return null;
+}
+
+function clickIndex(index) {
+ var exp = new Date(); //set new date object
+ exp.setTime(exp.getTime() + (1000 * 60 * 60 * 24 * 30)); //set it 30 days ahead
+ setCookie('index',index, exp);
+ location.reload(true);
+}
17 api/blackberry_find.js
@@ -0,0 +1,17 @@
+/*
+* Copyright 2010-2011 Research In Motion Limited.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+
165 api/blackberry_find_FilterExpression.js
@@ -0,0 +1,165 @@
+/*
+* Copyright 2010-2011 Research In Motion Limited.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+
+/**
+* @namespace
+*/
+blackberry.find = { };
+
+
+/**
+* <div><p>
+* The FilterExpression object is an instance object, where if a new instance is desired, it must be created using the new keyword.
+* </p></div>
+* @toc {Find} FilterExpression
+* @BB50+
+* @class The FilterExpression object represents the expression that is used to &apos;find&apos; an item that matches its defined condition. A FilterExpression object contains two fields, an operator and optional a boolean flag that indicates whether the condition should be evaluated negatively.
+* @featureID blackberry.find
+* @constructor Constructor for a new FilterExpression object.
+* @param {object} leftField an object of String or FilterExpression class.
+* @param {object} operator the operator used for comparing or combining.
+* @param {object} rightField a value of to be comared or an object of FilterExpression class to be combined.
+* @param {Boolean} [negate] optional (default value is false), the flag that indicates whether the condition of the FilterExpression object should be evaluated negatively.
+* @example
+* &lt;script type=&quot;text&sol;javascript&quot;&gt;
+*
+* &sol;&sol; Find all appointments with &quot;start&quot; date later than current time
+* var d = new Date();
+* var fe1 = new blackberry.find.FilterExpression(&quot;start&quot;, &quot;&gt;&quot;, d);
+* var appt = blackberry.pim.Appointment.find(fe1, 10);
+*
+* &sol;&sol; Find all contacts with &quot;firstName&quot; lead by &quot;John&quot;
+* var fe2 = new blackberry.find.FilterExpression(&quot;firstName&quot;, &quot;REGEX&quot;, &quot;John[a-zA-Z_0-9 ]*&quot;);
+* var result = blackberry.pim.Contact.find(fe2);
+* for (i = 0; i &lt; result.length; i++) {
+* alert(result[i].firstName);
+* }
+* &lt;&sol;script&gt;
+* @example
+* &lt;script type=&quot;text&sol;javascript&quot;&gt;
+*
+* &sol;&sol; Find all contacts except &quot;John Smith&quot;
+* var feFirst = new blackberry.find.FilterExpression(&quot;firstName&quot;, &quot;==&quot;, &quot;John&quot;);
+* var feLast = new blackberry.find.FilterExpression(&quot;lastName&quot;, &quot;==&quot;, &quot;Smith&quot;);
+*
+* &sol;&sol; Create a FilterExpression with &quot;feFirst &amp;&amp; feLast&quot;, with negateExpression set to &quot;true&quot;
+* var feNotJohnSmith = new blackberry.find.FilterExpression(feFirst, &quot;AND&quot;, feLast, true);
+*
+* &sol;&sol; result contains all contacts except &quot;John Smith&quot;
+* var result = blackberry.pim.Contact.find(feNotJohnSmith );
+* for (i = 0; i &lt; result.length; i++) {
+* alert(result[i].firstName);
+* }
+* &lt;&sol;script&gt;
+* @example
+* &lt;script type=&quot;text&sol;javascript&quot;&gt;
+*
+* &sol;&sol; Create a FilterExpression with &quot;firstName&quot; equals to &quot;John&quot; and &quot;lastName&quot; equals to &quot;Smith&quot;
+* var feFirst = new blackberry.find.FilterExpression(&quot;firstName&quot;, &quot;==&quot;, &quot;John&quot;);
+* var feLast = new blackberry.find.FilterExpression(&quot;lastName&quot;, &quot;==&quot;, &quot;Smith&quot;);
+* var feJohnSmith = new blackberry.find.FilterExpression(feFirst, &quot;AND&quot;, feLast);
+*
+* &sol;&sol; Create a FilterExpression with &quot;firstName&quot; equals to &quot;Jack&quot; and &quot;lastName&quot; equals to &quot;Brown&quot;
+* var feJackBrown = new blackberry.find.FilterExpression
+* (new blackberry.find.FilterExpression(&quot;firstName&quot;, &quot;==&quot;, &quot;Jack&quot;),
+* &quot;AND&quot;,
+* new blackberry.find.FilterExpression(&quot;lastName&quot;, &quot;==&quot;, &quot;Brown&quot;));
+*
+* &sol;&sol; FilterExpression can be nested or combined
+* var feCombined = new blackberry.find.FilterExpression(feJohnSmith, &quot;OR&quot;, feJackBrown);
+*
+* &sol;&sol; Find all contacts either &quot;John Smith&quot; or &quot;Jack Brown&quot;
+* var result = blackberry.pim.Contact.find(feCombined);
+* for (i = 0; i &lt; result.length; i++) {
+* alert(result[i].firstName);
+* }
+* &lt;&sol;script&gt;
+* @example
+* &lt;script type=&quot;text&sol;javascript&quot;&gt;
+*
+* &sol;&sol; Create a FilterExpression with &quot;firstName&quot; equals to &quot;John&quot; and &quot;lastName&quot; equals to &quot;Smith&quot;
+* var feFirst = new blackberry.find.FilterExpression(&quot;firstName&quot;, &quot;==&quot;, &quot;John&quot;);
+* var feLast = new blackberry.find.FilterExpression(&quot;lastName&quot;, &quot;==&quot;, &quot;Smith&quot;);
+* var feJohnSmith = new blackberry.find.FilterExpression(feFirst, &quot;AND&quot;, feLast);
+*
+* &sol;&sol; Find all contacts either &quot;John Smith&quot; or with the firstName of &quot;Jack&quot;
+* var feCombined2 = new blackberry.find.FilterExpression(feJohnSmith, &quot;OR&quot;, new blackberry.find.FilterExpression(&quot;firstName&quot;, &quot;==&quot;, &quot;Jack&quot;));
+* var result2 = blackberry.pim.Contact.find(feCombined2);
+* for (i = 0; i &lt; result2.length; i++) {
+* alert(result2[i].firstName);
+* }
+* &lt;&sol;script&gt;
+* @example
+* &lt;script type=&quot;text&sol;javascript&quot;&gt;
+*
+* &sol;&sol; Create a FilterExpression with &quot;Business&quot; being one of the categories
+* var fe = new blackberry.find.FilterExpression(&quot;categories&quot;, &quot;CONTAINS&quot;, &quot;Business&quot;);
+*
+* &sol;&sol; Find all contacts that belong to the &quot;Business&quot; category
+* var result = blackberry.pim.Contact.find(fe);
+* for (i = 0; i &lt; result.length; i++) {
+* alert(result[i].firstName);
+* }
+* &lt;&sol;script&gt;
+* @example
+* &lt;script type=&quot;text&sol;javascript&quot;&gt;
+*
+* &sol;&sol; Create a FilterExpression for uncategorized items
+* var fe = new blackberry.find.FilterExpression(&quot;categories&quot;, &quot;==&quot;, null);
+*
+* &sol;&sol; Find all uncategorized tasks
+* var result = blackberry.pim.Task.find(fe);
+* for (i = 0; i &lt; result.length; i++) {
+* alert(result[i].summary);
+* }
+* &lt;&sol;script&gt;
+*/
+blackberry.find.FilterExpression = function(leftField,operator,rightField,negate) { };
+
+/**
+*
+* @type object
+* @readOnly
+* @BB50+
+*/
+blackberry.find.FilterExpression.prototype.leftField = { };
+
+/**
+*
+* @type object
+* @readOnly
+* @BB50+
+*/
+blackberry.find.FilterExpression.prototype.operator = { };
+
+/**
+*
+* @type object
+* @readOnly
+* @BB50+
+*/
+blackberry.find.FilterExpression.prototype.rightField = { };
+
+/**
+* The boolean flag that indicates whether the condition of the FilterExpression object should be evaluated negatively. This should only be used when you have nested expressions. On regular field&sol;value comparisons, negate isn&apos;t necessary as the != is sufficient.
+* @type Boolean
+* @readOnly
+* @BB50+
+*/
+blackberry.find.FilterExpression.prototype.negate = { };
+
+
196 api/blackberry_focus.js
@@ -0,0 +1,196 @@
+/*
+* Copyright 2010-2011 Research In Motion Limited.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+
+/**
+* @namespace
+*/
+blackberry = { };
+
+
+/**
+* <div><h3>Guidelines</h3><p>
+* If the BlackBerry device doesn't have a trackball or trackpad, the focus-based navigation mode will not be enabled even if the widget configuration document specifies that focus-based navigation is used.
+* If the widget is configured for focus-based navigation and it runs on a BlackBerry device that uses a trackpad or trackball, focus-based navigation will be enabled.
+* </p></div>
+* <div><p>
+* In summary, running a widget with focus-based navigation mode markup on a BlackBerry device without a trackball is the same as running the widget without specifying any focus-based navigation and the entire navigation related HTML mark-up, JavaScript and CSS extensions are ignored.
+* </p></div>
+* <div><p>
+* Currently, focus based navigation will not function in a "child" document that is contained by a <frameset> <frame>
+* or <iframe> or any other HTML element that contains a document element. Focus based navigation only works in the "root" document.
+* </p></div>
+* <div><h3>Configuration</h3><p>
+* Navigation mode can be enabled for BlackBerry devices with trackball by adding a <rim:navigation> element in config.xml document that looks like the following:
+* <rim:navigation mode="focus" />
+* </p></div>
+* <div><h3>HTML Mark-up Details</h3><p>
+* By default, all <textarea>, <a>, <input>, <select> and <button> elements are focusable.
+* If you wish to have other HTML elements to become focusable, which will make them a part of the navigation map, you can add the attribute x-blackberry-focusable with the value of "true" to these elements, e.g.
+* </p></div>
+* <div><p>
+* <td id="Td1" x-blackberry-focusable="true" > 1 </td>
+* </p></div>
+* <div><p>
+* In addition, if you want to remove some of the default focusable elements from the navigation map, which prevent them from gaining focus, add the attribute x-blackberry-focusable with the value of "false" to these elements. For example:
+* </p></div>
+* <div><p>
+* <input value="Fixed" x-blackberry-focusable="false" />
+* </p></div>
+* <div><p>
+* By default, the "highest" focusable element will be initially focused after the document is completely loaded.
+* You can set a specific focusable element to be initially focused after the document is loaded by adding the "x-blackberry-initialFocus" attribute to it. For example:
+* </p></div>
+* <div><p>
+* <a class="list" x-blackberry-initialFocus="true" >First Link</a>
+* </p></div>
+* <div><h3>Events and Overrides</h3><p>
+* By default, all focusable HTML elements compose the navigation map and the focus will move from one focusable element to another focusable element according to the direction of the scroll wheel and the 2-D dimension of the focusable elements.
+* This default navigation behavior can be overridden and customized, by using the x-blackberry-onUp, x-blackberry-onDown, x-blackberry-onLeft, and x-blackberry-onRight event attributes.
+* For example, here is a snippet of HTML:
+* </p></div>
+* <div><p>
+* <input id="input1" value="OverrideNavigationBehavior" x-blackberry-onUp="SomeJsFunction()" />
+* </p></div>
+* <div><p>
+* If the input1 element is currently focused, and the user scrolls up using the trackpad or trackball, SomeJsFunction() will be executed instead of the default focus moving behavior.
+* The content of the x-blackberry-onUp value will be executed as JavaScript and the default focus movement will not occur.
+* </p></div>
+* <div><p>
+* In the above case, if SomeJsFunction() doesn't programmatically move the focus to another element, the current focused element will not change. If you want
+* to trap scrolling and do not want any navigation action to occur, or JavaScript to execute, you can override one of the navigation attributes with an empty value like the following: x-blackberry-onUp="".
+* </p></div>
+* <div><p>
+* When an element gains focus, it will receive a mouseover event. An element can gain focus when the user moves the trackpad or trackball under the default navigation behavior or if blackberry.focus.setFocus() is called programmatically to set the focus to an element.
+* When an element loses focus, it will receive a mouseout event. An element loses focus when the focus is set to another element.
+* </p></div>
+* <div><p>
+* When the user presses the trackpad or trackball in a selection action, the current focused element will receive a mousedown, mouseup, and click in sequence if it doesn't consume these actions as UI events in advance.
+* For example, when the current focused element is a text box, the element won't receive a mousedown, mouseup, and click when the user presses the trackpad or trackball, because the text box consumed these actions as UI events before these actions were popped up to the DOM level.
+* </p></div>
+* <div><p>
+* When there is no focusable element visible in the current viewable part of the screen, no element will be considered focused. In this case, the mousedown, mouseup, and click event is not directed to any element if you press the scroll wheel.
+* </p></div>
+* <div><h3>Focus Visual Effect</h3><p>
+* By default, when an element is focused, a light-blue round rectangle appears around the dimension of the element. When an element gains focus, the CSS hover will be triggered, allowing you to customize
+* the focused element. You can also turn off the default focus highlight by using the following meta tag:
+* </p></div>
+* <div><p>
+* <meta name="x-blackberry-defaultHoverEffect" content="false" />
+* </p></div>
+* <div><h3>Limitations</h3><p>
+* Currently focus navigation doesn't support the <select> element with the "multiple" attribute. Therefore the <select>
+* element with the "multiple" attribute is not focusable and cannot be added to navigation map. The workaround is to either add some navigation JavaScript outside the <select> element or simply using other HTML elements to mimic the multiple selection function.
+* </p></div>
+* @toc {User Interface} Focus
+* @BB50+
+* @namespace The focus object provides functions and properties for retrieving and setting focus to focusable areas of the HTML
+* @example
+* &lt;html&gt;
+* &lt;head&gt;
+* &lt;meta name=&quot;viewport&quot; id=&quot;viewport&quot; content=&quot;initial-scale=1.0,user-scalable=no&quot; &sol;&gt;
+* &lt;script type=&quot;text&sol;javascript&quot;&gt;
+* function moveDown(id)
+* {
+* blackberry.focus.setFocus(id);
+* }
+* &lt;&sol;script&gt;
+* &lt;&sol;head&gt;
+* &lt;body&gt;
+* &lt;table&gt;
+* &lt;tr&gt;
+* &lt;td&gt;&lt;&sol;td&gt;
+* &lt;td x-blackberry-focusable=&quot;true&quot; x-blackberry-onDown=&quot;moveDown(&apos;bottom&apos;);&quot; &gt;&lt;&sol;td&gt;
+* &lt;td &gt;&lt;&sol;td&gt;
+* &lt;&sol;tr&gt;
+* &lt;tr&gt;
+* &lt;td x-blackberry-focusable=&quot;true&quot;&gt;&lt;&sol;td&gt;
+* &lt;td x-blackberry-focusable=&quot;true&quot; onclick=&quot;alert(&apos;clicked me&apos;)&quot; &gt;&lt;&sol;td&gt;
+* &lt;td x-blackberry-focusable=&quot;true&quot; x-blackberry-onDown=&quot;&quot;&gt;&lt;&sol;td&gt;
+* &lt;&sol;tr&gt;
+* &lt;tr&gt;
+* &lt;td&gt;&lt;&sol;td&gt;
+* &lt;td x-blackberry-focusable=&quot;true&quot; id=&quot;bottom&quot;&gt;&lt;&sol;td&gt;
+* &lt;td&gt;&lt;&sol;td&gt;
+* &lt;&sol;tr&gt;
+* &lt;&sol;table&gt;
+* &lt;&sol;body&gt;
+* &lt;&sol;html&gt;
+*/
+blackberry.focus = { };
+
+/**
+* User scrolled Right
+* @type Number
+* @constant
+* @BB50+
+*/
+blackberry.focus.RIGHT = 0;
+
+/**
+* User scrolled Left
+* @type Number
+* @constant
+* @BB50+
+*/
+blackberry.focus.LEFT = 1;
+
+/**
+* User scrolled Up
+* @type Number
+* @constant
+* @BB50+
+*/
+blackberry.focus.UP = 2;
+
+/**
+* User scrolled Down
+* @type Number
+* @constant
+* @BB50+
+*/
+blackberry.focus.DOWN = 3;
+
+/**
+* Returns the id of the current focused HTML element
+* @returns {String}
+* @BB50+
+*/
+blackberry.focus.getFocus = function() { };
+
+/**
+* Returns the id of the prior focused HTML element to current focused element
+* @returns {String}
+* @BB50+
+*/
+blackberry.focus.getPriorFocus = function() { };
+
+/**
+* Returns the current direction of the scroll action. This is an integer value that is represented in the direction constants RIGHT, LEFT, UP, DOWN
+* @returns {Number}
+* @BB50+
+*/
+blackberry.focus.getDirection = function() { };
+
+/**
+* This function will set the focus on the HTML element with specified id value
+* @param {String} id The element &apos;id&apos; in which you want to set focus
+* @returns {void}
+* @BB50+
+*/
+blackberry.focus.setFocus = function(id) { };
+
+
85 api/blackberry_identity.js
@@ -0,0 +1,85 @@
+/*
+* Copyright 2010-2011 Research In Motion Limited.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+
+/**
+* @namespace
+*/
+blackberry = { };
+
+
+/**
+* @toc {Identity} Identity
+* @BB50+
+* @namespace The Identity object contains information regarding the user&apos;s identity and accounts on a BlackBerry smartphone.
+* @featureID blackberry.identity
+* @featureID blackberry.identity.phone
+* @example
+* &lt;script type=&quot;text&sol;javascript&quot;&gt;
+* var transportList = blackberry.identity.getTransportList();
+* for (var i = 0; i &lt; transportList.length; i++) {
+* alert(&quot;Transport name is:&quot; + transportList[i].name + &quot;&bsol;ntransport type:&quot; + transportList[i].type);
+* }
+*
+* alert(&quot;PIN: &quot; + blackberry.identity.PIN);
+* alert(&quot;IMSI: &quot; + blackberry.identity.IMSI);
+* alert(&quot;IMEI: &quot; + blackberry.identity.IMEI);
+* &lt;&sol;script&gt;
+*/
+blackberry.identity = { };
+
+/**
+* Returns the list of Service objects that describe each of the services that the user has for their device.
+* @returns {Service[]}
+* @BB50+
+*/
+blackberry.identity.getServiceList = function() { };
+
+/**
+* Returns a list of possible communications transports that can be used.
+* @returns {Transport[]}
+* @BB50+
+*/
+blackberry.identity.getTransportList = function() { };
+
+/**
+* Contains the Personal Identification number for the smartphone.
+* @type String
+* @static
+* @readOnly
+* @BB50+
+*/
+blackberry.identity.PIN = { };
+
+/**
+* Contains the IMSI number for the smartphone.
+* @type String
+* @static
+* @readOnly
+* @BB50+
+*/
+blackberry.identity.IMSI = { };
+
+/**
+* Contains the IMEI number for the smartphone.
+* @type String
+* @static
+* @readOnly
+* @BB50+
+*/
+blackberry.identity.IMEI = { };
+
+
95 api/blackberry_identity_Service.js
@@ -0,0 +1,95 @@
+/*
+* Copyright 2010-2011 Research In Motion Limited.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+
+/**
+* @namespace
+*/
+blackberry.identity = { };
+
+
+/**
+* <div><p>
+* A Service object will describe different settings for different kinds of accounts on the BlackBerry device. A user might have Hotmail account, a Unite account, and a BES account on the device.
+* Each service entry will describe the details of that specific service and will also provide a class to be passed into the constructors of PIM objects that could be saved specifically to their intended service.
+* The Service object is an instance object that cannot be created using the new keyword.
+* </p></div>
+* @toc {Identity} Service
+* @BB50+
+* @namespace The Service object represents a service entry that describes specifics for a service on a BlackBerry smartphone.
+* @featureID blackberry.identity
+* @example
+* &lt;script type=&quot;text&sol;javascript&quot;&gt;
+* &sol;&sol; Enumerate all of our services on the device.
+* var services = blackberry.identity.getServiceList();
+* for (var i = 0; i &lt; services.length; i++) {
+* if (services[i].type == services[i].TYPE_CONTACT) {
+* alert(&quot;Name: &quot; + services[i].name);
+* }
+* }
+* &lt;&sol;script&gt;
+*/
+blackberry.identity.Service = { };
+
+/**
+* Constant denoting a type of EMAIL
+* @type Number
+* @constant
+* @BB50+
+*/
+blackberry.identity.Service.TYPE_EMAIL = 0;
+
+/**
+* Constant denoting a type of CALENDAR
+* @type Number
+* @constant
+* @BB50+
+*/
+blackberry.identity.Service.TYPE_CALENDAR = 1;
+
+/**
+* Constant denoting a type of CONTACT
+* @type Number
+* @constant
+* @BB50+
+*/
+blackberry.identity.Service.TYPE_CONTACT = 2;
+
+/**
+* Email address associated with the service.
+* @type String
+* @readOnly
+* @BB50+
+*/
+blackberry.identity.Service.prototype.emailAddress = { };
+
+/**
+* Name of the service
+* @type String
+* @readOnly
+* @BB50+
+*/
+blackberry.identity.Service.prototype.name = { };
+
+/**
+* Specifies the type of service. This can be one of Calendar, Email or Contacts.
+* @type Number
+* @readOnly
+* @BB50+
+*/
+blackberry.identity.Service.prototype.type = { };
+
+
61 api/blackberry_identity_Transport.js
@@ -0,0 +1,61 @@
+/*
+* Copyright 2010-2011 Research In Motion Limited.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+
+/**
+* @namespace
+*/
+blackberry.identity = { };
+
+
+/**
+* <div><p>
+* Transport objects behave like a registry, in that they allow you to keep track of the various configuration settings of your BlackBerry device. The Transport object is an instance object that cannot be created using the new keyword.
+* </p></div>
+* @toc {Identity} Transport
+* @BB50+
+* @namespace Transport objects are used to store information about BlackBerry connections such as BES, BIS-B, Unite and Hotspots.
+* @featureID blackberry.identity
+* @example
+* &lt;script type=&quot;text&sol;javascript&quot;&gt;
+* var transports = blackberry.identity.getTransportList();
+* for (var i = 0; i &lt; transports.length;i++) {
+* if (transports[i].type == &quot;BES&quot;) {
+* alert(&quot;You are registered with a BES&quot;);
+* break;
+* }
+* }
+* &lt;&sol;script&gt;
+*/
+blackberry.identity.Transport = { };
+
+/**
+* Specifies the name of the Transport, for example, &apos;Desktop&apos;, &apos;Unite&apos;, or &apos;BIS&apos;.
+* @type String
+* @readOnly
+* @BB50+
+*/
+blackberry.identity.Transport.prototype.name = { };
+
+/**
+* Specifies the type of the Transport. Can be one of the following: TCP Cellular, Wap, Wap 2.0, MDS, Bis B, Unite!, or TCP Wifi.
+* @type String
+* @readOnly
+* @BB50+
+*/
+blackberry.identity.Transport.prototype.type = { };
+
+
73 api/blackberry_identity_phone.js
@@ -0,0 +1,73 @@
+/*
+* Copyright 2010-2011 Research In Motion Limited.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+
+/**
+* @namespace
+*/
+blackberry.identity = { };
+
+
+/**
+* <div><p>
+* The Phone Identity object is static; all of its functions and properties are used directly from the object.
+* </p></div>
+* @toc {Identity} Phone
+* @BB50+
+* @namespace The Phone Identity object contains information regarding the user&apos;s phone lines on a BlackBerry smartphone.
+* @featureID blackberry.identity.phone
+* @example
+* &lt;script type=&quot;text&sol;javascript&quot;&gt;
+* var lines = blackberry.identity.phone.getLineIds();
+* for (var i = 0; i &lt; lines.length-1; i++) {
+* alert(&quot;Line id : &quot; + lines[i] + &quot; has phone number : &quot; + blackberry.identity.phone.getLineNumber(lines[i]));
+* }
+* &lt;&sol;script&gt;
+*/
+blackberry.identity.phone = { };
+
+/**
+* Returns the id of all the lines registered with the device.
+* @returns {Number[]}
+* @BB50+
+*/
+blackberry.identity.phone.getLineIds = function() { };
+
+/**
+* Returns a string description of the line specified.
+* @param {Number} lineId [optional] ID of the line to retrieve the label for. If not specified the label for the default line is returned.
+* @returns {String}
+* @BB50+
+*/
+blackberry.identity.phone.getLineLabel = function(lineId) { };
+
+/**
+* Returns the phone number of the line specified.
+* @param {Number} lineId [optional] ID of the line to retrieve the label for. If not specified the label for the default line is returned.
+* @returns {Number}
+* @BB50+
+*/
+blackberry.identity.phone.getLineNumber = function(lineId) { };
+
+/**
+* Returns the type of the line specified.
+* @param {Number} lineId [optional] ID of the line to retrieve the label for. If not specified the label for the default line is returned.
+* @returns {Number}
+* @BB50+
+*/
+blackberry.identity.phone.getLineType = function(lineId) { };
+
+
205 api/blackberry_invoke.js
@@ -0,0 +1,205 @@
+/*
+* Copyright 2010-2011 Research In Motion Limited.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+/**
+ * @namespace The Invoke object contains methods that interact with other applications on a BlackBerry PlayBook.
+ * <p/>
+ * The invoke() method on the invoke object allows you to pass arguments to the target application. The types of arguments can be one of: {@link blackberry.invoke.BrowserArguments}, {@link blackberry.invoke.CameraArguments}.
+ * @toc {Invoke} Invoke
+ * @featureID blackberry.invoke
+ * @example
+ * &lt;script type="text/javascript"&gt;
+ *
+ * function startCameraApp() {
+ * var args = new blackberry.invoke.CameraArguments();
+ * args.view = blackberry.invoke.CameraArguments.VIEW_RECORDER;
+ *
+ * blackberry.invoke.invoke(blackberry.invoke.APP_CAMERA, args);
+ * }
+ *
+ * startCameraApp();
+ * &lt;/script&gt;
+ */
+blackberry.invoke = {
+
+ BrowserArguments :
+ {
+ /**
+ * Open Browser application on the BlackBerry Playbook.
+ * @class The BrowserArguments object is an instance object, and is used as a parameter to the invoke() method when invoking the BlackBerry Browser application.
+ * <p/>
+ * The BrowserArguments object must be created as an instance using the new keyword.
+ * @toc {Invoke} BrowserArguments
+ * @featureID blackberry.invoke
+ * @featureID blackberry.invoke.BrowserArguments
+ * @BB50+
+ * @PB10
+ * @constructs
+ * @param {String} url The desired url to bring up in the browser.
+ */
+ constructor : function(url){}
+ },
+
+ /**
+ * @desc Invokes another application on the BlackBerry Playbook.