diff --git a/HelloWorld/README.md b/HelloWorld/README.md
new file mode 100644
index 0000000..195dbb1
--- /dev/null
+++ b/HelloWorld/README.md
@@ -0,0 +1,53 @@
+# HelloWorld Sample Application
+
+This is a Hello World-like sample application for the BlackBerry PlayBook tablet that uses HTML5, JavaScript, and CSS. This application displays an image and a button. When users click the button, their GPS coordinates are returned and displayed on the screen along with some location-related information.
+
+This application was created for the [Creating your First application tutorial](https://developer.blackberry.com/html5/documentation/ww_tutorials/tutorial_create_first_app_intro_1969476_11.html).
+
+**Applies To**
+
+* [BlackBerry WebWorks SDK for Tablet OS](https://developer.blackberry.com/html5/)
+
+**Author(s)**
+
+* [Adam Stanley](https://github.com/astanley)
+* [Barb Paduch](https://github.com/bpaduch)
+
+**Dependencies**
+
+1. The images used in this sample application (icon.png and helloWorld.png) were created by the Multimedia team at RIM. These images are available for use under the Apache2 license.
+
+**To contribute code to this repository you must be [signed up as an official contributor](http://blackberry.github.com/howToContribute.html).**
+
+
+## How to Build
+
+To build the HelloWorld sample application, complete the following steps:
+
+1. Click on the **Downloads** tab above.
+2. Select **Download as zip** (Windows) or **Download as tar.gz** (Mac) and save the downloaded file to your local machine.
+3. Create a new folder on your local machine named **helloworld** (for example, **C:\Documents and Settings\User\WebWorks\HelloWorld** (Windows) or **~/WebWorks/HelloWorld** (Mac).
+4. Open the downloaded ZIP file from step 2 and extract the contents **from inside the zipped HelloWorld folder** to your local **HelloWorld** folder from step 3. This ensures that the necessary application assets, such as **config.xml**, are correctly located at the top level of the local **HelloWorld** folder (e.g. **~/WebWorks/HelloWorld/config.xml**).
+5. Using the **[Ripple Mobile Emulator](http://developer.blackberry.com/html5/download/ripple)** and either the **[BlackBerry WebWorks SDK for Smartphone](http://developer.blackberry.com/html5/download/sdk)** or the **[BlackBerry WebWorks SDK for Tablet OS](http://developer.blackberry.com/html5/download/sdk)**, package the contents of your local **HelloWorld** folder into a BlackBerry application. Enter the project root settings field as the local folder created in step 3, and the archive name settings field as **HelloWorld**.
+
+
+## More Info
+
+* [BlackBerry HTML5 WebWorks](https://developer.blackberry.com/html5/) - Downloads, Getting Started guides, samples, code signing keys.
+* [BlackBerry WebWorks Development Guides] (https://developer.blackberry.com/html5/documentation/)
+* [BlackBerry WebWorks Community Forums](http://supportforums.blackberry.com/t5/Web-and-WebWorks-Development/bd-p/browser_dev)
+* [BlackBerry Open Source WebWorks Contributions Forums](http://supportforums.blackberry.com/t5/BlackBerry-WebWorks/bd-p/ww_con)
+
+## Contributing Changes
+
+Please see the [README](https://github.com/blackberry/WebWorks-Samples) of the WebWorks-Samples repository for instructions on how to add new Samples or make modifications to existing Samples.
+
+
+## Bug Reporting and Feature Requests
+
+If you find a bug in a Sample, or have an enhancement request, simply file an [Issue](https://github.com/blackberry/WebWorks-Samples/issues) for the Sample and send a message (via github messages) to the Sample Author(s) to let them know that you have filed an [Issue](https://github.com/blackberry/WebWorks-Samples/issues).
+
+
+## Disclaimer
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/HelloWorld/config.xml b/HelloWorld/config.xml
new file mode 100644
index 0000000..e6edb48
--- /dev/null
+++ b/HelloWorld/config.xml
@@ -0,0 +1,28 @@
+
+
+
+ Hello World
+ My name
+ Hello World location display
+
+
+
+ read_geolocation
+
+
\ No newline at end of file
diff --git a/HelloWorld/geo.js b/HelloWorld/geo.js
new file mode 100644
index 0000000..cec6502
--- /dev/null
+++ b/HelloWorld/geo.js
@@ -0,0 +1,271 @@
+/*
+ * Copyright 2012 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.
+ */
+
+/**
+ * Use the W3C Geolocation API to retrieve geographic information about
+ * the user's current location.
+ *
+ * @param params (PositionOptions) - This is an optional parameter that
+ * contains three attributes: enableHighAccuracy (boolean), timeout (long),
+ * maximumAge (long). For more information, see http://dev.w3.org/geo/api/spec-source.html#position-options
+ */
+function getPosition(params)
+{
+ try
+ {
+ clearOutput();
+
+ //First test to verify that the browser supports the Geolocation API
+ if (navigator.geolocation !== null)
+ {
+ //Configure optional parameters
+ var options;
+ if (params)
+ {
+ options = eval("options = " + params + ";");
+ }
+ else {
+ // Uncomment the following line to retrieve the most accurate coordinates available
+ // options = { enableHighAccuracy : true, timeout : 60000, maximumAge : 0 };
+ }
+ navigator.geolocation.getCurrentPosition(geolocationSuccess, geolocationError, options);
+ }
+ else {
+ errorMessage("HTML5 geolocation is not supported.");
+ }
+ }
+ catch (e) {
+ errorMessage("exception (getPosition): " + e);
+ }
+}
+
+/**
+ * Calculates the distance between two location coordinates. There are various ways
+ * of implementing proximity detection. This method uses trigonometry and the
+ * Haversine formula to calculate the distance between two points
+ * (current & target location) on a spehere (Earth).
+ *
+ * @param current_lat - horizontal position (negative = South) of current location
+ * @param current_lon - vertical position (negative = West) of current location
+ * @param target_lat - horizontal position (negative = South) of destination location
+ * @param target_lat - vertical position (negative = West) of destination location
+ */
+function distanceBetweenPoints(current_lat, current_lon, target_lat, target_lon)
+{
+ var distance = 0;
+ try
+ {
+ //Radius of the earth in meters:
+ var earth_radius = 6378137;
+
+ //Calculate the distance, in radians, between each of the points of latitude/longitude:
+ var distance_lat = (target_lat - current_lat) * Math.PI / 180;
+ var distance_lon = (target_lon - current_lon) * Math.PI / 180;
+
+ //Using the haversine formula, calculate the distance between two points (current & target coordinates) on a sphere (earth):
+ //More info: http://www.movable-type.co.uk/scripts/latlong.html
+ var a = Math.pow(Math.sin(distance_lat / 2), 2) + (Math.cos(current_lat * Math.PI / 180) * Math.cos(target_lat * Math.PI / 180) * Math.pow(Math.sin(distance_lon / 2), 2));
+ var b = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
+ distance = Math.floor(earth_radius * b);
+ }
+ catch (e) {
+ errorMessage("exception (distanceBetweenPoints): " + e);
+ }
+ return distance;
+}
+
+
+/**
+ * Displays the location information retrieved from the geolocation service.
+ *
+ * @param coords (Coordinates) - geographic information returned from geolocation service
+ * http://dev.w3.org/geo/api/spec-source.html#coordinates
+ */
+function displayLocationInfo(coordinates)
+{
+ try
+ {
+ var lat = coordinates.latitude;
+ var lon = coordinates.longitude;
+ var alt = coordinates.altitude;
+
+ var locationInfo = "
");
+ }
+ catch (e) {
+ errorMessage("exception (displayLocationInfo): " + e);
+ }
+}
+
+/**
+ * Display info about the give users proximity to three cities: Toronto, London and Hong Kong
+ *
+ * @param coords (Coordinates) - geographic information returned from geolocation service
+ * http://dev.w3.org/geo/api/spec-source.html#coordinates
+ */
+function displayContentForLocation(coordinates)
+{
+ try
+ {
+ var locationSpecificContent = "
Location-specific info:
";
+
+ var latitude = coordinates.latitude;
+ var longitude = coordinates.longitude;
+ var accuracy = coordinates.accuracy;
+
+ //If a user is within 25km of Dallas, they are assumed to be in Dallas, USA:
+ //Dallas is located at (32.802955, -96.769923)
+ var dallas = distanceBetweenPoints(latitude, longitude, 32.802955, -96.769923);
+ if (dallas <= (accuracy + 25000))
+ {
+ locationSpecificContent += "
You are " + dallas + " km from Dallas, Texas, USA.
";
+ }
+
+ //If a user is within 25km of Manaus, they are assumed to be in Manaus, Brazil:
+ //Manaus is located at (-3.106409, -60.026429)
+ var manaus = distanceBetweenPoints(latitude, longitude, -3.106409, -60.026429);
+ if (manaus <= (accuracy + 25000))
+ {
+ locationSpecificContent += "
";
+ }
+
+ //If a user is within 25km of Marrakesh, they are assumed to be in Marrakesh, Morocco:
+ //Marrakesh is located at (31.633333, -7.998046)
+ var marrakesh = distanceBetweenPoints(latitude, longitude, 31.633333, -7.998046);
+ if (marrakesh <= (accuracy + 25000))
+ {
+
+ locationSpecificContent += "
You are " + marrakesh + " km from Marrakesh, Morocco.
";
+ }
+
+ displayOutput("
" + locationSpecificContent + "
");
+ }
+ catch (e) {
+ errorMessage("exception (displayContentForLocation): " + e);
+ }
+}
+
+/**
+ * Call back function used to process the Position object returned by the Geolocation service
+ *
+ * @params position (Position) - contains geographic information acquired by the geolocation service.
+ * http://dev.w3.org/geo/api/spec-source.html#position_interface
+ */
+function geolocationSuccess(position)
+{
+ try
+ {
+ // The Position object contains the following parameters:
+ // coords - geographic information such as location coordinates,
+ // accuracy, and optional attributes (altitude and speed).
+ var coordinates = position.coords;
+
+ //Now that we have the geographic information, what are some useful things that can be done with this info?
+
+ //1) Display current location information:
+ displayLocationInfo(coordinates);
+
+ //2) Display content relevant to the users current location:
+ // Identify whether a user is within range of a given location. This can be done by calculating their
+ // distance from a known location (within an allowable threshold of accuracy).
+ displayContentForLocation(coordinates);
+
+ //3) Calculate relative direction to a point of interest
+ //displayDirections(coordinates);
+
+ }
+ catch (e) {
+ errorMessage("exception (geolocationSuccess): " + e);
+ }
+}
+
+/**
+ * Call back function raised by the Geolocation service when an error occurs
+ *
+ * @param posError (PositionError) - contains the code and message of the error that occurred while retrieving geolocation info.
+ * http://dev.w3.org/geo/api/spec-source.html#position-error
+ */
+function geolocationError(posError)
+{
+ try
+ {
+ if (posError)
+ {
+ switch(posError.code)
+ {
+ case posError.TIMEOUT:
+ errorMessage("TIMEOUT: " + posError.message);
+ break;
+ case posError.PERMISSION_DENIED:
+ errorMessage("PERMISSION DENIED: " + posError.message);
+ break;
+ case posError.POSITION_UNAVAILABLE:
+ errorMessage("POSITION UNAVAILABLE: " + posError.message);
+ break;
+ default:
+ errorMessage("UNHANDLED MESSAGE CODE (" + posError.code + "): " + posError.message);
+ break;
+ }
+ }
+ }
+ catch (e) {
+ errorMessage("Exception (geolocationError): " + e);
+ }
+}
+
+/**
+ * Helper methods to display text on the screen
+ */
+function clearOutput()
+{
+ var ele = document.getElementById("geolocationInfo");
+ if (ele)
+ {
+ ele.innerHTML = "";
+ }
+}
+function displayOutput(output)
+{
+ var ele = document.getElementById("geolocationInfo");
+ if (ele)
+ {
+ ele.innerHTML += "
" + output + "
";
+ }
+}
+
+function errorMessage(msg)
+{
+ displayOutput("Error:" + msg + "");
+}
+
+
diff --git a/HelloWorld/images/helloWorld.png b/HelloWorld/images/helloWorld.png
new file mode 100644
index 0000000..e9f9ad3
Binary files /dev/null and b/HelloWorld/images/helloWorld.png differ
diff --git a/HelloWorld/images/icon.png b/HelloWorld/images/icon.png
new file mode 100644
index 0000000..f083d41
Binary files /dev/null and b/HelloWorld/images/icon.png differ
diff --git a/HelloWorld/index.html b/HelloWorld/index.html
new file mode 100644
index 0000000..6e9202f
--- /dev/null
+++ b/HelloWorld/index.html
@@ -0,0 +1,37 @@
+
+
+
+
+ HelloWorld
+
+
+
+
+
+
+
+
+
+
+
+
Hello world, where am I?
+
+
+
+
+
+
\ No newline at end of file
diff --git a/HelloWorld/styles.css b/HelloWorld/styles.css
new file mode 100644
index 0000000..7c56020
--- /dev/null
+++ b/HelloWorld/styles.css
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2012 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.
+ */
+@CHARSET "ISO-8859-1";
+
+
+.error {
+ color: red
+ }
+body {
+ font: 100%/1.4 Calibri,Verdana, Arial, Helvetica, sans-serif;
+ }
+
+h2 {
+ color: #154D5B;
+}
+
+#container {
+ margin:0 auto;
+ width: 1024px;
+ height: 600px; }
+
+#world {
+ float:left;
+ margin-left: 50;
+ margin-top: 50px;
+ width: 500px; }
+
+#button {
+ float:left;
+ margin-top: 100px;
+ margin-left: 25px;
+ width: 40%; }
+
+#geolocationInfo {
+ float:left;
+ margin-top: 10px;
+ margin-left: 25px;
+ width: 40%; }
\ No newline at end of file