incubator-callback-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From hermw...@apache.org
Subject [4/10] webos commit: updatd to 1.5.0
Date Fri, 23 Mar 2012 22:21:48 GMT
updatd to 1.5.0


Project: http://git-wip-us.apache.org/repos/asf/incubator-cordova-webos/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cordova-webos/commit/246123e9
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cordova-webos/tree/246123e9
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cordova-webos/diff/246123e9

Branch: refs/heads/master
Commit: 246123e9645915b30e89fa632a478dec3d308245
Parents: 6d2b400
Author: Steven Gill <stevengill97@gmail.com>
Authored: Sat Mar 3 08:31:19 2012 -0800
Committer: hermwong <herm.wong@gmail.com>
Committed: Fri Mar 23 15:09:35 2012 -0700

----------------------------------------------------------------------
 VERSION                     |    2 +-
 framework/phonegap-1.0.0.js | 1828 --------------------------------------
 framework/phonegap-1.5.0.js | 1828 ++++++++++++++++++++++++++++++++++++++
 3 files changed, 1829 insertions(+), 1829 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cordova-webos/blob/246123e9/VERSION
----------------------------------------------------------------------
diff --git a/VERSION b/VERSION
index 13175fd..3e1ad72 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.4.1
\ No newline at end of file
+1.5.0
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-cordova-webos/blob/246123e9/framework/phonegap-1.0.0.js
----------------------------------------------------------------------
diff --git a/framework/phonegap-1.0.0.js b/framework/phonegap-1.0.0.js
deleted file mode 100644
index 1571443..0000000
--- a/framework/phonegap-1.0.0.js
+++ /dev/null
@@ -1,1828 +0,0 @@
-if (typeof(DeviceInfo) != 'object')
-    DeviceInfo = {};
-
-function PhoneGap() {
-	ready = true;
-	available = true;
-	sceneController = null;	
-}; 
-
-PhoneGap.exec = function(win, fail, clazz, action, args) {
-
- setTimeout(function() { 
-	 PhoneGap.plugins[clazz].execute(action, args, win, fail); 
-   }, 0);
-
-}
-
-PhoneGap.checkArgs = function(args, func) {
-    if (typeof args == 'object')
-        func.apply(null, args);
-    else
-        func(args);
-}
-
-PhoneGap.callback = function(success, win, fail) {
-	if (success)
-		win();
-	else
-		fail();    
-}
-
-// translates the action into an API call
-accelerometerAPI = {
-    execute: function(action, args, win, fail) {
-        var actionFound = false;
-		switch(action) {
-			case 'setFastAccelerometer':				
-				PhoneGap.checkArgs(args, navigator.accelerometer.setFastAccelerometer);    
-				actionFound = true; 
-				break;
-			case 'getCurrentAcceleration':
-				PhoneGap.checkArgs(args, navigator.accelerometer.getCurrentAcceleration);
-				actionFound = true;
-				break;	
-			case 'watchAcceleration':
-			    PhoneGap.checkArgs(args, navigator.accelerometer.watchAcceleration);
-			    actionFound = true;
-			    break;
-			case 'clearWatch':
-			    PhoneGap.checkArgs(args, navigator.accelerometer.clearWatch);
-			    actionFound = true;
-			    break;
-			case 'start':
-			    PhoneGap.checkArgs(args, navigator.accelerometer.start);
-			    actionFound = true;
-			    break;      		
-		}
-
-        PhoneGap.callback(actionFound, win, fail);
-    }
-}
-
-applicationAPI = {
-    execute: function(action, args, win, fail) {
-        var actionFound = false;
-		switch(action) {
-			case 'activate':				
-				PhoneGap.checkArgs(args, navigator.application.activate);    
-				actionFound = true; 
-				break;
-			case 'deactivate':
-				PhoneGap.checkArgs(args, navigator.application.deactivate);
-				actionFound = true;
-				break;	
-			case 'getIdentifier':
-			    PhoneGap.checkArgs(args, navigator.application.getIdentifier);
-			    actionFound = true;
-			    break;      		
-		}
-
-		PhoneGap.callback(actionFound, win, fail);       
-    }
-}
-
-cameraAPI = {
-    execute: function(action, args, win, fail) {
-        var actionFound = false;
-		switch(action) {
-			case 'getPicture':
-				console.log("in here");
-				PhoneGap.checkArgs(args, navigator.camera.getPicture);    
-				actionFound = true; 
-				break;      		
-		}
-
-		PhoneGap.callback(actionFound, win, fail);        
-    }
-}
-
-debugAPI = {
-    execute: function(action, args, win, fail) {
-        var actionFound = false;
-		switch(action) {
-			case 'log':				
-				PhoneGap.checkArgs(args, window.debug.log);    
-				actionFound = true; 
-				break;
-		    case 'warn':
-			    PhoneGap.checkArgs(args, window.debug.warn);    
-			    actionFound = true; 
-			    break;		    
-		    case 'error':
-			    PhoneGap.checkArgs(args, window.debug.error);    
-			    actionFound = true; 
-			    break;		          		
-		}
-
-		PhoneGap.callback(actionFound, win, fail);        
-    }
-}
-
-deviceAPI = {
-    execute: function(action, args, win, fail) {
-        var actionFound = false;
-		switch(action) {
-			case 'getDeviceInfo':				
-				PhoneGap.checkArgs(args, navigator.device.getDeviceInfo);    
-				actionFound = true; 
-				break;		          		
-		}
-
-		PhoneGap.callback(actionFound, win, fail);        
-    }
-}
-
-geolocationAPI = {
-    execute: function(action, args, win, fail) {
-        var actionFound = false;
-		switch(action) {
-			case 'getCurrentPosition':				
-				PhoneGap.checkArgs(args, navigator.geolocation.getCurrentPosition);    
-				actionFound = true; 
-				break; 
-			case 'watchPosition':				
-				PhoneGap.checkArgs(args, navigator.geolocation.watchPosition);    
-				actionFound = true; 
-				break;
-			case 'clearWatch':
-			    PhoneGap.checkArgs(args, navigator.geolocation.clearWatch);    
-			    actionFound = true; 
-			    break;
-			case 'start':
-			    PhoneGap.checkArgs(args, navigator.geolocation.start);    
-			    actionFound = true; 
-			    break;
-			case 'stop':
-			    PhoneGap.checkArgs(args, navigator.geolocation.stop);    
-			    actionFound = true; 
-			    break;								   	          		
-		}
-
-		PhoneGap.callback(actionFound, win, fail);        
-    }
-}
-
-mapAPI = {
-    execute: function(action, args, win, fail) {
-        var actionFound = false;
-		switch(action) {
-			case 'show':				
-				PhoneGap.checkArgs(args, navigator.map.show);    
-				actionFound = true; 
-				break;		          		
-		}
-
-		PhoneGap.callback(actionFound, win, fail);        
-    }
-}
-
-mouseAPI = {
-    execute: function(action, args, win, fail) {
-        var actionFound = false;
-		switch(action) {
-			case 'simulateMouseClick':				
-				PhoneGap.checkArgs(args, navigator.mouse.simulateMouseClick);    
-				actionFound = true; 
-				break;		          		
-		}
-
-		PhoneGap.callback(actionFound, win, fail);        
-    }
-} 
-
-networkAPI = {
-    execute: function(action, args, win, fail) {
-        var actionFound = false;
-		switch(action) {
-			case 'isReachable':				
-				PhoneGap.checkArgs(args, navigator.network.isReachable);    
-				actionFound = true; 
-				break;		          		
-		}
-
-		PhoneGap.callback(actionFound, win, fail);        
-    }
-}
-
-notificationAPI = {
-    execute: function(action, args, win, fail) {
-		var actionFound = false;
-		switch(action) {
-			case 'alert':				
-				PhoneGap.checkArgs(args, navigator.notification.alert);    
-				actionFound = true; 
-				break;
-			case 'showBanner':
-				PhoneGap.checkArgs(args, navigator.notification.showBanner);
-				actionFound = true;
-				break;	
-			case 'newDashboard':
-			    PhoneGap.checkArgs(args, navigator.notification.newDashboard);
-			    actionFound = true;
-			    break;
-			case 'removeBannerMessage':
-			    PhoneGap.checkArgs(args, navigator.notification.removeBannerMessage);
-			    actionFound = true;
-			    break;
-			case 'clearBannerMessage':
-			    PhoneGap.checkArgs(args, navigator.notification.clearBannerMessage);
-			    actionFound = true;
-			    break;
-			case 'vibrate':            
-			    PhoneGap.checkArgs(args, navigator.notification.vibrate);
-			    actionFound = true;
-			    break;
-			case 'beep':               
-			    PhoneGap.checkArgs(args, navigator.notification.beep);
-			    actionFound = true;
-			    break;       		
-		}
-
-		PhoneGap.callback(actionFound, win, fail);
-   }
-}
-
-orientationAPI = {
-    execute: function(action, args, win, fail) {
-        var actionFound = false;
-		switch(action) {
-			case 'setOrientation':				
-				PhoneGap.checkArgs(args, navigator.orientation.setOrientation);    
-				actionFound = true; 
-				break;
-			case 'getOrientation':
-			    PhoneGap.checkArgs(args, navigator.orientation.getOrientation);    
-			    actionFound = true; 
-			    break;			    
-			case 'start':
-			    PhoneGap.checkArgs(args, navigator.orientation.start);    
-				actionFound = true; 
-				break;
-			case 'watchOrientation':
-			    PhoneGap.checkArgs(args, navigator.orientation.watchOrientation);    
-				actionFound = true; 
-				break;
-			case 'clearWatch':
-                PhoneGap.checkArgs(args, navigator.orientation.clearWatch);    
-			    actionFound = true; 
-			    break;
-		}
-
-		PhoneGap.callback(actionFound, win, fail);        
-    }
-}
-
-smsAPI = {
-    execute: function(action, args, win, fail) {
-        var actionFound = false;
-		switch(action) {
-			case 'send':				
-				PhoneGap.checkArgs(args, navigator.sms.send);    
-				actionFound = true; 
-				break;		          		
-		}
-
-		PhoneGap.callback(actionFound, win, fail);        
-    }
-}
-
-telephonyAPI = {
-    execute: function(action, args, win, fail) {
-        var actionFound = false;
-		switch(action) {
-			case 'send':				
-				PhoneGap.checkArgs(args, navigator.telephony.send);    
-				actionFound = true; 
-				break;		          		
-		}
-
-		PhoneGap.callback(actionFound, win, fail);        
-    }
-}
-
-windowAPI = {
-    execute: function(action, args, win, fail) {
-   		var actionFound = false;
-   		switch(action) {
-   			case 'newCard':
-   			    PhoneGap.checkArgs(args, navigator.window.newCard);  				    
-   				actionFound = true; 
-   				break;
-   			case 'setFullScreen':
-   			  	PhoneGap.checkArgs(args, navigator.window.setFullScreen);
-   				actionFound = true; 
-   				break;
-   			case 'setWindowProperties':
-   			    PhoneGap.checkArgs(args, navigator.window.setWindowProperties);
-		        actionFound = true;
-		        break;   			
-   			case 'blockScreenTimeout':
-   			    PhoneGap.checkArgs(args, navigator.window.blockScreenTimeout);
-   			    actionFound = true;
-		        break;
-   			case 'setSubtleLightbar':
-   			    PhoneGap.checkArgs(args, navigator.window.setSubtleLightbar);
-   			    actionFound = true;
-   			    break;
-   				   			  	
-   		}
-
-   		PhoneGap.callback(actionFound, win, fail);
-      }    
-}
-
-// this mapping acts as a shim to the webOS APIs
-PhoneGap.plugins = {};
-PhoneGap.plugins['navigator.accelerometer'] = accelerometerAPI;
-PhoneGap.plugins['navigator.application'] = applicationAPI;
-PhoneGap.plugins['navigator.camera'] = cameraAPI;
-PhoneGap.plugins['window.debug'] = debugAPI;
-PhoneGap.plugins['navigator.device'] = deviceAPI;
-PhoneGap.plugins['navigator.geolocation'] = geolocationAPI;
-PhoneGap.plugins['navigator.map'] = mapAPI;
-PhoneGap.plugins['navigator.mouse'] = mouseAPI;
-PhoneGap.plugins['navigator.network'] = networkAPI; 
-PhoneGap.plugins['navigator.notification'] = notificationAPI;
-PhoneGap.plugins['navigator.orientation'] = orientationAPI; 
-PhoneGap.plugins['navigator.sms'] = smsAPI;
-PhoneGap.plugins['navigator.telephony'] = telephonyAPI;  
-PhoneGap.plugins['navigator.window'] = windowAPI;
-
-
-document.addEventListener('DOMContentLoaded', function () {
-    window.phonegap = new PhoneGap();
-    navigator.device.deviceReady();
-});
-/*
- * This class contains acceleration information
- * @constructor
- * @param {Number} x The force applied by the device in the x-axis.
- * @param {Number} y The force applied by the device in the y-axis.
- * @param {Number} z The force applied by the device in the z-axis.
- */
-function Acceleration(x, y, z) {
-	/*
-	 * The force applied by the device in the x-axis.
-	 */
-	this.x = x;
-	/*
-	 * The force applied by the device in the y-axis.
-	 */
-	this.y = y;
-	/*
-	 * The force applied by the device in the z-axis.
-	 */
-	this.z = z;
-	/*
-	 * The time that the acceleration was obtained.
-	 */
-	this.timestamp = new Date().getTime();
-};
-
-/*
- * This class specifies the options for requesting acceleration data.
- * @constructor
- */
-function AccelerationOptions() {
-	/*
-	 * The timeout after which if acceleration data cannot be obtained the errorCallback
-	 * is called.
-	 */
-	this.timeout = 10000;
-};
-
-/*
- * This class provides access to device accelerometer data.
- * @constructor
- */
-function Accelerometer() {
-	/*
-	 * The last known acceleration.
-	 */
-	this.lastAcceleration = null;
-};
-
-/*
- * Tells WebOS to put higher priority on accelerometer resolution. Also relaxes the internal garbage collection events.
- * @param {Boolean} state
- * Dependencies: Mojo.windowProperties
- * Example:
- * 		navigator.accelerometer.setFastAccelerometer(true)
- */
-Accelerometer.prototype.setFastAccelerometer = function(state) {
-	navigator.windowProperties.fastAccelerometer = state;
-	navigator.window.setWindowProperties();
-};
-
-/*
- * Asynchronously aquires the current acceleration.
- * @param {Function} successCallback The function to call when the acceleration
- * data is available
- * @param {Function} errorCallback The function to call when there is an error 
- * getting the acceleration data.
- * @param {AccelerationOptions} options The options for getting the accelerometer data
- * such as timeout.
- */
-
-Accelerometer.prototype.getCurrentAcceleration = function(successCallback, errorCallback, options) {
-
-    var referenceTime = 0;
-    if (this.lastAcceleration)
-        referenceTime = this.lastAcceleration.timestamp;
-    else
-        this.start();
- 
-    var timeout = 20000;
-    var interval = 500;
-    if (typeof(options) == 'object' && options.interval)
-        interval = options.interval;
- 
-    if (typeof(successCallback) != 'function')
-        successCallback = function() {};
-    if (typeof(errorCallback) != 'function')
-        errorCallback = function() {};
- 
-    var dis = this;
-    var delay = 0;
-    var timer = setInterval(function() {
-        delay += interval;
- 
-		//if we have a new acceleration, call success and cancel the timer
-        if (typeof(dis.lastAcceleration) == 'object' && dis.lastAcceleration != null && dis.lastAcceleration.timestamp > referenceTime) {
-            successCallback(dis.lastAcceleration);
-            clearInterval(timer);
-        } else if (delay >= timeout) { //else if timeout has occured then call error and cancel the timer
-            errorCallback();
-            clearInterval(timer);
-        }
-		//else the interval gets called again
-    }, interval);
-};
-
-
-/*
- * Asynchronously aquires the acceleration repeatedly at a given interval.
- * @param {Function} successCallback The function to call each time the acceleration
- * data is available
- * @param {Function} errorCallback The function to call when there is an error 
- * getting the acceleration data.
- * @param {AccelerationOptions} options The options for getting the accelerometer data
- * such as timeout.
- */
-
-Accelerometer.prototype.watchAcceleration = function(successCallback, errorCallback, options) {
-	this.getCurrentAcceleration(successCallback, errorCallback, options);
-	// TODO: add the interval id to a list so we can clear all watches
- 	var frequency = (options != undefined)? options.frequency : 10000;
-	var that = this;
-	return setInterval(function() {
-		that.getCurrentAcceleration(successCallback, errorCallback, options);
-	}, frequency);
-};
-
-/*
- * Clears the specified accelerometer watch.
- * @param {String} watchId The ID of the watch returned from #watchAcceleration.
- */
-Accelerometer.prototype.clearWatch = function(watchId) {
-	clearInterval(watchId);
-};
-
-/*
- * Starts the native acceleration listener.
- */
-
-Accelerometer.prototype.start = function() {
-	var that = this;
-	//Mojo.Event.listen(document, "acceleration", function(event) {
-	document.addEventListener("acceleration", function(event) {
-		var accel = new Acceleration(event.accelX, event.accelY, event.accelZ);
-		that.lastAcceleration = accel;
-	});
-};
-
-if (typeof navigator.accelerometer == "undefined") navigator.accelerometer = new Accelerometer();
-
-function Application() {
-	
-};
-
-/*
- * Tell webOS to activate the current page of your app, bringing it into focus.
- * Example:
- * 		navigator.application.activate();
- */	
-Application.prototype.activate = function() {
-	PalmSystem.activate();
-};
-
-/*
- * Tell webOS to deactivate your app.
- * Example:
- *		navigator.application.deactivate();
- */	
-Application.prototype.deactivate = function() {
-	PalmSystem.deactivate();
-};
-
-/*
- * Returns the identifier of the current running application (e.g. com.yourdomain.yourapp).
- * Example:
- *		navigator.application.getIdentifier();
- */
-Application.prototype.getIdentifier = function() {
-	return PalmSystem.identifier;
-};
-
-if (typeof navigator.application == "undefined") navigator.application = new Application();
-
-/*
- * This class provides access to the device audio
- * @constructor
- */
-
-PhoneGap.overrideAudio = function() {
-	
-	PhoneGap.MojoAudio = Audio;
-	
-	Audio = function(src) {
-		this.src = src;							
-	};
-
-	Audio.prototype.play = function() {
-		// this.src = src;
-		// The 'end' event listener doesn't seem to work, so we have to call stop before playing
-		// otherwise, we'll never be able to play again
-		if (this.paused && !this.stopped) {
-			this.paused = false;
-			this.playing = true;	
-			this.audioPlayer.play();
-		} else {
-			if (this.audioPlayer)
-				this.stop();
-			if (!this.playing) {
-				this.paused = false;
-				this.playing = true;	
-				this.stopped = false;
-				this.audioPlayer = new PhoneGap.MojoAudio();
-				var file = Mojo.appPath + this.src;
-				if (this.audioPlayer.palm) {
-					this.audioPlayer.mojo.audioClass = "media";
-				}
-				this.audioPlayer.src = file;
-		
-				//event doesn't work, see above
-				this.audioPlayer.addEventListener('end', this.endHandler, false);
-				this.audioPlayer.play();
-			}
-		}
-	};
-
-	Audio.prototype.pause = function() {
-		if (this.stopped)
-			return;
-		this.paused = true;	
-		if (this.playing) {
-			this.playing = false;
-			this.stopped = false;
-			this.audioPlayer.pause();
-		} else {
-			this.playing = false;	
-			this.paused = false;
-			this.stopped = true;
-		}
-	};
-
-	Audio.prototype.stop = function() {
-		this.audioPlayer.pause();	
-		this.audioPlayer.src = null;
-		this.playing = false;	
-		this.paused = false;
-		this.stopped = true;
-	};
-
-	// End event handler not working (see comment in Audio.prototype.play)
-	Audio.prototype.endHandler = function () {
-		this.audioPlayer.removeEventListener('end', endHandler, false);
-		this.audioPlayer.pause();	
-		this.audioPlayer.src = null;
-		this.paused = false;
-		this.stopped = true;
-	};
-
-	/*
-	 * This class contains information about any Media errors.
-	 * @constructor
-	 */
-	MediaError = function() {
-		this.code = null,
-		this.message = "";
-	};
-
-	MediaError.MEDIA_ERR_ABORTED 		= 1;
-	MediaError.MEDIA_ERR_NETWORK 		= 2;
-	MediaError.MEDIA_ERR_DECODE 		= 3;
-	MediaError.MEDIA_ERR_NONE_SUPPORTED = 4;
-
-}
-
-document.addEventListener("deviceready", PhoneGap.overrideAudio, false);
-
-/*
- * This class provides access to the device camera.
- * @constructor
- */
-function Camera() {
-	
-};
-
-/*
- * @param {Function} successCallback
- * @param {Function} errorCallback
- * @param {Object} options
- */
-Camera.prototype.getPicture = function(successCallback, errorCallback, options) {
-
-	var filename = "";
-
-	if (typeof options != 'undefined' && typeof options.filename != 'undefined') {
-		filename = options.filename;
-	}	
-
-	this.service = navigator.service.Request('palm://com.palm.applicationManager', {
-		method: 'launch',
-		parameters: {
-		id: 'com.palm.app.camera',
-		params: {
-				appId: 'com.palm.app.camera',
-				name: 'capture',
-				sublaunch: true,
-				filename: filename
-			}
-		},
-		onSuccess: successCallback,
-		onFailure: errorCallback
-	});	
-};
-
-if (typeof navigator.camera == 'undefined') navigator.camera = new Camera();
-
-/*
- * This class provides access to the device contacts.
- * @constructor
- */
-
-function Contacts() {
-	
-};
-
-function Contact() {
-    this.phones = [];
-    this.emails = [];
-	this.name = {
-		givenName: "",
-		familyName: "",
-		formatted: ""
-	};
-	this.id = "";
-};
-
-Contact.prototype.displayName = function()
-{
-    // TODO: can be tuned according to prefs
-	return this.givenName + " " + this.familyName;
-};
-
-function ContactsFilter(name) {
-	if (name)
-		this.name = name;
-	else
-		this.name = "";
-};
-
-/*
- * @param {ContactsFilter} filter Object with filter properties. filter.name only for now.
- * @param {function} successCallback Callback function on success
- * @param {function} errorCallback Callback function on failure
- * @param {object} options Object with properties .page and .limit for paging
- */
-
-Contacts.prototype.find = function(filter, successCallback, errorCallback, options) {
-	errorCallback({ name: "ContactsError", message: "PhoneGap Palm contacts not implemented" });
-};
-
-Contacts.prototype.success_callback = function(contacts_iterator) {
-};
-
-if (typeof navigator.contacts == "undefined") navigator.contacts = new Contacts();
-/*
- * This class provides access to the debugging console.
- * @constructor
- */
-function DebugConsole() {
-};
-
-/*
- * Print a normal log message to the console
- * @param {Object|String} message Message or object to print to the console
- */
-DebugConsole.prototype.log = function(message) {
-	if (typeof message == 'object')
-		message = Object.toJSON(message);   
-		
-	this.error(message);
-};
-
-/*
- * Print a warning message to the console
- * @param {Object|String} message Message or object to print to the console
- */
-DebugConsole.prototype.warn = function(message) {
-	if (typeof message == 'object')
-		message = Object.toJSON(message);    
-		
-	this.error(message);
-};
-
-/**
- * Print an error message to the console
- * @param {Object|String} message Message or object to print to the console
- */
-DebugConsole.prototype.error = function(message) {
-	if (typeof message == 'object')
-		message = Object.toJSON(message);
- 
-	console.log(JSON.stringify(message));
-};
-
-if (typeof window.debug == "undefined") window.debug = new DebugConsole();
-/*
- * this represents the mobile device, and provides properties for inspecting the model, version, UUID of the
- * phone, etc.
- * @constructor
- */
-function Device() {
-    this.platform = "palm";
-    this.version  = null;
-    this.name     = null;
-    this.uuid     = null;
-    this.deviceInfo = null;
-};
-
-/*
- * A direct call to return device information.
- * Example:
- *		var deviceinfo = JSON.stringify(navigator.device.getDeviceInfo()).replace(/,/g, ', ');
- */
-Device.prototype.getDeviceInfo = function() {
-	return this.deviceInfo;//JSON.parse(PalmSystem.deviceInfo);
-};
-
-/*
- * needs to be invoked in a <script> nested within the <body> it tells WebOS that the app is ready
-        TODO: see if we can get this added as in a document.write so that the user doesn't have to explicitly call this method
- * Dependencies: Mojo.onKeyUp
- * Example:
- *		navigator.device.deviceReady();
- */	
-Device.prototype.deviceReady = function() {
-
-	// tell webOS this app is ready to show
-	if (window.PalmSystem) {
-		// setup keystroke events for forward and back gestures
-		document.body.addEventListener("keyup", Mojo.onKeyUp, true);
-
-		setTimeout(function() { PalmSystem.stageReady(); PalmSystem.activate(); }, 1);
-		alert = this.showBanner;
-	}
-
-    // fire deviceready event; taken straight from phonegap-iphone
-    // put on a different stack so it always fires after DOMContentLoaded
-    window.setTimeout(function () {
-        var e = document.createEvent('Events');
-        e.initEvent('deviceready');
-        document.dispatchEvent(e);
-    }, 10);
-	
-	this.setUUID();
-	this.setDeviceInfo();
-};
-
-Device.prototype.setDeviceInfo = function() {
-    var parsedData = JSON.parse(PalmSystem.deviceInfo);
-    
-    this.deviceInfo = parsedData;
-    this.version = parsedData.platformVersion;
-    this.name = parsedData.modelName;
-};
-
-Device.prototype.setUUID = function() {
-	//this is the only system property webos provides (may change?)
-	var that = this;
-	this.service = navigator.service.Request('palm://com.palm.preferences/systemProperties', {
-	    method:"Get",
-	    parameters:{"key": "com.palm.properties.nduid" },
-	    onSuccess: function(result) {
-			that.uuid = result["com.palm.properties.nduid"];
-		}
-    });	
-
-
-};
-
-
-if (typeof window.device == 'undefined') window.device = navigator.device = new Device();
-
-/*
- * This class provides generic read and write access to the mobile device file system.
- */
-function File() {
-	/**
-	 * The data of a file.
-	 */
-	this.data = "";
-	/**
-	 * The name of the file.
-	 */
-	this.name = "";
-};
-
-/*
- * Reads a file from the mobile device. This function is asyncronous.
- * @param {String} fileName The name (including the path) to the file on the mobile device. 
- * The file name will likely be device dependant.
- * @param {Function} successCallback The function to call when the file is successfully read.
- * @param {Function} errorCallback The function to call when there is an error reading the file from the device.
- */
-File.prototype.read = function(fileName, successCallback, errorCallback) {
-	//Mojo has no file i/o yet, so we use an xhr. very limited
-	var path = fileName;	//incomplete
-	//Mojo.Log.error(path);
-	navigator.debug.error(path);
-	
-	if (typeof successCallback != 'function')
-		successCallback = function () {};
-	if (typeof errorCallback != 'function')
-		errorCallback = function () {};
-	
-	var xhr = new XMLHttpRequest();
-	xhr.onreadystatechange = function() {
-		if (xhr.readyState == 4) {
-			if (xhr.status == 200 && xhr.responseText != null) {
-				this.data = xhr.responseText;
-				this.name = path;
-				successCallback(this.data);
-			} else {
-				errorCallback({ name: xhr.status, message: "could not read file: " + path });
-			}
-		}
-	};
-	xhr.open("GET", path, true);
-	xhr.send();
-};
-
-/*
- * Writes a file to the mobile device. 
- * @param {File} file The file to write to the device.
- */
-File.prototype.write = function(file) {
-	//Palm does not provide file i/o
-};
-
-if (typeof navigator.file == "undefined") navigator.file = new File();
-
-/*
- * This class provides access to device GPS data.
- * @constructor
- */
-function Geolocation() {
-    /**
-     * The last known GPS position.
-     */
-    this.lastPosition = null;
-    this.lastError = null;
-    this.callbacks = {
-        onLocationChanged: [],
-        onError: []
-    };
-};
-
-/*
- * Asynchronously aquires the current position.
- * @param {Function} successCallback The function to call when the position
- * data is available
- * @param {Function} errorCallback The function to call when there is an error 
- * getting the position data.
- * @param {PositionOptions} options The options for getting the position data
- * such as timeout.
- */
-Geolocation.prototype.getCurrentPosition = function(successCallback, errorCallback, options) {
-    /*
-	var referenceTime = 0;
-    if (this.lastPosition)
-        referenceTime = this.lastPosition.timestamp;
-    else
-        this.start(options);
-	*/
-
-    var timeout = 20000;
-    if (typeof(options) == 'object' && options.timeout)
-    timeout = options.timeout;
-
-    if (typeof(successCallback) != 'function')
-    successCallback = function() {};
-    if (typeof(errorCallback) != 'function')
-    errorCallback = function() {};
-
-    /*
-    var dis = this;
-    var delay = 0;
-    var timer = setInterval(function() {
-        delay += interval;
-		
-		//if we have a new position, call success and cancel the timer
-        if (dis.lastPosition && typeof(dis.lastPosition) == 'object' && dis.lastPosition.timestamp > referenceTime) {
-            successCallback(dis.lastPosition);
-            clearInterval(timer);
-        } else if (delay >= timeout) { //else if timeout has occured then call error and cancel the timer
-            errorCallback();
-            clearInterval(timer);
-        }
-		//else the interval gets called again
-    }, interval);
-	*/
-
-    var responseTime;
-    if (timeout <= 5000)
-    responseTime = 1;
-    else if (5000 < timeout <= 20000)
-    responseTime = 2;
-    else
-    responseTime = 3;
-
-    var timer = setTimeout(function() {
-        errorCallback({
-            message: "timeout"
-        });
-    },
-    timeout);
-
-    var startTime = (new Date()).getTime();
-
-    var alias = this;
-
-    // It may be that getCurrentPosition is less reliable than startTracking ... but
-    // not sure if we want to be starting and stopping the tracker if we're not watching.
-    //new Mojo.Service.Request('palm://com.palm.location', {
-    navigator.service.Request('palm://com.palm.location', {
-        method: "getCurrentPosition",
-        parameters: {
-            responseTime: responseTime
-        },
-        onSuccess: function(event) {
-            alias.lastPosition = {
-                coords: {
-                    latitude: event.latitude,
-                    longitude: event.longitude,
-                    altitude: (event.altitude >= 0 ? event.altitude: null),
-                    speed: (event.velocity >= 0 ? event.velocity: null),
-                    heading: (event.heading >= 0 ? event.heading: null),
-                    accuracy: (event.horizAccuracy >= 0 ? event.horizAccuracy: null),
-                    altitudeAccuracy: (event.vertAccuracy >= 0 ? event.vertAccuracy: null)
-                },
-                timestamp: new Date().getTime()
-            };
-
-            var responseTime = alias.lastPosition.timestamp - startTime;
-            if (responseTime <= timeout)
-            {
-                clearTimeout(timer);
-                successCallback(alias.lastPosition);
-            }
-        },
-        onFailure: function() {
-            errorCallback();
-        }
-    });
-
-};
-
-/*
- * Asynchronously aquires the position repeatedly at a given interval.
- * @param {Function} successCallback The function to call each time the position
- * data is available
- * @param {Function} errorCallback The function to call when there is an error 
- * getting the position data.
- * @param {PositionOptions} options The options for getting the position data
- * such as timeout and the frequency of the watch.
- */
-Geolocation.prototype.watchPosition = function(successCallback, errorCallback, options) {
-    // Invoke the appropriate callback with a new Position object every time the implementation
-    // determines that the position of the hosting device has changed.
-    var frequency = 10000;
-    if (typeof(options) == 'object' && options.frequency)
-    frequency = options.frequency;
-
-    this.start(options, errorCallback);
-
-    var referenceTime = 0;
-    if (this.lastPosition)
-    referenceTime = this.lastPosition.timestamp;
-
-    var alias = this;
-    return setInterval(function() {
-        // check if we have a new position, if so call our successcallback
-        if (!alias.lastPosition)
-        return;
-
-        if (alias.lastPosition.timestamp > referenceTime)
-        successCallback(alias.lastPosition);
-    },
-    frequency);
-};
-
-
-/*
- * Clears the specified position watch.
- * @param {String} watchId The ID of the watch returned from #watchPosition.
- */
-Geolocation.prototype.clearWatch = function(watchId) {
-    clearInterval(watchId);
-    this.stop();
-};
-
-Geolocation.prototype.start = function(options, errorCallback) {
-    //options.timeout;
-    //options.interval;
-    if (typeof(errorCallback) != 'function')
-    errorCallback = function() {};
-
-    var that = this;
-    var frequency = 10000;
-    if (typeof(options) == 'object' && options.frequency)
-    frequency = options.frequency;
-
-    var responseTime;
-    if (frequency <= 5000)
-    responseTime = 1;
-    else if (5000 < frequency <= 20000)
-    responseTime = 2;
-    else
-    responseTime = 3;
-
-    //location tracking does not support setting a custom interval :P
-    this.trackingHandle = navigator.service.Request('palm://com.palm.location', {
-        method: 'startTracking',
-        parameters: {
-            subscribe: true
-        },
-        onSuccess: function(event) {
-            that.lastPosition = {
-                coords: {
-                    latitude: event.latitude,
-                    longitude: event.longitude,
-                    altitude: (event.altitude >= 0 ? event.altitude: null),
-                    speed: (event.velocity >= 0 ? event.velocity: null),
-                    heading: (event.heading >= 0 ? event.heading: null),
-                    accuracy: (event.horizAccuracy >= 0 ? event.horizAccuracy: null),
-                    altitudeAccuracy: (event.vertAccuracy >= 0 ? event.vertAccuracy: null)
-                },
-                timestamp: new Date().getTime()
-            };
-        },
-        onFailure: function() {
-            errorCallback();
-        }
-    });
-};
-
-Geolocation.prototype.stop = function() {
-    this.trackingHandle.cancel();
-};
-
-if (typeof navigator.geolocation == "undefined") navigator.geolocation = new Geolocation();
-
-/*
- * This class provides access to native mapping applications on the device.
- */
-function Map() {
-	
-};
-
-/*
- * Shows a native map on the device with pins at the given positions.
- * @param {Array} positions
- */
-Map.prototype.show = function(positions) {
-
-	var jsonPos = {};
-	var pos = null;
-	if (typeof positions == 'object') {
-		// If positions is an array, then get the first only, since google's query
-		// can't take more than one marker (believe it or not).
-		// Otherwise we assume its a single position object.
-		if (positions.length) {
-			pos = positions[0];
-		} else {
-			pos = positions;
-		}
-	} 
-	else if (navigator.geolocation.lastPosition) {
-		pos = navigator.geolocation.lastPosition;
-	} else {
-		// If we don't have a position, lets use nitobi!
-		pos = { coords: { latitude: 49.28305, longitude: -123.10689 } };
-	}
-
-	this.service = navigator.service.Request('palm://com.palm.applicationManager', {
-		method: 'open',
-		parameters: {
-		id: 'com.palm.app.maps',
-		params: {
-			query: "@" + pos.coords.latitude + "," + pos.coords.longitude
-			}
-		}
-	});
-
-};
-
-if (typeof navigator.map == "undefined") navigator.map = new Map();
-
-//===========================
-//		Mojo Dependencies - we still need to rely on these minimal parts of the Mojo framework - should try to find if we can get access to lower level APIs
-//							so that we can remove dependence of Mojo
-//===========================
-	
-Mojo = {
-	contentIndicator: false,
-
-	// called by webOS in certain cases
-	relaunch: function() {
-		var launch = JSON.parse(PalmSystem.launchParams);
-		
-		if (launch['palm-command'] && launch['palm-command'] == 'open-app-menu')
-			this.fireEvent(window, "appmenuopen");
-		else
-			this.fireEvent(window, "palmsystem", launch);
-	},
-	
-	// called by webOS when your app gets focus
-	stageActivated: function() {
-		this.fireEvent(window, "activate");
-	},
-
-	// called by webOS when your app loses focus
-	stageDeactivated: function() {
-		this.fireEvent(window, "deactivate");
-	},
-
-	// this is a stub -- called by webOS when orientation changes
-	// but the preferred method is to use the orientationchanged
-	// DOM event
-	screenOrientationChanged: function(dir) {
-	},
-	
-	// used to redirect keyboard events to DOM event "back"
-	onKeyUp: function(e) {
-		if (e.keyCode == 27)
-			this.fireEvent(window, "back");
-	},
-		
-	// private method, used to fire off DOM events
-	fireEvent: function(element, event, data) {
-		var e = document.createEvent("Event");
-		e.initEvent(event, false, true);
-		
-		if (data)
-			e.data = data;
-		
-		element.dispatchEvent(e);
-	},
-	
-	/*
-	 	not sure if these stubs are still needed since the Log object is encapsulated in debugconsole class 
-		and the Service object is encapsulated in the Service class
-	*/
-	// stubs to make v8 happier
-	Service: {},
-	Log: {}
-	
-};function Mouse() {
-	
-};
-
-/*
- * Possibly useful for automated testing, this call to PalmSystem triggers a mouse click (i.e. touch event). 
- * x coordinate & y coordinate of where the screen was touched and also a true/false flag to tell WebOS if it should simulate the mouse click
- * @param {Number} x
- * @param {Number} y
- * @param {Boolean} state
- * Example:
- *		navigator.mouse.simulateMouseClick(10, 10, true);
- */	
-Mouse.prototype.simulateMouseClick = function(x, y, state) {
-	PalmSystem.simulateMouseClick(x, y, state || true);
-};
-
-if (typeof navigator.mouse == "undefined") navigator.mouse = new Mouse();
-
-function Network() {
-    /*
-     * The last known Network status.
-     */
-	this.lastReachability = null;
-};
-
-Network.prototype.isReachable = function(hostName, successCallback, options) {
-	this.request = navigator.service.Request('palm://com.palm.connectionmanager', {
-	    method: 'getstatus',
-	    parameters: {},
-	    onSuccess: function(result) { 
-			var status = NetworkStatus.NOT_REACHABLE;
-			if (result.isInternetConnectionAvailable == true)
-			{
-				// don't know whether its via wifi or carrier ... so return the worst case
-				status = NetworkStatus.REACHABLE_VIA_CARRIER_DATA_NETWORK;
-			}
-			successCallback(status); 
-		},
-	    onFailure: function() {}
-	});
-
-};
-
-/*
- * This class contains information about any NetworkStatus.
- * @constructor
- */
-function NetworkStatus() {
-	this.code = null;
-	this.message = "";
-};
-
-NetworkStatus.NOT_REACHABLE = 0;
-NetworkStatus.REACHABLE_VIA_CARRIER_DATA_NETWORK = 1;
-NetworkStatus.REACHABLE_VIA_WIFI_NETWORK = 2;
-
-if (typeof navigator.network == "undefined") navigator.network = new Network();
-
-/*
- * This class provides access to notifications on the device.
- */
-function Notification() {
-
-    };
-
-/*
- * adds a dashboard to the WebOS app
- * @param {String} url
- * @param {String} html
- * Example:
- *		navigator.notification.newDashboard("dashboard.html");
- */
-Notification.prototype.newDashboard = function(url, html) {
-    var win = window.open(url, "_blank", "attributes={\"window\":\"dashboard\"}");
-    html && win.document.write(html);
-    win.PalmSystem.stageReady();
-};
-
-/*
- * Displays a banner notification. If specified, will send your 'response' object as data via the 'palmsystem' DOM event.
- * If no 'icon' filename is specified, will use a small version of your application icon.
- * @param {String} message
- * @param {Object} response
- * @param {String} icon 
- * @param {String} soundClass class of the sound; supported classes are: "ringtones", "alerts", "alarm", "calendar", "notification"
- * @param {String} soundFile partial or full path to the sound file
- * @param {String} soundDurationMs of sound in ms
- * Example:
- *		navigator.notification.showBanner('test message');
- */
-Notification.prototype.showBanner = function(message, response, icon, soundClass, soundFile, soundDurationMs) {
-    var response = response || {
-        banner: true
-    };
-    PalmSystem.addBannerMessage(message, JSON.stringify(response), icon, soundClass, soundFile, soundDurationMs);
-};
-
-/**
- * Remove a banner from the banner area. The category parameter defaults to 'banner'. Will not remove
- * messages that are already displayed.
- * @param {String} category 
-		Value defined by the application and usually same one used in {@link showBanner}. 
-		It is used if you have more than one kind of banner message. 
- */
-Notification.prototype.removeBannerMessage = function(category) {
-    var bannerKey = category || 'banner';
-    var bannerId = this.banners.get(bannerKey);
-    if (bannerId) {
-        try {
-            PalmSystem.removeBannerMessage(bannerId);
-        } catch(removeBannerException) {
-            window.debug.error(removeBannerException.toString());
-        }
-    }
-};
-
-/*
- * Remove all pending banner messages from the banner area. Will not remove messages that are already displayed.
- */
-Notification.prototype.clearBannerMessage = function() {
-    PalmSystem.clearBannerMessage();
-};
-
-/*
- * This function vibrates the device
- * @param {number} duration The duration in ms to vibrate for.
- * @param {number} intensity The intensity of the vibration
- */
-Notification.prototype.vibrate = function(duration, intensity) {
-    //the intensity for palm is inverted; 0=high intensity, 100=low intensity
-    //this is opposite from our api, so we invert
-    if (isNaN(intensity) || intensity > 100 || intensity <= 0)
-    intensity = 0;
-    else
-    intensity = 100 - intensity;
-
-    // if the app id does not have the namespace "com.palm.", an error will be thrown here
-    //this.vibhandle = new Mojo.Service.Request("palm://com.palm.vibrate", {
-    this.vibhandle = navigator.service.Request("palm://com.palm.vibrate", {
-        method: 'vibrate',
-        parameters: {
-            'period': intensity,
-            'duration': duration
-        }
-    },
-    false);
-};
-
-/* 
- * Plays the specified sound
- * @param {String} soundClass class of the sound; supported classes are: "ringtones", "alerts", "alarm", "calendar", "notification"
- * @param {String} soundFile partial or full path to the sound file
- * @param {String} soundDurationMs of sound in ms
- */
-Notification.prototype.beep = function(soundClass, soundFile, soundDurationMs) {
-    PalmSystem.playSoundNotification(soundClass, soundFile, soundDurationMs);
-};
-
-/*
- * displays a notification
- * @param {String} message
- * @param {Object} response
- * @param {String} icon
- */
-Notification.prototype.alert = function(message, response, icon) {
-    var response = response || {
-        banner: true
-    };
-    navigator.notification.showBanner(message, response, icon);
-};
-
-if (typeof navigator.notification == 'undefined') {
-    navigator.notification = new Notification();
-    alert = navigator.notification.alert;
-}
-
-/*
- * This class provides access to the device orientation.
- * @constructor
- */
-function Orientation() {
-	this.started = false;
-};
-
-/*
- * Manually sets the orientation of the application window. 
- * 'up', 'down', 'left' or 'right' used to specify fixed window orientation
- * 'free' WebOS will change the window orientation to match the device orientation
- * @param {String} orientation
- * Example:
- *		navigator.orientation.setOrientation('up');
- */
-Orientation.prototype.setOrientation = function(orientation) {
-	PalmSystem.setWindowOrientation(orientation);   
-};
-
-/*
- * Returns the current window orientation
- */
-Orientation.prototype.getCurrentOrientation = function() {
-  	return PalmSystem.windowOrientation;
-};
-
-/*
- * Starts the native orientationchange event listener.
- */  
-Orientation.prototype.start = function (successCallback) {
-	var that = this;
-	// This subscribes the callback once for the successCallback function
-	that.callback = function (e) {
-		document.removeEventListener("orientationChanged", that.callback);
-		successCallback(e.orientation);
-	}
-	
-	document.addEventListener("orientationChanged", that.callback);
-	
-	// This subscribes setOrientation to be constantly updating the currentOrientation property
-	document.addEventListener("orientationchange", function(event) {
-		var orient = null;
-		switch (event.position) {
-			case 0: orient = DisplayOrientation.FACE_UP; break;
-			case 1: orient = DisplayOrientation.FACE_DOWN; break;
-			case 2: orient = DisplayOrientation.PORTRAIT; break;
-			case 3: orient = DisplayOrientation.REVERSE_PORTRAIT; break;
-			case 4: orient = DisplayOrientation.LANDSCAPE_RIGHT_UP; break;
-			case 5: orient = DisplayOrientation.LANDSCAPE_LEFT_UP; break;
-			default: return; 	//orientationchange event seems to get thrown sometimes with a null event position
-		}
-		that.setOrientation(orient);
-	});
-	this.started = true;
-};
-
-/*
- * Asynchronously aquires the orientation repeatedly at a given interval.
- * @param {Function} successCallback The function to call each time the orientation
- * data is available.
- * @param {Function} errorCallback The function to call when there is an error 
- * getting the orientation data.
- */             
-Orientation.prototype.watchOrientation = function(successCallback, errorCallback, options) {
-	// Invoke the appropriate callback with a new Position object every time the implementation 
-	// determines that the position of the hosting device has changed. 
-	this.getCurrentOrientation(successCallback, errorCallback);
-	var interval = 1000;
-	if (options && !isNaN(options.interval))
-		interval = options.interval;
-	var that = this;
-	return setInterval(function() {
-		that.getCurrentOrientation(successCallback, errorCallback);
-	}, interval);
-};
-       
-/*
- * Clears the specified orientation watch.
- * @param {String} watchId The ID of the watch returned from #watchOrientation.
- */     
-Orientation.prototype.clearWatch = function(watchId) {
-	clearInterval(watchId);
-};
-  
-/*
- * This class encapsulates the possible orientation values.
- * @constructor
- */  
-function DisplayOrientation() {
-	this.code = null;
-	this.message = "";
-};
-
-DisplayOrientation.PORTRAIT = 0;
-DisplayOrientation.REVERSE_PORTRAIT = 1;
-DisplayOrientation.LANDSCAPE_LEFT_UP = 2;
-DisplayOrientation.LANDSCAPE_RIGHT_UP = 3;
-DisplayOrientation.FACE_UP = 4;
-DisplayOrientation.FACE_DOWN = 5;
-
-if (typeof navigator.orientation == "undefined") navigator.orientation = new Orientation();
-
-function Position(coords) {
-	this.coords = coords;
-    this.timestamp = new Date().getTime();
-};
-
-function Coordinates(lat, lng, alt, acc, head, vel, altacc) {
-	/*
-	 * The latitude of the position.
-	 */
-	this.latitude = lat;
-	/*
-	 * The longitude of the position,
-	 */
-	this.longitude = lng;
-	/*
-	 * The accuracy of the position.
-	 */
-	this.accuracy = acc;
-	/*
-	 * The altitude of the position.
-	 */
-	this.altitude = alt;
-	/*
-	 * The direction the device is moving at the position.
-	 */
-	this.heading = head;
-	/*
-	 * The velocity with which the device is moving at the position.
-	 */
-	this.speed = vel;
-	/*
-	 * The altitude accuracy of the position.
-	 */
-	this.altitudeAccuracy = (typeof(altacc) != 'undefined') ? altacc : null;
-};
-
-/*
- * This class specifies the options for requesting position data.
- * @constructor
- */
-function PositionOptions() {
-	/*
-	 * Specifies the desired position accuracy.
-	 */
-	this.enableHighAccuracy = true;
-	/*
-	 * The timeout after which if position data cannot be obtained the errorCallback
-	 * is called.
-	 */
-	this.timeout = 10000;
-};
-
-/*
- * This class contains information about any GSP errors.
- * @constructor
- */
-function PositionError() {
-	this.code = null;
-	this.message = "";
-};
-
-PositionError.UNKNOWN_ERROR = 0;
-PositionError.PERMISSION_DENIED = 1;
-PositionError.POSITION_UNAVAILABLE = 2;
-PositionError.TIMEOUT = 3;
-
-function Service() {
-	
-};
-
-Service.prototype.Request = function (uri, params) {
-	var req = new PalmServiceBridge();
-	var url = uri + "/" + (params.method || "");
-	req.url = url;
-
-	this.req = req;
-	this.url = url;
-	this.params = params || {};
-	
-	this.call(params);
-	
-	return this;
-};
-
-Service.prototype.call = function(params) {
-	var onsuccess = null;
-	var onfailure = null;
-	var oncomplete = null;
-
-	if (typeof params.onSuccess === 'function')
-		onsuccess = params.onSuccess;
-
-	if (typeof params.onFailure === 'function')
-		onerror = params.onFailure;
-
-	if (typeof params.onComplete === 'function')
-		oncomplete = params.onComplete;
-
-	this.req.onservicecallback = callback;
-
-	function callback(msg) {
-		var response = JSON.parse(msg);
-
-		if ((response.errorCode) && onfailure)
-			onfailure(response);
-		else if (onsuccess)
-			onsuccess(response);
-		
-		if (oncomplete)
-			oncomplete(response);
-	}
-
-	this.data = (typeof params.parameters === 'object') ? JSON.stringify(params.parameters) : '{}';
-
-	this.req.call(this.url, this.data);
-}
-
-if (typeof navigator.service == "undefined") navigator.service = new Service();
-
-/*
- * This class provides access to the device SMS functionality.
- * @constructor
- */
-function Sms() {
-
-    };
-
-/*
- * Sends an SMS message.
- * @param {Integer} number The phone number to send the message to.
- * @param {String} message The contents of the SMS message to send.
- * @param {Function} successCallback The function to call when the SMS message is sent.
- * @param {Function} errorCallback The function to call when there is an error sending the SMS message.
- * @param {PositionOptions} options The options for accessing the GPS location such as timeout and accuracy.
- */
-Sms.prototype.send = function(number, message, successCallback, errorCallback, options) {
-    try {
-        this.service = navigator.service.Request('palm://com.palm.applicationManager', {
-            method: 'launch',
-            parameters: {
-                id: "com.palm.app.messaging",
-                params: {
-                    composeAddress: number,
-                    messageText: message
-                }
-            }
-        });
-        successCallback();
-    } catch(ex) {
-        errorCallback({
-            name: "SMSerror",
-            message: ex.name + ": " + ex.message
-        });
-    }
-};
-
-if (typeof navigator.sms == "undefined") navigator.sms = new Sms();
-
-/*
- * This class provides access to the telephony features of the device.
- * @constructor
- */
-function Telephony() {
-    this.number = "";
-};
-
-/*
- * Calls the specifed number.
- * @param {Integer} number The number to be called.
- */
-Telephony.prototype.send = function(number) {
-    this.number = number;
-    this.service = navigator.service.Request('palm://com.palm.applicationManager', {
-        method: 'open',
-        parameters: {
-            target: "tel://" + number
-        }
-    });
-};
-
-if (typeof navigator.telephony == "undefined") navigator.telephony = new Telephony();
-
-function Window() {
-
-    };
-
-/*
- * This is a thin wrapper for 'window.open()' which optionally sets document contents to 'html', and calls 'PalmSystem.stageReady()'
- * on your new card. Note that this new card will not come with your framework (if any) or anything for that matter.
- * @param {String} url
- * @param {String} html
- * Example:
- *		navigator.window.newCard('about:blank', '<html><body>Hello again!</body></html>');
- */
-Window.prototype.newCard = function(url, html) {
-    var win = window.open(url || "");
-    if (html)
-        win.document.write(html);
-    win.PalmSystem.stageReady();
-};
-
-/*
- * Enable or disable full screen display (full screen removes the app menu bar and the rounded corners of the screen).
- * @param {Boolean} state
- * Example:
- *		navigator.window.setFullScreen(true);
- */
-Window.prototype.setFullScreen = function(state) {
-    // valid state values are: true or false
-    PalmSystem.enableFullScreenMode(state);
-};
-
-/*
- * used to set the window properties of the WebOS app
- * @param {Object} props
- * Example:
- * 		private method used by other member functions - ideally we shouldn't call this method
- */
-Window.prototype.setWindowProperties = function(props) {
-    if (typeof props === 'object')
-        navigator.windowProperties = props;
-
-    PalmSystem.setWindowProperties(props || this.windowProperties);
-};
-
-/*
- * Enable or disable screen timeout. When enabled, the device screen will not dim. This is useful for navigation, clocks or other "dock" apps.
- * @param {Boolean} state
- * Example:
- *		navigator.window.blockScreenTimeout(true);
- */
-Window.prototype.blockScreenTimeout = function(state) {
-    navigator.windowProperties.blockScreenTimeout = state;
-    this.setWindowProperties();
-};
-
-/*
- * Sets the lightbar to be a little dimmer for screen locked notifications.
- * @param {Boolean} state
- * Example:
- *		navigator.window.setSubtleLightbar(true);
- */
-Window.prototype.setSubtleLightbar = function(state) {
-    navigator.windowProperties.setSubtleLightbar = state;
-    this.setWindowProperties();
-};
-
-if (typeof navigator.window == 'undefined') navigator.window = new Window();
-
-/*
- * Object for storing WebOS window properties
- */
-function WindowProperties() {
-    blockScreenTimeout = false;
-    setSubtleLightbar = false;
-    fastAccelerometer = false;
-};
-
-if (typeof navigator.windowProperties == 'undefined') navigator.windowProperties = new WindowProperties();(function(window) {
-
-    /**
-     * Do not use thumbs.js on touch-enabled devices
-     * 
-     * Thanks to Jesse MacFadyen (purplecabbage):
-     * https://gist.github.com/850593#gistcomment-22484
-     */
-    try {
-        document.createEvent('TouchEvent');
-        return;
-    }
-    catch(e) {
-    }
-
-    /**
-     * Map touch events to mouse events
-     */
-    var eventMap = {
-        'mousedown': 'touchstart',
-        'mouseup':   'touchend',
-        'mousemove': 'touchmove'
-    };
-
-    /**
-     * Fire touch events
-     *
-     * Monitor mouse events and fire a touch event on the
-     * object broadcasting the mouse event. This approach
-     * likely has poorer performance than hijacking addEventListener
-     * but it is a little more browser friendly.
-     */
-    window.addEventListener('load', function() {
-        for (var key in eventMap) {
-            document.body.addEventListener(key, function(e) {
-                // Supports:
-                //   - addEventListener
-                //   - setAttribute
-                var event = createTouchEvent(eventMap[e.type], e);
-                e.target.dispatchEvent(event);
-
-                // Supports:
-                //   - element.ontouchstart
-                var fn = e.target['on' + eventMap[e.type]];
-                if (typeof fn === 'function') fn(e);
-            }, false);
-        }
-    }, false);
-
-    /**
-     * Utility function to create a touch event.
-     *
-     * @param  name  {String} of the event
-     * @return event {Object}
-     */
-    var createTouchEvent = function(name, e) {
-        var event = document.createEvent('MouseEvents');
-
-        event.initMouseEvent(
-            name,
-            e.bubbles,
-            e.cancelable,
-            e.view,
-            e.detail,
-            e.screenX,
-            e.screenY,
-            e.clientX,
-            e.clientY,
-            e.ctrlKey,
-            e.altKey,
-            e.shiftKey,
-            e.metaKey,
-            e.button,
-            e.relatedTarget
-        );
-
-        return event;
-    };
-
-})(window);


Mime
View raw message