diff --git a/Definitions/phonegap-2.2.d.ts b/Definitions/phonegap-2.2.d.ts
new file mode 100644
index 000000000..ceb87f325
--- /dev/null
+++ b/Definitions/phonegap-2.2.d.ts
@@ -0,0 +1,54 @@
+// Type definitions for PhoneGap 2.2
+// Project: http://phonegap.com
+// Definitions by: Boris Yankov
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+
+interface Acceleration {
+ x: number;
+ y: number;
+ z: number;
+ timestamp: number; //DOMTimeStamp;
+}
+
+interface AccelerometerOptions {
+ frequency?: number;
+}
+
+interface Accelerometer {
+ getCurrentAcceleration(accelerometerSuccess: (acceleration: Acceleration) => void , accelerometerError: () => void ): void;
+ watchAcceleration(accelerometerSuccess: (acceleration: Acceleration) => void , accelerometerError: () => void , accelerometerOptions?: AccelerometerOptions): void;
+ clearWatch(watchID: number): void;
+}
+
+interface CameraPopoverOptions {
+ x: number;
+ y: number;
+ width: number;
+ height: number;
+ arrowDir: number;
+}
+
+interface CameraOptions {
+ quality?: number;
+ destinationType?: number;
+ sourceType?: number;
+ allowEdit?: bool;
+ encodingType?: number;
+ targetWidth?: number;
+ targetHeight?: number;
+ mediaType?: number;
+ correctOrientation?: bool;
+ saveToPhotoAlbum?: bool;
+ popoverOptions?: number;
+}
+
+interface Camera {
+ getPicture(cameraSuccess: (imageData: string) => void , cameraError: (message: string) => void , cameraOptions?: CameraOptions): void;
+ cleanup(cameraSuccess: (imageData: string) => void , cameraError: (message: string) => void ): void;
+}
+
+interface NavigatorPhonegap {
+ accelerometer: Accelerometer;
+ camera: Camera;
+}
\ No newline at end of file
diff --git a/Tests/phonegap-tests.ts b/Tests/phonegap-tests.ts
new file mode 100644
index 000000000..b53bd0903
--- /dev/null
+++ b/Tests/phonegap-tests.ts
@@ -0,0 +1,79 @@
+///
+
+function test_accelerometer() {
+ var watchID = null;
+ var options = { frequency: 3000 };
+
+ watchID = navigator.accelerometer.watchAcceleration(onSuccess, onError, options);
+
+ if (watchID) {
+ navigator.accelerometer.clearWatch(watchID);
+ watchID = null;
+ }
+ function onSuccess(acceleration: Acceleration) {
+ var element = document.getElementById('accelerometer');
+ element.innerHTML = 'Acceleration X: ' + acceleration.x + '
' +
+ 'Acceleration Y: ' + acceleration.y + '
' +
+ 'Acceleration Z: ' + acceleration.z + '
' +
+ 'Timestamp: ' + acceleration.timestamp + '
';
+ }
+ function onError() {
+ alert('onError!');
+ }
+}
+
+function test_camera() {
+ var pictureSource;
+ var destinationType;
+ document.addEventListener("deviceready", onDeviceReady, false);
+ function onDeviceReady() {
+ pictureSource = navigator.camera.PictureSourceType;
+ destinationType = navigator.camera.DestinationType;
+ }
+ function onPhotoDataSuccess(imageData) {
+ var smallImage = document.getElementById('smallImage');
+ smallImage.style.display = 'block';
+ smallImage.src = "data:image/jpeg;base64," + imageData;
+ }
+ function onPhotoURISuccess(imageURI) {
+ var largeImage = document.getElementById('largeImage');
+ largeImage.style.display = 'block';
+ largeImage.src = imageURI;
+ }
+ function capturePhoto() {
+ navigator.camera.getPicture(onPhotoDataSuccess, onFail, {
+ quality: 50,
+ destinationType: destinationType.DATA_URL
+ });
+ }
+ function capturePhotoEdit() {
+ navigator.camera.getPicture(onPhotoDataSuccess, onFail, {
+ quality: 20, allowEdit: true,
+ destinationType: destinationType.DATA_URL
+ });
+ }
+ function getPhoto(source) {
+ navigator.camera.getPicture(onPhotoURISuccess, onFail, {
+ quality: 50,
+ destinationType: destinationType.FILE_URI,
+ sourceType: source
+ });
+ }
+ function onFail(message) {
+ alert('Failed because: ' + message);
+ }
+
+ var popover = new CameraPopoverOptions(300, 300, 100, 100, 1);
+ var options = { quality: 50, destinationType: 1, sourceType: 1, popoverOptions: popover };
+
+ navigator.camera.getPicture(onSuccess, onFail, options);
+
+ function onSuccess(imageData) {
+ var image = document.getElementById('myImage');
+ image.src = "data:image/jpeg;base64," + imageData;
+ }
+
+ function onFail(message) {
+ alert('Failed because: ' + message);
+ }
+}
\ No newline at end of file