phonegap-webos issue # 7
diff --git a/Makefile b/Makefile
index 3600040..92162ba 100755
--- a/Makefile
+++ b/Makefile
@@ -18,6 +18,7 @@
 ECHO = echo
 ECHO_N = echo -n
 JAVA = java
+PGVERSION = 1.0.0
 
 NAME = `$(CAT) framework/appinfo.json | $(GREP) '"id"' | $(CUT) -d \" -f 4`
 VERSION = `$(CAT) framework/appinfo.json | $(GREP) '"version"' | $(CUT) -d \" -f 4`
@@ -41,7 +42,7 @@
 	palm-launch $(NAME)
 	
 copy_js:
-	cp lib/phonegap.js framework/phonegap.js
+	cp lib/phonegap.js framework/phonegap-$(PGVERSION).js
 	
 js: lib/phonegap.js
 
diff --git a/framework/index.html b/framework/index.html
index fd3d1fb..d5c45c3 100644
--- a/framework/index.html
+++ b/framework/index.html
@@ -16,7 +16,7 @@
 	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 	<title>PhoneGap WebOS</title>
 	
-	<script type="text/javascript" src="phonegap.js"></script>   
+	<script type="text/javascript" src="phonegap-1.0.0.js"></script>   
 	<script type="text/javascript">
 		// create global var for sqlite database instance
 		var db;
diff --git a/framework/phonegap.js b/framework/phonegap-1.0.0.js
similarity index 82%
rename from framework/phonegap.js
rename to framework/phonegap-1.0.0.js
index ee7bba1..1571443 100644
--- a/framework/phonegap.js
+++ b/framework/phonegap-1.0.0.js
@@ -15,46 +15,340 @@
 
 }
 
+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
-notifications = {
- execute: function(action, args, win, fail) {
+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':
-				navigator.notification.alert(args);
+			case 'alert':				
+				PhoneGap.checkArgs(args, navigator.notification.alert);    
 				actionFound = true; 
 				break;
 			case 'showBanner':
-				navigator.notification.showBanner(args);
+				PhoneGap.checkArgs(args, navigator.notification.showBanner);
 				actionFound = true;
-				break;
+				break;	
 			case 'newDashboard':
-			    navigator.notification.newDashboard();
+			    PhoneGap.checkArgs(args, navigator.notification.newDashboard);
+			    actionFound = true;
 			    break;
 			case 'removeBannerMessage':
-			    navigator.notification.removeBannerMessage();
+			    PhoneGap.checkArgs(args, navigator.notification.removeBannerMessage);
+			    actionFound = true;
 			    break;
 			case 'clearBannerMessage':
-			    navigator.notification.clearBannerMessage();
+			    PhoneGap.checkArgs(args, navigator.notification.clearBannerMessage);
+			    actionFound = true;
 			    break;
 			case 'vibrate':            
-			    navigator.notification.vibrate();
+			    PhoneGap.checkArgs(args, navigator.notification.vibrate);
+			    actionFound = true;
 			    break;
 			case 'beep':               
-			    navigator.notification.beep();
-			    break;   		
+			    PhoneGap.checkArgs(args, navigator.notification.beep);
+			    actionFound = true;
+			    break;       		
 		}
 
-		if (actionFound)
-			win(args);
-		else
-			fail('action not found');
+		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.notification'] = notifications;
+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();
diff --git a/js/phonegap-core.js b/js/phonegap-core.js
index 70e9c85..6d122d0 100644
--- a/js/phonegap-core.js
+++ b/js/phonegap-core.js
@@ -15,46 +15,340 @@
 
 }
 
+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
-notifications = {
- execute: function(action, args, win, fail) {
+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':
-				navigator.notification.alert(args);
+			case 'alert':				
+				PhoneGap.checkArgs(args, navigator.notification.alert);    
 				actionFound = true; 
 				break;
 			case 'showBanner':
-				navigator.notification.showBanner(args);
+				PhoneGap.checkArgs(args, navigator.notification.showBanner);
 				actionFound = true;
-				break;
+				break;	
 			case 'newDashboard':
-			    navigator.notification.newDashboard();
+			    PhoneGap.checkArgs(args, navigator.notification.newDashboard);
+			    actionFound = true;
 			    break;
 			case 'removeBannerMessage':
-			    navigator.notification.removeBannerMessage();
+			    PhoneGap.checkArgs(args, navigator.notification.removeBannerMessage);
+			    actionFound = true;
 			    break;
 			case 'clearBannerMessage':
-			    navigator.notification.clearBannerMessage();
+			    PhoneGap.checkArgs(args, navigator.notification.clearBannerMessage);
+			    actionFound = true;
 			    break;
 			case 'vibrate':            
-			    navigator.notification.vibrate();
+			    PhoneGap.checkArgs(args, navigator.notification.vibrate);
+			    actionFound = true;
 			    break;
 			case 'beep':               
-			    navigator.notification.beep();
-			    break;   		
+			    PhoneGap.checkArgs(args, navigator.notification.beep);
+			    actionFound = true;
+			    break;       		
 		}
 
-		if (actionFound)
-			win(args);
-		else
-			fail('action not found');
+		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.notification'] = notifications;
+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();